module LittleBoxes::Box::ClassMethods

Public Instance Methods

entry_definitions() click to toggle source
# File lib/little_boxes/box.rb, line 4
def entry_definitions
  @entry_definitions ||= {}
end
inspect() click to toggle source
# File lib/little_boxes/box.rb, line 8
def inspect
  "#{name}(#{entry_definitions.keys.map(&:inspect).join(", ")})"
end

Private Instance Methods

box(name, klass = nil, &block) click to toggle source
# File lib/little_boxes/box.rb, line 24
def box(name, klass = nil, &block)
  if klass
    box_from_klass(name, klass)
  elsif block_given?
    inline_box(name, &block)
  else
    fail ArgumentError,
      'Either class or block should be passed as argument'
  end
end
box_from_klass(name, klass) click to toggle source
# File lib/little_boxes/box.rb, line 35
def box_from_klass(name, klass)
  eager(name) { |box| klass.new(parent: box) }
end
eager(name, options={}, &block) click to toggle source
# File lib/little_boxes/box.rb, line 72
def eager(name, options={}, &block)
  let(name, options.merge(eager: true), &block)
end
eagerc(name, options={}, &block) click to toggle source
# File lib/little_boxes/box.rb, line 76
def eagerc(name, options={}, &block)
  eager(name, options.merge(configure: true), &block)
end
get(name, options={}, &block) click to toggle source
# File lib/little_boxes/box.rb, line 51
def get(name, options={}, &block)
  entry_definitions[name] = EntryDefinition.new(name, options, &block)
    .tap do |entry|
    define_method(name) do
      @entries[name].value
    end
  end
end
getc(name, options={}, &block) click to toggle source
# File lib/little_boxes/box.rb, line 60
def getc(name, options={}, &block)
  get(name, options.merge(configure: true), &block)
end
import(klass) click to toggle source
# File lib/little_boxes/box.rb, line 14
def import(klass)
  importable_definitions = klass.entry_definitions
  entry_definitions.merge!(importable_definitions)
  importable_definitions.each_key do |name|
    define_method(name) do
      @entries[name].value
    end
  end
end
inline_box(name, &block) click to toggle source
# File lib/little_boxes/box.rb, line 39
def inline_box(name, &block)
  eager(name) do |box|
    Class.new do
      include ::LittleBoxes::Box

      define_singleton_method(:name) { "Box[#{name}]" }

      instance_eval(&block)
    end.new(parent: box)
  end
end
let(name, options={}, &block) click to toggle source
# File lib/little_boxes/box.rb, line 64
def let(name, options={}, &block)
  get(name, options.merge(memo: true), &block)
end
letc(name, options={}, &block) click to toggle source
# File lib/little_boxes/box.rb, line 68
def letc(name, options={}, &block)
  let(name, options.merge(configure: true), &block)
end