class ParamsReady::Parameter::PolymorphParameterDefinition

Attributes

types[R]

Public Class Methods

new(*args, identifier: nil, types: [], default_name: nil, **options) click to toggle source
Calls superclass method ParamsReady::Parameter::Definition::new
# File lib/params_ready/parameter/polymorph_parameter.rb, line 105
def initialize(*args, identifier: nil, types: [], default_name: nil, **options)
  @types = {}
  @alt_names = {}
  add_types types
  set_default(default_name)
  super *args, **options
  set_identifier identifier unless identifier.nil?
end

Public Instance Methods

add_type(definition) click to toggle source
# File lib/params_ready/parameter/polymorph_parameter.rb, line 114
def add_type(definition)
  check_type_names(definition)
  raise ParamsReadyError, "Reused name: #{definition.name}" if @types.key? definition.name
  raise ParamsReadyError, "Reused alternative: #{definition.altn}" if @alt_names.key? definition.altn
  @types[definition.name] = definition
  @alt_names[definition.altn] = definition
end
add_types(types) click to toggle source
# File lib/params_ready/parameter/polymorph_parameter.rb, line 132
def add_types(types)
  return if types.nil?
  types.each do |definition|
    add_type definition
  end
end
check_type_names(definition) click to toggle source
# File lib/params_ready/parameter/polymorph_parameter.rb, line 122
def check_type_names(definition)
  return if @marshallers.nil?
  return unless @marshallers.default?
  default = @marshallers.default
  return unless default.respond_to? :reserved?

  raise ParamsReadyError, "Reserved name: #{definition.name}" if default.reserved?(definition.name)
  raise ParamsReadyError, "Reserved alternative: #{definition.altn}" if default.reserved?(definition.altn)
end
finish() click to toggle source
# File lib/params_ready/parameter/polymorph_parameter.rb, line 164
def finish
  set_identifier :ppt unless marshallers.default?
  super
end
set_default(default_name) click to toggle source
# File lib/params_ready/parameter/polymorph_parameter.rb, line 154
def set_default(default_name)
  return if default_name.nil?

  type_def = types[default_name]
  raise ParamsReadyError, "Unknown type '#{default_name}'" if type_def.nil?
  raise ParamsReadyError, "Default type must have default" unless type_def.default_defined?
  frozen = freeze_value(type_def.create)
  @default = frozen
end
set_identifier(type_identifier) click to toggle source
# File lib/params_ready/parameter/polymorph_parameter.rb, line 139
def set_identifier(type_identifier)
  raise ParamsReadyError, "Identifier already taken: #{type_identifier}" if @alt_names&.key?(type_identifier)
  raise ParamsReadyError, "Identifier already taken: #{type_identifier}" if @types&.key?(type_identifier)
  set_marshaller using: :hash, type_identifier: type_identifier
end
type(name, context) click to toggle source
# File lib/params_ready/parameter/polymorph_parameter.rb, line 145
def type(name, context)
  name = if context.alternative?
    @alt_names[name.to_sym].name
  else
    name
  end
  @types[name.to_sym]
end