class ParamsReady::Parameter::HashSetParameterDefinition

Attributes

type[R]
values[R]

Public Class Methods

new(*args, type: :boolean, **opts) click to toggle source
# File lib/params_ready/parameter/hash_set_parameter.rb, line 66
def initialize(*args, type: :boolean, **opts)
  @type = type
  @values = {}
  super *args, **opts
end

Public Instance Methods

add_child(child, value:) click to toggle source
# File lib/params_ready/parameter/hash_set_parameter.rb, line 89
def add_child(child, value:)
  value = value.nil? ? child.name : value

  if @values.key(value).nil?
    @values[child.name] = value
  else
    raise ParamsReadyError, "Value '#{value}' already taken by '#{@values.key(value)}'"
  end
  super child
end
ensure_canonical(set) click to toggle source
# File lib/params_ready/parameter/hash_set_parameter.rb, line 72
def ensure_canonical(set)
  raise ParamsReadyError, "Unexpected default type: #{set.class.name}" unless set.is_a?(Set)

  context = Format.instance(:backend)
  value, _validator = try_canonicalize set, context, nil, freeze: true
  return value if value.length == set.length

  extra_keys = set.reject do |key|
    value.key?(key) || value.key?(key.to_s)
  end.map do |key|
    "'#{key.to_s}'"
  end.join(", ")
  raise ParamsReadyError, "extra elements found -- #{extra_keys}" if extra_keys.length > 0

  value
end