Sha256: 990b5ec36b2a77ec0f44ee28b9515d7843e8a2222f32cfdb81b9e161b335153d
Contents?: true
Size: 1.22 KB
Versions: 2
Compression:
Stored size: 1.22 KB
Contents
module Manioc class Container class DSL < BasicObject def initialize &block @fields = {} instance_exec(&block) end def to_h @fields end def method_missing name, *args, &block return super if args.any? @fields[name] = block end end def initialize constructors: {}, &block @constructors, @cache = constructors, {} register(&block) if block finalize end def with &block self.class.new constructors: @constructors.dup, &block end def clone with end def reset! *keys keys = @cache.keys if keys.empty? keys.each { |k| @cache.delete k } end def preload! @constructors.keys.each { |key| resolve key } end def inspect # :nocov: %|<#{self.class.name}(#{@constructors.keys.join(', ')})>| # :nocov: end private def register &block @constructors.merge! DSL.new(&block).to_h end def resolve key @cache[key] ||= instance_exec(&@constructors[key]) end def finalize @constructors.freeze @constructors.keys.each do |key| define_singleton_method(key) { resolve key } end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
manioc-0.1.5 | lib/manioc/container.rb |
manioc-0.1.4 | lib/manioc/container.rb |