Method: Bluesky::PureComponent.attribute

Defined in:
lib/bluesky/pure_component.rb

.attribute(name, *args) ⇒ Object



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