class Factories::BaseFactory

Public Class Methods

build(opts = {}) click to toggle source
# File lib/factories/base_factory.rb, line 9
def self.build(opts = {})
  new(opts).build
end
create(opts = {}) click to toggle source
# File lib/factories/base_factory.rb, line 5
def self.create(opts = {})
  new(opts).create
end
defaults(&blk) click to toggle source
# File lib/factories/base_factory.rb, line 29
def self.defaults(&blk)
  define_method(:defaults, &blk)
end
model_class(klass = nil) click to toggle source
# File lib/factories/base_factory.rb, line 13
def self.model_class(klass = nil)
  if klass
    @model_class = klass
  else
    @model_class ||= Inflecto.constantize(Inflecto.demodulize(name.gsub(/Factory$/, '')))
  end
end
new(opts = {}) click to toggle source
# File lib/factories/base_factory.rb, line 33
def initialize(opts = {})
  @opts = opts
  @attributes = defaults.merge(opts)
end

Public Instance Methods

build() click to toggle source
# File lib/factories/base_factory.rb, line 42
def build
  model_class.new.tap do |instance|
    attrs = expand_procs @attributes, instance
    instance.assign_attributes attrs
  end
end
create() click to toggle source
# File lib/factories/base_factory.rb, line 38
def create
  build.tap { |instance| instance.save || raise("Factory model did not save") }
end
defaults() click to toggle source
# File lib/factories/base_factory.rb, line 25
def defaults
  raise "not implimented"
end
model_class() click to toggle source
# File lib/factories/base_factory.rb, line 21
def model_class
  self.class.model_class
end

Private Instance Methods

expand_procs(hash, instance) click to toggle source
# File lib/factories/base_factory.rb, line 51
def expand_procs(hash, instance)
  hash.each_with_object({}) do |(k, v), h|
    v = if v.is_a?(Proc)
      if v.arity == 1
        v.call(instance)
      else
        v.call
      end
    else
      v
    end

    h[k] = v
  end
end