class FactoryBot::Sequence

Sequences are defined using sequence within a FactoryBot.define block. Sequence values are generated using next. @api private

Attributes

name[R]

Public Class Methods

new(name, *args, &proc) click to toggle source
# File lib/factory_bot/sequence.rb, line 9
def initialize(name, *args, &proc)
  @name    = name
  @proc    = proc

  options  = args.extract_options!
  @value   = args.first || 1
  @aliases = options.fetch(:aliases) { [] }

  if !@value.respond_to?(:peek)
    @value = EnumeratorAdapter.new(@value)
  end
end

Public Instance Methods

names() click to toggle source
# File lib/factory_bot/sequence.rb, line 34
def names
  [@name] + @aliases
end
next(scope = nil) click to toggle source
# File lib/factory_bot/sequence.rb, line 22
def next(scope = nil)
  if @proc && scope
    scope.instance_exec(value, &@proc)
  elsif @proc
    @proc.call(value)
  else
    value
  end
ensure
  increment_value
end

Private Instance Methods

increment_value() click to toggle source
# File lib/factory_bot/sequence.rb, line 44
def increment_value
  @value.next
end
value() click to toggle source
# File lib/factory_bot/sequence.rb, line 40
def value
  @value.peek
end