class Machiner::Container
Attributes
supercontainers[RW]
Public Class Methods
new(supercontainer = nil)
click to toggle source
# File lib/machiner/container.rb, line 7 def initialize(supercontainer = nil) @container = {} @supercontainers = [] @supercontainers << supercontainer if supercontainer end
Public Instance Methods
[](key_name, **meta)
click to toggle source
# File lib/machiner/container.rb, line 17 def [](key_name, **meta) full_key = @container.keys.detect do |k| check_key_name_and_meta(k, key_name, meta) end return @container[full_key] if full_key @supercontainers.detect { |i| i[key_name, **meta] }&.send(:[], key_name, **meta) end
filtered_keys(key_name, **meta)
click to toggle source
# File lib/machiner/container.rb, line 26 def filtered_keys(key_name, **meta) local_keys = @container.keys.select do |k| check_key_name_and_meta(k, key_name, meta) end return local_keys unless local_keys.empty? @supercontainers.flat_map { |i| i.filtered_keys(key_name, **meta) } end
full_keys()
click to toggle source
# File lib/machiner/container.rb, line 39 def full_keys @container.keys + @supercontainers.flat_map(&:full_keys) end
get_by_full_key(key)
click to toggle source
# File lib/machiner/container.rb, line 43 def get_by_full_key(key) @container[key] || @supercontainers.detect { |i| i.get_by_full_key(key) }&.get_by_full_key(key) end
keys()
click to toggle source
# File lib/machiner/container.rb, line 35 def keys full_keys.map(&:first) end
register(key, value = nil, **meta, &block)
click to toggle source
# File lib/machiner/container.rb, line 13 def register(key, value = nil, **meta, &block) @container[[key.to_s, meta]] = block || value end
Private Instance Methods
check_key_name_and_meta(key, key_name, meta)
click to toggle source
# File lib/machiner/container.rb, line 49 def check_key_name_and_meta(key, key_name, meta) key.first == key_name.to_s && meta.all? do |meta_key, value| key.last && key.last[meta_key] == value end end