lib/scorpion/dependency/builder_dependency.rb
require "scorpion/dependency"
module Scorpion
class Dependency
# {Dependency} that delegates to another object that implements
# #call( scorpion, *args, &block ).
class BuilderDependency < Scorpion::Dependency
# ============================================================================
# @!group Attributes
#
# @!attribute
# @return [#call(scorpion,*args,&block)] the builder to use to fetch instances of the dependency.
attr_reader :builder
#
# @!endgroup Attributes
def initialize( contract, builder = nil, &block )
@builder = block_given? ? block : builder
super contract
end
# @see Scorpion::Dependency#fetch
def fetch( hunt )
builder.call( hunt, *hunt.arguments, &hunt.block )
end
end
end
end