Add a DSL evaluator to QA base factory class
This commit is contained in:
parent
2de8fb7bab
commit
1011ca4949
|
@ -1,6 +1,12 @@
|
||||||
|
require 'forwardable'
|
||||||
|
|
||||||
module QA
|
module QA
|
||||||
module Factory
|
module Factory
|
||||||
class Base
|
class Base
|
||||||
|
extend SingleForwardable
|
||||||
|
|
||||||
|
def_delegators :evaluator, :dependency, :dependencies
|
||||||
|
|
||||||
def fabricate!(*_args)
|
def fabricate!(*_args)
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
end
|
end
|
||||||
|
@ -17,16 +23,25 @@ module QA
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.dependencies
|
def self.evaluator
|
||||||
@dependencies ||= {}
|
@evaluator ||= Factory::Base::DSL.new(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.dependency(factory, as:, &block)
|
class DSL
|
||||||
as.tap do |name|
|
attr_reader :dependencies
|
||||||
class_eval { attr_accessor name }
|
|
||||||
|
|
||||||
Dependency::Signature.new(factory, block).tap do |signature|
|
def initialize(base)
|
||||||
dependencies.store(name, signature)
|
@base = base
|
||||||
|
@dependencies = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
def dependency(factory, as:, &block)
|
||||||
|
as.tap do |name|
|
||||||
|
@base.class_eval { attr_accessor name }
|
||||||
|
|
||||||
|
Dependency::Signature.new(factory, block).tap do |signature|
|
||||||
|
dependencies.store(name, signature)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue