Class: RubyOnAcid::MetaFactory

Inherits:
Factory
  • Object
show all
Defined in:
lib/rubyonacid/factories/meta.rb

Overview

The MetaFactory assigns factories to requested value types.

Direct Known Subclasses

ExampleFactory

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Factory

#boolean, #choose, #get, #within

Constructor Details

#initialize(factory_pool = []) ⇒ MetaFactory

Returns a new instance of MetaFactory.



11
12
13
14
15
# File 'lib/rubyonacid/factories/meta.rb', line 11

def initialize(factory_pool = [])
  super
  @factory_pool = factory_pool
  @assigned_factories = {}
end

Instance Attribute Details

#factory_poolObject

An array of Factory objects to assign to keys.



9
10
11
# File 'lib/rubyonacid/factories/meta.rb', line 9

def factory_pool
  @factory_pool
end

Instance Method Details

#assign_factory(key, factory) ⇒ Object

Assign a factory for subsequent get_unit requests for the given key.



18
19
20
# File 'lib/rubyonacid/factories/meta.rb', line 18

def assign_factory(key, factory)
  @assigned_factories[key] = factory
end

#get_unit(key) ⇒ Object

Returns the value of get_unit from the Factory assigned to the given key. When a key is needed that a Factory is not already assigned to, one will be assigned at random from the factory_pool.



24
25
26
27
# File 'lib/rubyonacid/factories/meta.rb', line 24

def get_unit(key)
  @assigned_factories[key] ||= @factory_pool[rand(@factory_pool.length)]
  @assigned_factories[key].get_unit(key)
end

#reset_assignmentsObject

Clear all factory assignments.



30
31
32
# File 'lib/rubyonacid/factories/meta.rb', line 30

def reset_assignments
  @assigned_factories.clear
end