Module: Modelizer

Includes:
Assertions, Helpers
Defined in:
lib/modelizer.rb,
lib/modelizer/assertions.rb,
lib/modelizer/validations.rb

Defined Under Namespace

Modules: Assertions, Helpers, Validations Classes: FactoryContext, FixtureContext

Constant Summary collapse

VERSION =
"5.0.2"

Class Attribute Summary collapse

Class Method Summary collapse

Methods included from Assertions

#assert_invalid

Methods included from Helpers

#build, #create, #use

Class Attribute Details

.globObject

Returns the value of attribute glob.



69
70
71
# File 'lib/modelizer.rb', line 69

def glob
  @glob
end

Class Method Details

.cacheObject



74
75
76
# File 'lib/modelizer.rb', line 74

def self.cache
  @cache ||= {}
end

.factoriesObject



82
83
84
# File 'lib/modelizer.rb', line 82

def self.factories
  @factories ||= {}
end

.factory(name, model, &initializer) ⇒ Object



78
79
80
# File 'lib/modelizer.rb', line 78

def self.factory name, model, &initializer
  factories[name] = [model, initializer]
end

.fixture(name, model, &initializer) ⇒ Object



86
87
88
# File 'lib/modelizer.rb', line 86

def self.fixture name, model, &initializer
  fixtures[name] = [model, initializer]
end

.fixturesObject



90
91
92
# File 'lib/modelizer.rb', line 90

def self.fixtures
  @fixtures ||= {}
end

.identify(name) ⇒ Object



94
95
96
# File 'lib/modelizer.rb', line 94

def self.identify name
  Zlib.crc32(name.to_s) % (2 ** 30 - 1)
end

.idsObject



98
99
100
# File 'lib/modelizer.rb', line 98

def self.ids
  @ids ||= {}
end

.included(klass) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/modelizer.rb', line 41

def self.included klass
  Dir[glob].sort.each { |f| instance_eval File.read(f), f, 1 }

  instances = {}
  context   = FixtureContext.new instances

  fixtures.each do |name, value|
    instances[name] = value.first.new
  end

  instances.each do |name, obj|
    _, *initializers = fixtures[name]
    initializers.each { |i| context.instance_exec obj, &i }

    obj.id    = identify name
    ids[name] = [obj.class, obj.id]
  end

  ActiveRecord::Base.transaction do
    instances.each do |name, obj|
      unless obj.save
        raise "'#{name}' fixture can't be saved: #{obj.errors.full_messages}"
      end
    end
  end
end