class ParamsReady::Marshaller::InstanceCollection
Attributes
default[R]
instances[R]
Public Class Methods
new(canonical, default = nil, instances = {})
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 9 def initialize(canonical, default = nil, instances = {}) @canonical = canonical @default = default @instances = instances end
Public Instance Methods
add_instance(value_class, instance)
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 48 def add_instance(value_class, instance) raise ParamsReadyError, "Marshaller must be frozen" unless instance.frozen? @instances[value_class] = instance end
canonicalize(definition, input, context, validator, **opts)
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 15 def canonicalize(definition, input, context, validator, **opts) value_class = infer_class(input) marshaller = instance(value_class) raise ParamsReadyError, "Unexpected type for #{definition.name}: #{value_class.name}" if marshaller.nil? marshaller.canonicalize(definition, input, context, validator, **opts) end
default!(value_class)
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 69 def default!(value_class) instance = instance(value_class) raise ParamsReadyError, "No marshaller for class '#{value_class.name}'" if instance.nil? self.default = instance end
default=(instance)
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 62 def default=(instance) raise ParamsReadyError, "Default already defined" if default? raise ParamsReadyError, "Marshaller must be frozen" unless instance.frozen? @default = instance end
default?()
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 75 def default? !@default.nil? end
freeze()
click to toggle source
Calls superclass method
# File lib/params_ready/marshaller/collection.rb, line 98 def freeze @instance.freeze super end
infer_class(value)
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 38 def infer_class(value) if instances.key? value.class value.class elsif value.is_a?(Hash) || Extensions::Hash.acts_as_hash?(value) Hash else value.class end end
instance(value_class)
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 54 def instance(value_class) @instances[value_class] end
instance?(value_class)
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 58 def instance?(value_class) @instances.key?(value_class) end
marshal(parameter, format, **opts)
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 34 def marshal(parameter, format, **opts) default.marshal(parameter, format, **opts) end
marshal_canonical(parameter, format, **opts)
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 23 def marshal_canonical(parameter, format, **opts) marshaller = instance @canonical if marshaller.nil? value = parameter.send(:bare_value) raise ParamsReadyError, "Value is not canonical" unless value.is_a? @canonical value else marshaller.marshal(parameter, format, **opts) end end
populate_clone(clone, other)
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 84 def populate_clone(clone, other) if other.default? && !clone.default? clone.default = other.default end other.instances.each do |value_class, i| next if clone.instance?(value_class) clone.add_instance value_class, i end clone end
reverse_merge(other)
click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 79 def reverse_merge(other) clone = self.class.new(@canonical, @default, @instances.dup) populate_clone(clone, other) end