122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
# File 'lib/bluesky/pure_component.rb', line 122
def self.attribute(name, *args)
case args.length
when 0
define_method(name) do |&block|
if block
_data.store(name, block)
block
else
_data.fetch(name)
end
end
when 1
if args[0].respond_to?(:call)
define_method(name) { _data.fetch(name) { _data.store(name, args[0].call) } }
else
define_method(name) { _data.fetch(name, args[0]) }
end
else
raise ArgumentError, %{ wrong number of arguments
(#{args.length} for 1..2) }
end
define_method("#{name}=") { |value| _data.store(name, value) }
end
|