class ParamsReady::Marshaller::ClassCollection

Attributes

factories[R]

Public Class Methods

new(canonical, default = nil, instances = {}, factories = {}) click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 107
def initialize(canonical, default = nil, instances = {}, factories = {})
  @factories = factories
  super canonical, default, instances
end

Public Instance Methods

add_factory(name, factory) click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 116
def add_factory(name, factory)
  name = name.to_sym
  raise ParamsReadyError, "Name '#{name}' already taken" if factory?(name)
  raise ParamsReadyError, "Factory must be frozen" unless factory.frozen?

  @factories[name] = factory
end
add_instance(value_class, instance) click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 124
def add_instance(value_class, instance)
  raise ParamsReadyError, "Marshaller for '#{value_class.name}' already exists" if instance?(value_class)

  super
end
build_instance(name, **opts) click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 130
def build_instance(name, **opts)
  factory(name).instance(**opts)
end
factory(name) click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 134
def factory(name)
  @factories[name]
end
factory?(name) click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 138
def factory?(name)
  @factories.key? name
end
freeze() click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 142
def freeze
  @factories.freeze
  super
end
instance_collection() click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 112
def instance_collection
  InstanceCollection.new(@canonical, nil, @instances.dup)
end
populate_clone(clone, other) click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 152
def populate_clone(clone, other)
  merged = super

  other.factories.each do |value_class, f|
    next if merged.factory?(value_class)

    clone.add_factory value_class, f
  end

  merged
end
reverse_merge(other) click to toggle source
# File lib/params_ready/marshaller/collection.rb, line 147
def reverse_merge(other)
  clone = self.class.new(@canonical, @default, @instances.dup, @factories.dup)
  populate_clone(clone, other)
end