Class: Olfactory::Sequence

Inherits:
Hash
  • Object
show all
Defined in:
lib/olfactory/sequence.rb

Instance Method Summary collapse

Constructor Details

#initialize(name, options, block) ⇒ Sequence

Returns a new instance of Sequence.



4
5
6
7
8
9
10
# File 'lib/olfactory/sequence.rb', line 4

def initialize(name, options, block)
  self[:name] = name
  self[:evaluator] = block
  self[:scope] = (options[:scope] || :global)
  self[:seed] = (options[:seed] || 0)
  self[:dimensions] = { nil => { :current_seed => (options[:seed] || 0) } }
end

Instance Method Details

#generate(options = {}, block) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/olfactory/sequence.rb', line 12

def generate(options = {}, block)
  seed = options[:seed] || (self[:dimensions][options[:dimension]] ||= { :current_seed => self[:seed] })[:current_seed]
  target = block || self[:evaluator]
  value = target.call(seed, options.reject { |k,v| [:seed, :dimension].include?(k) })
  self[:dimensions][options[:dimension]][:current_seed] += 1 if !options.has_key?(:seed)

  value
end

#resetObject



20
21
22
23
# File 'lib/olfactory/sequence.rb', line 20

def reset
  self[:dimensions].values.each { |v| v[:current_seed] = self[:seed] }
  self
end