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
Calls superclass method
ParamsReady::Parameter::Definition#finish
# 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