class Payload::DefinitionList

Immutable list of definitions.

Used internally by {Container} to define and look up definitions.

@api private

Attributes

definitions[R]

Public Class Methods

new(definitions = {}) click to toggle source
# File lib/payload/definition_list.rb, line 12
def initialize(definitions = {})
  @definitions = definitions
end

Public Instance Methods

add(name, resolver) click to toggle source
# File lib/payload/definition_list.rb, line 16
def add(name, resolver)
  value = find(name).set(Definition.new(name, resolver))
  self.class.new(definitions.merge(name => value))
end
decorate(name, block) click to toggle source
# File lib/payload/definition_list.rb, line 25
def decorate(name, block)
  decorated = find(name).decorate(block)
  self.class.new(@definitions.merge(name => decorated))
end
export(names) click to toggle source
# File lib/payload/definition_list.rb, line 30
def export(names)
  exported_definitions = names.inject({}) do |result, name|
    result.merge! name => ExportedDefinition.new(find(name), self)
  end

  self.class.new exported_definitions
end
find(name) click to toggle source
# File lib/payload/definition_list.rb, line 21
def find(name)
  definitions.fetch(name) { UndefinedDefinition.new(name) }
end
import(imports) click to toggle source
# File lib/payload/definition_list.rb, line 38
def import(imports)
  self.class.new definitions.merge(imports.definitions)
end