ちょっとしたrubyの自作クラスの時に、インスタンスの初期化で変数を渡したいとき、ActiveRecord っぽくやれるといろいろ手抜きができていいなと思ったので。
目次
スニペット
ActiveRecordとActiveSupportを参考に。
class Person
# 任意の属性プロパティ
attr_accessor :name, :job
def initialize(attributes = nil)
attributes.each do |k, v|
send("#{k.to_s}=", v) if respond_to?("#{k.to_s}=")
end if attributes
yield self if block_given?
end
end
new で渡したいだけなのでいろいろ省いて最小限に。
使い方
プロパティを初期化時に渡すのが目的ですので、事前にattr_accessor
で必要なものを定義してください。
ハッシュを渡す
Person.new(name: 'わたし', job: '調停官')
ActiveRecord でモデルを new するときと同じです。
ブロックを渡す
Person.new do |h|
h.name = 'わたし'
h.job = '調停官'
end
こんな感じでも初期化できます。
*
ツッコミ大歓迎