Class: Teyu::DefineInitializer
- Inherits:
-
Object
- Object
- Teyu::DefineInitializer
- Defined in:
- lib/teyu.rb
Instance Method Summary collapse
- #apply ⇒ Object
-
#initialize(klass, arg_names) ⇒ DefineInitializer
constructor
A new instance of DefineInitializer.
Constructor Details
#initialize(klass, arg_names) ⇒ DefineInitializer
Returns a new instance of DefineInitializer.
12 13 14 15 |
# File 'lib/teyu.rb', line 12 def initialize(klass, arg_names) @klass = klass @arg_names = arg_names end |
Instance Method Details
#apply ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/teyu.rb', line 17 def apply sorter = Teyu::ArgsSorter.new(@arg_names) validate_number_of_req_args = method(:validate_number_of_req_args) validate_keyreq_args = method(:validate_keyreq_args) @klass.send(:define_method, :initialize) do |*arg_values| validate_number_of_req_args.call(sorter.req_args, arg_values) validate_keyreq_args.call(sorter.keyreq_args, arg_values) sorter.req_args.zip(arg_values).each do |name, value| instance_variable_set(:"@#{name}", value) end sorter.key_args.each do |name, value| instance_variable_set(:"@#{name}", value) end keyword_arg_values = arg_values[sorter.req_args.length..].find { |value| value.is_a?(Hash) } || {} (sorter.keyword_args & keyword_arg_values.keys).each do |name| instance_variable_set(:"@#{name}", keyword_arg_values[name]) end end end |