Module: L43::OpenObject::Initializer
Instance Method Summary collapse
- #define_dynamic_to_h(klass, keys) ⇒ Object
- #define_initialize(klass, atts, defaults, blk) ⇒ Object
- #define_to_h(klass, keys) ⇒ Object
Instance Method Details
#define_dynamic_to_h(klass, keys) ⇒ Object
33 34 35 36 37 38 39 40 |
# File 'lib/l43/open_object/initializer.rb', line 33 def define_dynamic_to_h(klass, keys) klass.define_method :to_h do |*| keys.inject({}) do |r, k| r.update(k => instance_variable_get("@#{k}")) end end klass.alias_method :deconstruct_keys, :to_h end |
#define_initialize(klass, atts, defaults, blk) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/l43/open_object/initializer.rb', line 7 def define_initialize(klass, atts, defaults, blk) klass.define_method :initialize do |**kwds| missing = atts - kwds.keys raise ArgumentError, "missing required keyword parameters: #{missing.inspect}" unless missing.empty? spurious = kwds.keys - atts - defaults.keys raise ArgumentError, "spurious keyword parameters: #{spurious.inspect}" unless spurious.empty? values = defaults.merge(kwds) values.each do |key, value| instance_variable_set("@#{key}", value) end if respond_to?(:_init) $stderr.puts("Automatic invocation the `_init` method is deprected and will be removed in v0.3") _init end do_we_freeze = instance_exec(&blk) if blk if do_we_freeze == :stay_warm Initializer.define_dynamic_to_h(klass, values.keys) else Initializer.define_to_h(klass, values.keys) to_h freeze end end end |
#define_to_h(klass, keys) ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/l43/open_object/initializer.rb', line 42 def define_to_h(klass, keys) klass.define_method :to_h do |*| @__to_h__ ||= keys.inject({}) do |r, k| r.update(k => instance_variable_get("@#{k}")) end end klass.alias_method :deconstruct_keys, :to_h end |