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