class Trailblazer::Context::ContainerChain
@private used to be called Resolver.
Public Class Methods
find(containers, name)
click to toggle source
# File lib/trailblazer/container_chain.rb, line 26 def self.find(containers, name) containers.find { |container| container.key?(name) && (return container[name]) } end
new(containers, to_hash: nil)
click to toggle source
Keeps a list of containers. When looking up a key/value, containers are traversed in the order they were added until key is found.
Required Container interface: `#key?`, `#[]`.
@note ContainerChain
is an immutable data structure, it does not support writing. @param containers Array of <Container> objects (splatted)
# File lib/trailblazer/container_chain.rb, line 11 def initialize(containers, to_hash: nil) @containers = containers @to_hash = to_hash end
Public Instance Methods
[](name)
click to toggle source
@param name Symbol or String to lookup a value stored in one of the containers.
# File lib/trailblazer/container_chain.rb, line 17 def [](name) self.class.find(@containers, name) end
key?(name)
click to toggle source
@private
# File lib/trailblazer/container_chain.rb, line 22 def key?(name) @containers.find { |container| container.key?(name) } end
keys()
click to toggle source
# File lib/trailblazer/container_chain.rb, line 30 def keys @containers.collect(&:keys).flatten end
to_hash()
click to toggle source
@private
# File lib/trailblazer/container_chain.rb, line 35 def to_hash # FIXME: introduce pattern matching so we can have different "transformers" for each container type. return @to_hash.(@containers) if @to_hash @containers.each_with_object({}) { |container, hash| hash.merge!(container.to_hash) } end