Class: Wardrobe::Attribute
- Inherits:
-
Object
- Object
- Wardrobe::Attribute
- Defined in:
- lib/wardrobe/attribute.rb,
lib/wardrobe/plugins/coercible.rb
Overview
Attribute class
Instance Attribute Summary collapse
-
#getters ⇒ Object
readonly
Returns the value of attribute getters.
-
#ivar_name ⇒ Object
readonly
Returns the value of attribute ivar_name.
-
#klass ⇒ Object
readonly
Returns the value of attribute klass.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#setter_name ⇒ Object
readonly
Returns the value of attribute setter_name.
-
#setters ⇒ Object
readonly
Returns the value of attribute setters.
-
#store ⇒ Object
readonly
Returns the value of attribute store.
Instance Method Summary collapse
- #coerce(val) ⇒ Object
-
#initialize(name, klass, defining_object, config, **options) ⇒ Attribute
constructor
A new instance of Attribute.
- #merge(other, defining_object, config) ⇒ Object
- #validate_klass(klass) ⇒ Object
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, **) @name = name @ivar_name = "@#{name}" @setter_name = "#{name}=" @klass = validate_klass(klass) @options = (, config, defining_object) @getters ||= build_getter_array(defining_object) @setters ||= build_setter_array(defining_object) freeze end |
Instance Attribute Details
#getters ⇒ Object (readonly)
Returns the value of attribute getters.
8 9 10 |
# File 'lib/wardrobe/attribute.rb', line 8 def getters @getters end |
#ivar_name ⇒ Object (readonly)
Returns the value of attribute ivar_name.
8 9 10 |
# File 'lib/wardrobe/attribute.rb', line 8 def ivar_name @ivar_name end |
#klass ⇒ Object (readonly)
Returns the value of attribute klass.
8 9 10 |
# File 'lib/wardrobe/attribute.rb', line 8 def klass @klass end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
8 9 10 |
# File 'lib/wardrobe/attribute.rb', line 8 def name @name end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
8 9 10 |
# File 'lib/wardrobe/attribute.rb', line 8 def @options end |
#setter_name ⇒ Object (readonly)
Returns the value of attribute setter_name.
8 9 10 |
# File 'lib/wardrobe/attribute.rb', line 8 def setter_name @setter_name end |
#setters ⇒ Object (readonly)
Returns the value of attribute setters.
8 9 10 |
# File 'lib/wardrobe/attribute.rb', line 8 def setters @setters end |
#store ⇒ Object (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) = (other.) self.class.new(name, other.klass, defining_object, config, ) 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 |