summaryrefslogtreecommitdiff
path: root/qa/qa/factory/dependency.rb
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/factory/dependency.rb')
-rw-r--r--qa/qa/factory/dependency.rb31
1 files changed, 10 insertions, 21 deletions
diff --git a/qa/qa/factory/dependency.rb b/qa/qa/factory/dependency.rb
index fc5dc82ce29..655e2677db0 100644
--- a/qa/qa/factory/dependency.rb
+++ b/qa/qa/factory/dependency.rb
@@ -1,37 +1,26 @@
module QA
module Factory
class Dependency
- Signature = Struct.new(:factory, :block)
+ Signature = Struct.new(:name, :factory, :block)
- def initialize(name, factory, signature)
- @name = name
- @factory = factory
- @signature = signature
+ def initialize(caller_factory, dependency_signature)
+ @caller_factory = caller_factory
+ @dependency_signature = dependency_signature
end
def overridden?
- !!@factory.public_send(@name)
+ !!@caller_factory.public_send(@dependency_signature.name)
end
- def build!
+ def build!(parents: [])
return if overridden?
- Builder.new(@signature, @factory).fabricate!.tap do |product|
- @factory.public_send("#{@name}=", product)
- end
- end
-
- class Builder
- def initialize(signature, caller_factory)
- @factory = signature.factory
- @block = signature.block
- @caller_factory = caller_factory
+ dependency = @dependency_signature.factory.fabricate!(parents: parents) do |factory|
+ @dependency_signature.block&.call(factory, @caller_factory)
end
- def fabricate!
- @factory.fabricate! do |factory|
- @block&.call(factory, @caller_factory)
- end
+ dependency.tap do |dependency|
+ @caller_factory.public_send("#{@dependency_signature.name}=", dependency)
end
end
end