Class: Philiprehberger::TestFactory::Registry
- Inherits:
-
Object
- Object
- Philiprehberger::TestFactory::Registry
- Defined in:
- lib/philiprehberger/test_factory/registry.rb
Overview
Stores factory definitions, traits, and sequences.
Instance Method Summary collapse
-
#clear! ⇒ void
Reset all definitions, traits, and sequences.
-
#define(name, &block) ⇒ void
Register a factory definition.
-
#get(name) ⇒ Hash?
Retrieve a factory definition.
-
#get_trait(factory_name, trait_name) ⇒ Proc?
Retrieve a trait for a factory.
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
-
#next_in_sequence(name) ⇒ Object
Get the next value from a named sequence.
-
#sequence(name) ⇒ void
Register a sequence generator.
-
#trait(factory_name, trait_name, &block) ⇒ void
Register a trait override for a factory.
Constructor Details
#initialize ⇒ Registry
Returns a new instance of Registry.
10 11 12 |
# File 'lib/philiprehberger/test_factory/registry.rb', line 10 def initialize clear! end |
Instance Method Details
#clear! ⇒ void
This method returns an undefined value.
Reset all definitions, traits, and sequences.
84 85 86 87 88 |
# File 'lib/philiprehberger/test_factory/registry.rb', line 84 def clear! @factories = {} @traits = {} @sequences = {} end |
#define(name, &block) ⇒ void
This method returns an undefined value.
Register a factory definition. If the block accepts a parameter, it receives a DefinitionProxy for declaring callbacks, transient attributes, and associations. The block must return a hash of default attributes.
22 23 24 25 26 27 28 29 30 |
# File 'lib/philiprehberger/test_factory/registry.rb', line 22 def define(name, &block) proxy = DefinitionProxy.new # If the block accepts a parameter, evaluate once to capture DSL declarations. # Blocks without parameters are simple attribute hashes with no DSL usage. proxy.instance_exec(proxy, &block) if block.arity != 0 @factories[name] = { block: block, proxy: proxy } end |
#get(name) ⇒ Hash?
Retrieve a factory definition.
56 57 58 |
# File 'lib/philiprehberger/test_factory/registry.rb', line 56 def get(name) @factories[name] end |
#get_trait(factory_name, trait_name) ⇒ Proc?
Retrieve a trait for a factory.
65 66 67 |
# File 'lib/philiprehberger/test_factory/registry.rb', line 65 def get_trait(factory_name, trait_name) @traits.dig(factory_name, trait_name) end |
#next_in_sequence(name) ⇒ Object
Get the next value from a named sequence.
74 75 76 77 78 79 |
# File 'lib/philiprehberger/test_factory/registry.rb', line 74 def next_in_sequence(name) seq = @sequences[name] raise Error, "Sequence :#{name} is not defined" unless seq seq.next end |
#sequence(name) ⇒ void
This method returns an undefined value.
Register a sequence generator.
48 49 50 |
# File 'lib/philiprehberger/test_factory/registry.rb', line 48 def sequence(name, &) @sequences[name] = Sequence.new(&) end |
#trait(factory_name, trait_name, &block) ⇒ void
This method returns an undefined value.
Register a trait override for a factory.
38 39 40 41 |
# File 'lib/philiprehberger/test_factory/registry.rb', line 38 def trait(factory_name, trait_name, &block) @traits[factory_name] ||= {} @traits[factory_name][trait_name] = block end |