Class: Tainbox::AttributeDefiner
- Defined in:
- lib/tainbox/attribute_definer.rb
Instance Method Summary collapse
- #define_getter ⇒ Object
- #define_setter ⇒ Object
-
#initialize(klass, attribute_name, requested_type, requested_args) ⇒ AttributeDefiner
constructor
A new instance of AttributeDefiner.
Constructor Details
#initialize(klass, attribute_name, requested_type, requested_args) ⇒ AttributeDefiner
Returns a new instance of AttributeDefiner.
9 10 11 12 13 14 |
# File 'lib/tainbox/attribute_definer.rb', line 9 def initialize(klass, attribute_name, requested_type, requested_args) @klass = klass @attribute_name = attribute_name.to_sym @requested_type = requested_type @requested_args = requested_args end |
Instance Method Details
#define_getter ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/tainbox/attribute_definer.rb', line 16 def define_getter klass.tainbox_register_attribute(attribute_name) attribute = attribute_name klass.tainbox_layer.instance_eval do define_method(attribute) do value = instance_variable_get(:"@tainbox_#{attribute}") value.is_a?(Tainbox::DeferredValue) ? instance_exec(&value.proc) : value end end end |
#define_setter ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/tainbox/attribute_definer.rb', line 28 def define_setter klass.tainbox_register_attribute(attribute_name) attribute = attribute_name args = requested_args type = requested_type klass.tainbox_layer.instance_eval do define_method("#{attribute}=") do |value| tainbox_register_attribute_provided(attribute) value = Tainbox::TypeConverter.new(type, value, options: args).convert if type instance_variable_set(:"@tainbox_#{attribute}", value) end define_method("tainbox_set_default_#{attribute}") do if args.has_key?(:default) tainbox_register_attribute_provided(attribute) value = args[:default].deep_dup value = Tainbox::DeferredValue.new(value) if value.is_a?(Proc) instance_variable_set(:"@tainbox_#{attribute}", value) else tainbox_unregister_attribute_provided(attribute) instance_variable_set(:"@tainbox_#{attribute}", nil) end end end end |