Class: Philiprehberger::TestFactory::DefinitionProxy

Inherits:
Object
  • Object
show all
Defined in:
lib/philiprehberger/test_factory/definition_proxy.rb

Overview

DSL proxy used inside factory definition blocks. Supports after_build callbacks, transient attributes, and associations.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDefinitionProxy

Returns a new instance of DefinitionProxy.



17
18
19
20
21
# File 'lib/philiprehberger/test_factory/definition_proxy.rb', line 17

def initialize
  @after_build_callbacks = []
  @transient_attributes = {}
  @associations = {}
end

Instance Attribute Details

#after_build_callbacksArray<Proc> (readonly)

Returns registered after_build callbacks.

Returns:

  • (Array<Proc>)

    registered after_build callbacks



9
10
11
# File 'lib/philiprehberger/test_factory/definition_proxy.rb', line 9

def after_build_callbacks
  @after_build_callbacks
end

#associationsHash (readonly)

Returns association declarations.

Returns:

  • (Hash)

    association declarations



15
16
17
# File 'lib/philiprehberger/test_factory/definition_proxy.rb', line 15

def associations
  @associations
end

#transient_attributesHash (readonly)

Returns transient attribute defaults.

Returns:

  • (Hash)

    transient attribute defaults



12
13
14
# File 'lib/philiprehberger/test_factory/definition_proxy.rb', line 12

def transient_attributes
  @transient_attributes
end

Instance Method Details

#after_build {|Hash| ... } ⇒ void

This method returns an undefined value.

Register an after_build callback.

Yields:

  • (Hash)

    the built object hash



27
28
29
# File 'lib/philiprehberger/test_factory/definition_proxy.rb', line 27

def after_build(&block)
  @after_build_callbacks << block
end

#association(name, factory: name) ⇒ void

This method returns an undefined value.

Declare an association to another factory.

Parameters:

  • name (Symbol)

    the attribute name for the association

  • factory (Symbol) (defaults to: name)

    the factory to build (defaults to name)



46
47
48
# File 'lib/philiprehberger/test_factory/definition_proxy.rb', line 46

def association(name, factory: name)
  @associations[name] = factory
end

#transient { ... } ⇒ void

This method returns an undefined value.

Declare transient attributes that are excluded from the final hash.

Yields:

  • block that calls attribute setters



35
36
37
38
39
# File 'lib/philiprehberger/test_factory/definition_proxy.rb', line 35

def transient(&)
  collector = TransientCollector.new
  collector.instance_eval(&)
  @transient_attributes.merge!(collector.attributes)
end