Class: AttrExtras::AttrInitialize::ParamsBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/attr_extras/params_builder.rb

Constant Summary collapse

REQUIRED_SIGN =
"!".freeze

Instance Method Summary collapse

Constructor Details

#initialize(names) ⇒ ParamsBuilder

Returns a new instance of ParamsBuilder.



6
7
8
# File 'lib/attr_extras/params_builder.rb', line 6

def initialize(names)
  @names = names
end

Instance Method Details

#default_valuesObject



32
33
34
35
36
37
38
39
40
# File 'lib/attr_extras/params_builder.rb', line 32

def default_values
  @default_values ||= begin
    default_values_hash = names.flatten.select { |name| name.is_a?(Hash) }.inject(:merge) || {}

    default_values_hash.map { |name, value|
      [ remove_required_sign(name), value ]
    }.to_h
  end
end

#hash_argsObject



17
18
19
20
21
# File 'lib/attr_extras/params_builder.rb', line 17

def hash_args
  @hash_args ||= (names - positional_args).flatten.flat_map { |name|
    name.is_a?(Hash) ? name.keys : name
  }
end

#hash_args_namesObject



23
24
25
# File 'lib/attr_extras/params_builder.rb', line 23

def hash_args_names
  @hash_args_names ||= hash_args.map { |name| remove_required_sign(name) }
end

#hash_args_requiredObject



27
28
29
30
# File 'lib/attr_extras/params_builder.rb', line 27

def hash_args_required
  @hash_args_required ||= hash_args.select { |name| name.to_s.end_with?(REQUIRED_SIGN) }.
    map { |name| remove_required_sign(name) }
end

#positional_argsObject



13
14
15
# File 'lib/attr_extras/params_builder.rb', line 13

def positional_args
  @positional_args ||= names.take_while { |name| !name.is_a?(Array) }
end