Module: Modelizer

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

Defined Under Namespace

Modules: Assertions, Validations Classes: Context

Constant Summary collapse

VERSION =
"5.0.1"

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Assertions

#assert_invalid

Class Attribute Details

.globObject

Returns the value of attribute glob.



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

def glob
  @glob
end

Class Method Details

.cacheObject



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

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

.factoriesObject



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

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

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



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

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

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



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

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

.fixturesObject



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

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

.identify(name) ⇒ Object



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

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

.idsObject



103
104
105
# File 'lib/modelizer.rb', line 103

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

.included(klass) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/modelizer.rb', line 46

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

  instances = {}
  context   = Context.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

Instance Method Details

#build(name, overrides = nil, &block) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/modelizer.rb', line 7

def build name, overrides = nil, &block
  model, *initializers = Modelizer.factories[name]
  raise "Can't find the \"#{name}\" factory." unless model

  obj = model.new

  initializers << block if block_given?
  initializers.each { |i| instance_exec obj, &i }

  overrides.each { |k, v| obj.send "#{k}=", v } if overrides
  
  obj
end

#create(name, overrides = nil, &block) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/modelizer.rb', line 21

def create name, overrides = nil, &block
  obj = build name, overrides, &block

  obj.save!

  obj
end

#use(name) ⇒ Object



29
30
31
32
33
34
# File 'lib/modelizer.rb', line 29

def use name
  model, id = Modelizer.ids[name]
  raise "Can't find the \"#{name}\" fixture." unless model

  model.find id
end