Module: InitializeWith::ClassMethods

Defined in:
lib/initialize_with.rb

Instance Method Summary collapse

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

Raises:

  • (ArgumentError)


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