ホーム > Rails > プラグインを作ってみた。

プラグインを作ってみた。 このエントリーを含むはてなブックマーク はてなブックマーク - プラグインを作ってみた。

2007 年 10 月 11 日

IBM 境界を越える: Rails での拡張 – Japan

acts_as プラグインを解剖する

[ref.] acts_as_state_machine (記事にあるURLはすでに存在しないので)

プラグインの勉強にと、カヤックの人の記事を参考におみくじプラグインを作ってみました。
モデルにfortuneというアトリビュートがあれば、saveするときに勝手に運勢を突っ込みます。ただそれだけです。
こんな感じ。

>> boy = Person.new(:name => 'Keiichi')
>> puts boy.name, boy.fortune
Keiichi
nil
>> boy.save
>> puts boy.name, boy.fortune
Keiichi
小吉

詳細は以下の通り。


主要なファイル


vendor/plugins/acts_as_fortuned/init.rb

require 'acts_as_fortuned'

ActiveRecord::Base.class_eval do
include SaikyoLine::Acts::Fortuned
end

vendor/plugins/acts_as_fortuned/lib/acts_as_fortuned.rb

module SaikyoLine
module Acts
module Fortuned
def self.included(base)
base.extend ActMethods
end

module ActMethods
def acts_as_fortuned
self.extend ClassMethods
self.instance_eval {include InstanceMethods}

before_save :cast
end
end

module ClassMethods
# No methods defined in here.
end

module InstanceMethods
def cast
if self.respond_to? 'fortune='
fortunes = %w(大吉 吉 中吉 小吉 凶)
self.fortune = fortunes[rand(fortunes.length)]
end
end
end
end
end
end

使い方


db/migrate/001_create_people.rb

class CreatePeople < ActiveRecord::Migration
def self.up
create_table :people do |t|
t.column :name, :string
t.column :fortune, :string
end
end

def self.down
drop_table :people
end
end

app/models/person.rb

class Person < ActiveRecord::Base
acts_as_fortuned
end

きっと更新しないのでソースはtarボールで置きます。
acts_as_fortuned.tar.gz

LINEで送る
Pocket

カテゴリー: Rails タグ:
コメントは受け付けていません。