Class: Wardrobe::Attribute

Inherits:
Object
  • Object
show all
Defined in:
lib/wardrobe/attribute.rb,
lib/wardrobe/plugins/coercible.rb

Overview

Attribute class

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, klass, defining_object, config, **options) ⇒ Attribute

Returns a new instance of Attribute.



11
12
13
14
15
16
17
18
19
20
# File 'lib/wardrobe/attribute.rb', line 11

def initialize(name, klass, defining_object, config, **options)
  @name = name
  @ivar_name = "@#{name}"
  @setter_name = "#{name}="
  @klass = validate_klass(klass)
  @options = validate_options(options, config, defining_object)
  @getters ||= build_getter_array(defining_object)
  @setters ||= build_setter_array(defining_object)
  freeze
end

Instance Attribute Details

#gettersObject (readonly)

Returns the value of attribute getters.



8
9
10
# File 'lib/wardrobe/attribute.rb', line 8

def getters
  @getters
end

#ivar_nameObject (readonly)

Returns the value of attribute ivar_name.



8
9
10
# File 'lib/wardrobe/attribute.rb', line 8

def ivar_name
  @ivar_name
end

#klassObject (readonly)

Returns the value of attribute klass.



8
9
10
# File 'lib/wardrobe/attribute.rb', line 8

def klass
  @klass
end

#nameObject (readonly)

Returns the value of attribute name.



8
9
10
# File 'lib/wardrobe/attribute.rb', line 8

def name
  @name
end

#optionsObject (readonly)

Returns the value of attribute options.



8
9
10
# File 'lib/wardrobe/attribute.rb', line 8

def options
  @options
end

#setter_nameObject (readonly)

Returns the value of attribute setter_name.



8
9
10
# File 'lib/wardrobe/attribute.rb', line 8

def setter_name
  @setter_name
end

#settersObject (readonly)

Returns the value of attribute setters.



8
9
10
# File 'lib/wardrobe/attribute.rb', line 8

def setters
  @setters
end

#storeObject (readonly)

Returns the value of attribute store.



8
9
10
# File 'lib/wardrobe/attribute.rb', line 8

def store
  @store
end

Instance Method Details

#coerce(val) ⇒ Object



20
21
22
23
24
25
# File 'lib/wardrobe/plugins/coercible.rb', line 20

def coerce(val)
  klass.coerce(val, self)
rescue Plugins::Coercible::Refinements::UnsupportedError => e
  raise e.class,
        "Can't coerce #{val.class} `#{val}` into #{klass}"
end

#merge(other, defining_object, config) ⇒ Object



34
35
36
37
# File 'lib/wardrobe/attribute.rb', line 34

def merge(other, defining_object, config)
  merged_options = merge_options(other.options)
  self.class.new(name, other.klass, defining_object, config, merged_options)
end

#validate_klass(klass) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/wardrobe/attribute.rb', line 22

def validate_klass(klass)
  if klass.is_a?(Array) && klass.count != 1
    raise StandardError, %(
      `Array#{klass.map(&:name)}' contains two many classes.
      No more than one is allowed.
    )
  elsif klass.is_a?(Hash)
    # TODO: Validate hash
  end
  klass
end