Module: Conversion::Accessors::ClassMethods
- Defined in:
- lib/conversion/accessors.rb
Overview
This module is included in classes that includes Conversion::Accessors
Constant Summary collapse
- @@attribute_conversion_mode =
nil
Instance Method Summary collapse
-
#attr_accessor(*args) ⇒ Object
Defines readers and setters for each symbol argument.
-
#attr_writer(*args) ⇒ Object
Defines setters for each symbol argument.
-
#store_attributes_with_mode(mode) ⇒ Object
Specifies the default storage mode for attributes defined after this method is called.
-
#store_enumerable_attributes(bool = true) ⇒ Object
Specifies whether entries should be converted when an enumerable is stored in an attribute.
Instance Method Details
#attr_accessor(*args) ⇒ Object
Defines readers and setters for each symbol argument.
Option keys may contain :store_as and :store_mode, which are used as the target argument and :mode option of the Conversion.converter method.
class A
include Conversion::Accessors
attr_accessor :attr1, :store_as => Integer
attr_accessor :attr2, :store_as => Integer, :store_mode => :strong_type_checking
end
a = A.new
a.attr1 = '1' # stores 1 in a.attr1
a.attr2 = '1' # raises ArgumentError
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/conversion/accessors.rb', line 48 def attr_accessor(*args) = args.last.is_a?(Hash) ? args.pop : {} = ACCESSOR_OPTIONS.inject({}) { |h, accessor_option| option_value = [accessor_option] h[accessor_option] = option_value if option_value h } unless .empty? attr_reader(*args) args.each { |symbol| attr_writer(symbol, ) } else attr_accessor_before_conversion(*args) end nil end |
#attr_writer(*args) ⇒ Object
Defines setters for each symbol argument.
Option keys may contain :store_as and :store_mode, which are used as the target argument and :mode option of the Conversion.converter method.
class A
include Conversion::Accessors
attr_writer :attr1, :store_as => Integer
attr_writer :attr2, :store_as => Integer, :store_mode => :strong_type_checking
end
a = A.new
a.attr1 = '1' # stores 1 in a.attr1
a.attr2 = '1' # raises ArgumentError
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/conversion/accessors.rb', line 76 def attr_writer(*args) = args.last.is_a?(Hash) ? args.pop : {} if target = [:store_as] mode = [:store_mode] || @@attribute_conversion_mode converter = if @@convert_enumerable_attributes Conversion.entries_converter(target, :mode=>mode) else Conversion.converter(target, :mode=>mode) end if converter args.each { |symbol| define_method("#{symbol}=") { |*value| instance_variable_set("@#{symbol}", converter.call(*value)) } } return nil end end attr_writer_before_conversion(*args) nil end |
#store_attributes_with_mode(mode) ⇒ Object
Specifies the default storage mode for attributes defined after this method is called
class A
include Conversion::Accessors
attr_accessor :attr1, :store_as => Integer
store_attributes_with_mode :weak
attr_accessor :attr2, :store_as => Integer
end
a = A.new
a.attr1 = 'abc' # raises
a.attr2 = 'abc' # stores 'abc' in a.attr2
131 132 133 |
# File 'lib/conversion/accessors.rb', line 131 def store_attributes_with_mode(mode) @@attribute_conversion_mode = mode end |
#store_enumerable_attributes(bool = true) ⇒ Object
Specifies whether entries should be converted when an enumerable is stored in an attribute
class A
include Conversion::Accessors
attr_accessor :attr1, :store_as => Integer
store_enumerable_attributes
attr_accessor :attr2, :store_as => Integer
store_enumerable_attributes false
attr_accessor :attr3, :store_as => Integer
end
a = A.new
a.attr1 = ['1'] # raises
a.attr2 = ['1'] # stores [1] in a.attr2
a.attr3 = ['1'] # raises
115 116 117 |
# File 'lib/conversion/accessors.rb', line 115 def store_enumerable_attributes(bool=true) @@convert_enumerable_attributes = bool end |