Sha256: a996864ebc7317b049e1ece954fe3129dde0a7d4115fb35fdf866f704df8e04f

Contents?: true

Size: 1.37 KB

Versions: 15

Compression:

Stored size: 1.37 KB

Contents

class Factory

  class Sequence

    def initialize (&proc) #:nodoc:
      @proc  = proc
      @value = 0
    end

    # Returns the next value for this sequence
    def next
      @value += 1
      @proc.call(@value)
    end

  end

  cattr_accessor :sequences #:nodoc:
  self.sequences = {}

  # Defines a new sequence that can be used to generate unique values in a specific format.
  #
  # Arguments:
  #   name: (Symbol)
  #     A unique name for this sequence. This name will be referenced when
  #     calling next to generate new values from this sequence.
  #   block: (Proc)
  #     The code to generate each value in the sequence. This block will be
  #     called with a unique number each time a value in the sequence is to be
  #     generated. The block should return the generated value for the
  #     sequence.
  #
  # Example:
  #   
  #   Factory.sequence(:email) {|n| "somebody_#{n}@example.com" }
  def self.sequence (name, &block)
    self.sequences[name] = Sequence.new(&block)
  end

  # Generates and returns the next value in a sequence.
  #
  # Arguments:
  #   name: (Symbol)
  #     The name of the sequence that a value should be generated for.
  #
  # Returns:
  #   The next value in the sequence. (Object)
  def self.next (sequence)
    unless self.sequences.key?(sequence)
      raise "No such sequence: #{sequence}"
    end

    self.sequences[sequence].next
  end

end

Version data entries

15 entries across 15 versions & 7 rubygems

Version Path
gabrielg-factory_girl-1.1.6 lib/factory_girl/sequence.rb
gabrielg-factory_girl-1.1.7 lib/factory_girl/sequence.rb
gabrielg-factory_girl-1.1.8 lib/factory_girl/sequence.rb
gabrielg-factory_girl-1.1.9 lib/factory_girl/sequence.rb
gabrielg-factory_girl-1.2.0 lib/factory_girl/sequence.rb
gabrielg-factory_girl-1.2.1 lib/factory_girl/sequence.rb
gabrielg-factory_girl-1.2.2 lib/factory_girl/sequence.rb
handcrafted-factory_girl-1.1.14 lib/factory_girl/sequence.rb
jrun-factory_girl-1.1.3.9999 lib/factory_girl/sequence.rb
multiplay-factory_girl-1.1.5 lib/factory_girl/sequence.rb
thoughtbot-factory_girl-1.1.3 lib/factory_girl/sequence.rb
thoughtbot-factory_girl-1.1.4 lib/factory_girl/sequence.rb
threedaymonk-factory_girl-1.1.4 lib/factory_girl/sequence.rb
factory_girl-1.1.3 lib/factory_girl/sequence.rb
factory_girl-1.1.4 lib/factory_girl/sequence.rb