class ParamsReady::Parameter::AbstractHashParameterDefinition

Attributes

key_map[R]
names[R]

Public Class Methods

new(*args, **options) click to toggle source
Calls superclass method
# File lib/params_ready/parameter/abstract_hash_parameter.rb, line 162
def initialize(*args, **options)
  super *args, **options
  @key_map = nil
  @names = {}
end

Public Instance Methods

add_child(child) click to toggle source
# File lib/params_ready/parameter/abstract_hash_parameter.rb, line 194
def add_child(child)
  raise ParamsReadyError, "Not a parameter definition: '#{child.class.name}'" unless child.is_a?(AbstractDefinition)
  raise ParamsReadyError, "Name already there: '#{child.name}'" if @names.key?(child.name)
  raise ParamsReadyError, "Child can't be added after default has been set" if default_defined?
  @names[child.name] = child
end
child_definition(name) click to toggle source
# File lib/params_ready/parameter/abstract_hash_parameter.rb, line 168
def child_definition(name)
  raise ParamsReadyError, "No such name: #{name}" unless names.key? name
  names[name]
end
duplicate_value(value) click to toggle source
# File lib/params_ready/parameter/abstract_hash_parameter.rb, line 149
def duplicate_value(value)
  value.values.map do |param|
    [param.name, param.dup]
  end.to_h
end
freeze_value(value) click to toggle source
# File lib/params_ready/parameter/abstract_hash_parameter.rb, line 155
def freeze_value(value)
  value.values.each(&:freeze)
  value.freeze
end
has_child?(name) click to toggle source
# File lib/params_ready/parameter/abstract_hash_parameter.rb, line 173
def has_child?(name)
  names.key? name
end
infer_default() click to toggle source
# File lib/params_ready/parameter/abstract_hash_parameter.rb, line 182
def infer_default
  names.reduce({}) do |result, pair|
    child_def = pair[1]
    unless child_def.default_defined?
      raise ParamsReadyError, "Can't infer default, child '#{definition.name}' is not optional and has no default" unless child_def.optional?
    else
      result[child_def.name] = child_def.default
    end
    result
  end
end
set_default(value) click to toggle source
Calls superclass method
# File lib/params_ready/parameter/abstract_hash_parameter.rb, line 177
def set_default(value)
  value = infer_default if value == :inferred
  super(value)
end