Module: InitializeWith::ClassMethods
- Defined in:
- lib/initialize_with.rb
Instance Method Summary collapse
- #_apply_initialization_parameters(instance, *args) ⇒ Object
- #_validate_initialization_parameters!(*args) ⇒ Object
- #initialize_with(*args, **kwargs, &blk) ⇒ Object
Instance Method Details
#_apply_initialization_parameters(instance, *args) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/initialize_with.rb', line 40 def _apply_initialization_parameters instance, *args # [1, 2, 3 ] # [ 4, 5] => # [1, 2, 3, 5] names = @_initialize_with + @_initialize_with_optional.keys values = args + @_initialize_with_optional.values.drop(args.size - @_initialize_with.size) names.zip(values).each do |name, val| instance.instance_variable_set("@#{name}", val) end if @_initialize_with_splat instance.instance_variable_set("@#{@_initialize_with_splat}", args[names.size..-1]) end end |
#_validate_initialization_parameters!(*args) ⇒ Object
31 32 33 34 35 36 37 38 |
# File 'lib/initialize_with.rb', line 31 def _validate_initialization_parameters! *args @_initialize_with ||= [] @_initialize_with_optional ||= {} max_args = @_initialize_with.size + @_initialize_with_optional.size raise ArgumentError, "wrong number of arguments (given #{args.size}, expected #{@_initialize_with.size})" unless args.size >= @_initialize_with.size raise ArgumentError, "wrong number of arguments (given #{args.size}, expected #{@_initialize_with.size..(max_args)})" if @_initialize_with_splat.nil? && args.size > max_args end |
#initialize_with(*args, **kwargs, &blk) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/initialize_with.rb', line 15 def initialize_with *args, **kwargs, &blk @_initialize_with ||= [] @_initialize_with += args args.each { |name| attr_reader name } @_initialize_with_splat = kwargs.delete(:splat) attr_reader @_initialize_with_splat if @_initialize_with_splat @_initialize_with_optional ||= {} @_initialize_with_optional.merge! kwargs kwargs.each { |name, _default| attr_reader name } @_initialize_with_blocks ||= [] @_initialize_with_blocks << blk if blk end |