Sha256: 11b4ce54466901ea5d3768df0f75edbe427635c0ae06d5c54d570ca4a680855a
Contents?: true
Size: 1.78 KB
Versions: 2
Compression:
Stored size: 1.78 KB
Contents
# Class for defining blueprint dependencies. Accepts up to 3 params: # * name - pass the name of blueprint to build when trying to access value of this dependency. # * iv_name (optional) - pass the name of instance variable to use for value. Defaults to same name as blueprint name. # * options (optional) - pass options that are then passed to blueprint when building. # Examples: # Blueprints::Dependency.new(:blueprint).value # Builds blueprint 'blueprint' and returns value of @blueprint instance variable # Blueprints::Dependency.new(:blueprint, value).value # Builds blueprint 'blueprint' and returns value of @value instance variable # Blueprints::Dependency.new(:blueprint, :option => true).value # Builds blueprint 'blueprint' with options and returns value of @value instance variable # # Blueprints::Dependency objects also catch all missing methods. They are later replayed on instance variable when getting value. Example: # d = Blueprints::Dependency.new(:blueprint).name.size # d.value # => 4 when @blueprint.name == 'John' class Blueprints::Dependency # Initializes new copy of Blueprints::Dependency with name, iv_name and options. def initialize(name, *args) @name = name @options = args.extract_options! @iv_name = args.first || @name @registry = [] end # Builds blueprint (if necessary) and returns the value of instance variable. def value Blueprints::RootNamespace.root.build @name => @options @registry.inject(Blueprints::RootNamespace.root.context.instance_variable_get(:"@#{@iv_name}")) do |value, (method, args, block)| value.send(method, *args, &block) end end # Catches all missing methods to later replay when asking for value. def method_missing(method, *args, &block) @registry << [method, args, block] self end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
blueprints-0.8.1 | lib/blueprints/dependency.rb |
blueprints-0.8.0 | lib/blueprints/dependency.rb |