diff options
Diffstat (limited to 'qa/qa/factory/dependency.rb')
-rw-r--r-- | qa/qa/factory/dependency.rb | 31 |
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 |