mongo_db 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. data/lib/mongo_db/driver/{core/collection.rb → collection.rb} +13 -5
  2. data/lib/mongo_db/driver/{core/database.rb → database.rb} +0 -0
  3. data/lib/mongo_db/driver/dynamic_finders.rb +41 -0
  4. data/lib/mongo_db/driver.rb +33 -2
  5. data/lib/mongo_db/migration/definition.rb +19 -0
  6. data/lib/mongo_db/migration/migration.rb +68 -0
  7. data/lib/mongo_db/migration/tasks.rb +19 -0
  8. data/lib/mongo_db/migration.rb +8 -0
  9. data/lib/mongo_db/model/assignment.rb +54 -0
  10. data/lib/mongo_db/model/callbacks.rb +36 -0
  11. data/lib/mongo_db/model/crud.rb +28 -0
  12. data/lib/mongo_db/model/db.rb +53 -0
  13. data/lib/mongo_db/model/misc.rb +14 -0
  14. data/lib/mongo_db/model/model.rb +10 -0
  15. data/lib/mongo_db/model/query.rb +36 -0
  16. data/lib/mongo_db/model/scope.rb +99 -0
  17. data/lib/mongo_db/model/spec.rb +12 -0
  18. data/lib/mongo_db/model/support/types.rb +110 -0
  19. data/lib/mongo_db/model/validation.rb +5 -0
  20. data/lib/mongo_db/model.rb +30 -0
  21. data/lib/mongo_db/object/object_serializer.rb +20 -21
  22. data/readme.md +132 -19
  23. data/spec/driver/{core/collection_spec.rb → collection_spec.rb} +13 -0
  24. data/spec/driver/{core/crud_spec.rb → crud_spec.rb} +0 -0
  25. data/spec/driver/{core/database_spec.rb → database_spec.rb} +0 -0
  26. data/spec/driver/dynamic_finders_spec.rb +50 -0
  27. data/spec/driver/{core/hash_helper_spec.rb → hash_helper_spec.rb} +0 -0
  28. data/spec/{model/example.rb → integration/am_conversion_spec.rb} +0 -0
  29. data/spec/integration/am_validation_spec.rb +40 -0
  30. data/spec/migration/migration_spec.rb +60 -0
  31. data/spec/model/assignment_spec.rb +79 -0
  32. data/spec/model/callbacks_spec.rb +47 -0
  33. data/spec/model/{model_crud.rb → crud_spec.rb} +46 -36
  34. data/spec/model/db_spec.rb +63 -0
  35. data/spec/model/misc_spec.rb +32 -0
  36. data/spec/model/query_spec.rb +47 -0
  37. data/spec/model/scope_spec.rb +149 -0
  38. data/spec/model/spec_helper.rb +4 -0
  39. data/spec/model/validation_spec.rb +37 -0
  40. data/spec/object/callbacks_spec.rb +6 -4
  41. data/spec/object/crud_shared.rb +1 -1
  42. data/spec/object/crud_spec.rb +15 -10
  43. data/spec/object/spec_helper.rb +3 -2
  44. data/spec/object/validation_spec.rb +4 -2
  45. metadata +39 -18
  46. data/lib/mongo_db/driver/core.rb +0 -29
  47. data/lib/mongo_db/driver/more/collection_finders.rb +0 -43
  48. data/lib/mongo_db/driver/more.rb +0 -10
  49. data/spec/driver/more/querying_spec.rb +0 -59
  50. data/spec/model/callbacks.rb +0 -100
  51. data/spec/test.rb +0 -10
@@ -0,0 +1,79 @@
1
+ require 'model/spec_helper'
2
+
3
+ describe 'Model callbacks' do
4
+ with_mongo
5
+
6
+ after{remove_constants :User, :Writer}
7
+
8
+ it "should update attributes" do
9
+ class User
10
+ inherit Mongo::Model
11
+
12
+ attr_accessor :name, :active, :age, :banned
13
+ end
14
+
15
+ u = User.new
16
+ u.set name: 'Alex', active: '1', age: '31', banned: '0'
17
+ [u.name, u.active, u.age, u.banned].should == ['Alex', '1', '31', '0']
18
+ end
19
+
20
+ it "should update only specified attributes" do
21
+ class User
22
+ inherit Mongo::Model
23
+
24
+ attr_accessor :name, :active, :age, :banned
25
+
26
+ assignment do
27
+ name String, true
28
+ active Boolean, true
29
+ age Integer, true
30
+ banned Boolean
31
+ end
32
+ end
33
+
34
+ u = User.new
35
+ u.set name: 'Alex', active: '1', age: '31', password: 'fake'
36
+ [u.name, u.active, u.age, u.banned].should == ['Alex', true, 31, nil]
37
+
38
+ # should allow to forcefully cast and update any attribute
39
+ u.set! banned: '0'
40
+ u.banned.should == false
41
+ end
42
+
43
+ it "should inherit assignment rules" do
44
+ class User
45
+ inherit Mongo::Model
46
+
47
+ attr_accessor :age
48
+
49
+ assignment do
50
+ age Integer, true
51
+ end
52
+ end
53
+
54
+ class Writer < User
55
+ attr_accessor :posts
56
+
57
+ assignment do
58
+ posts Integer, true
59
+ end
60
+ end
61
+
62
+ u = Writer.new
63
+ u.set age: '20', posts: '12'
64
+ [u.age, u.posts].should == [20, 12]
65
+ end
66
+
67
+ it 'casting smoke test' do
68
+ [
69
+ Boolean, '1', true,
70
+ Date, '2011-08-23', Date.parse('2011-08-23'),
71
+ Float, '1.2', 1.2,
72
+ Integer, '10', 10,
73
+ String, 'Hi', 'Hi',
74
+ Time, '2011-08-23', Date.parse('2011-08-23').to_time
75
+ ].each_slice 3 do |type, raw, expected|
76
+ type.cast(raw).should == expected
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,47 @@
1
+ require 'model/spec_helper'
2
+
3
+ describe 'Model callbacks' do
4
+ with_mongo
5
+
6
+ after(:all){remove_constants :TheModel, :Player}
7
+
8
+ it "callback integration" do
9
+ class TheModel
10
+ inherit Mongo::Model
11
+ end
12
+
13
+ model = TheModel.new
14
+
15
+ model.should_receive(:run_before_callbacks).with(:save, {method: :save})
16
+ model._run_callbacks :before, :save
17
+ end
18
+
19
+ it "integration smoke test" do
20
+ class Player
21
+ inherit Mongo::Model
22
+
23
+ before_validate :before_validate_check
24
+ after_save :after_save_check
25
+
26
+ attr_accessor :missions
27
+
28
+ class Mission
29
+ inherit Mongo::Model
30
+
31
+ before_validate :before_validate_check
32
+ after_save :after_save_check
33
+ end
34
+ end
35
+
36
+ mission = Player::Mission.new
37
+ player = Player.new
38
+ player.missions = [mission]
39
+
40
+ player.should_receive(:before_validate_check).once.ordered.and_return(nil)
41
+ mission.should_receive(:before_validate_check).once.ordered.and_return(nil)
42
+ player.should_receive(:after_save_check).once.ordered.and_return(nil)
43
+ mission.should_receive(:after_save_check).once.ordered.and_return(nil)
44
+
45
+ db.units.save(player).should be_true
46
+ end
47
+ end
@@ -1,101 +1,111 @@
1
- require 'spec_helper'
1
+ require 'model/spec_helper'
2
2
  require 'object/crud_shared'
3
3
 
4
4
  describe "Model CRUD" do
5
- with_mongo
5
+ with_mongo_model
6
6
 
7
7
  describe 'simple' do
8
- before do
9
- class Person
8
+ before :all do
9
+ class Unit
10
10
  inherit Mongo::Model
11
- collection{db.units}
11
+ collection :units
12
12
 
13
- def initialize name = nil, info = nil; @name, @info = name, info end
14
13
  attr_accessor :name, :info
15
14
  def == o; [self.class, name, info] == [o.class, o.respond_to(:name), o.respond_to(:info)] end
16
15
  end
16
+ end
17
+ after(:all){remove_constants :Unit}
17
18
 
18
- @zeratul = Person.new 'Zeratul', 'Dark Templar'
19
+ before do
20
+ @zeratul = Unit.new.set name: 'Zeratul', info: 'Dark Templar'
19
21
  end
20
- after{remove_constants :Person}
21
22
 
22
23
  it_should_behave_like "object CRUD"
23
24
 
24
25
  it 'model crud' do
25
26
  # read
26
- Person.count.should == 0
27
- Person.all.should == []
28
- Person.first.should == nil
27
+ Unit.count.should == 0
28
+ Unit.all.should == []
29
+ Unit.first.should == nil
29
30
 
30
31
  # create
31
32
  @zeratul.save.should be_true
32
33
  @zeratul._id.should_not be_nil
33
34
 
34
35
  # read
35
- Person.count.should == 1
36
- Person.all.should == [@zeratul]
37
- Person.first.should == @zeratul
38
- Person.first.object_id.should_not == @zeratul.object_id
36
+ Unit.count.should == 1
37
+ Unit.all.should == [@zeratul]
38
+ Unit.first.should == @zeratul
39
+ Unit.first.object_id.should_not == @zeratul.object_id
39
40
 
40
41
  # update
41
42
  @zeratul.info = 'Killer of Cerebrates'
42
43
  @zeratul.save.should be_true
43
- Person.count.should == 1
44
- Person.first(name: 'Zeratul').info.should == 'Killer of Cerebrates'
44
+ Unit.count.should == 1
45
+ Unit.first(name: 'Zeratul').info.should == 'Killer of Cerebrates'
45
46
 
46
47
  # destroy
47
48
  @zeratul.destroy.should be_true
48
- Person.count.should == 0
49
+ Unit.count.should == 0
49
50
  end
50
51
 
51
52
  it 'should be able to save to another collection' do
52
53
  # create
53
- @zeratul.save(collection: db.protosses).should be_true
54
+ @zeratul.save(collection: db.heroes).should be_true
54
55
  @zeratul._id.should_not be_nil
55
56
 
56
57
  # read
57
- Person.count.should == 0
58
- db.protosses.count.should == 1
59
- db.protosses.should == @zeratul
60
- db.protosses.object_id.should_not == @zeratul.object_id
58
+ Unit.count.should == 0
59
+ db.heroes.count.should == 1
60
+ db.heroes.first.should == @zeratul
61
+ db.heroes.first.object_id.should_not == @zeratul.object_id
61
62
 
62
63
  # update
63
64
  @zeratul.info = 'Killer of Cerebrates'
64
- @zeratul.save(collection: db.protosses).should be_true
65
- Person.count.should == 0
66
- db.protosses.count.should == 1
67
- db.protosses.first(name: 'Zeratul').info.should == 'Killer of Cerebrates'
65
+ @zeratul.save(collection: db.heroes).should be_true
66
+ Unit.count.should == 0
67
+ db.heroes.count.should == 1
68
+ db.heroes.first(name: 'Zeratul').info.should == 'Killer of Cerebrates'
68
69
 
69
70
  # destroy
70
- @zeratul.destroy(collection: db.protosses).should be_true
71
- db.protosses.count.should == 0
71
+ @zeratul.destroy(collection: db.heroes).should be_true
72
+ db.heroes.count.should == 0
72
73
  end
74
+
75
+ it 'create'
76
+
77
+ it 'destroy_all'
73
78
  end
74
79
 
75
80
  describe 'embedded' do
76
- before do
81
+ before :all do
77
82
  class Player
78
83
  inherit Mongo::Model
84
+ collection :players
85
+
79
86
  attr_accessor :missions
80
87
  def == o; [self.class, self.missions] == [o.class, o.respond_to(:missions)] end
81
88
 
82
89
  class Mission
83
90
  inherit Mongo::Model
84
- def initialize name = nil, stats = nil; @name, @stats = name, stats end
91
+
85
92
  attr_accessor :name, :stats
86
93
  def == o; [self.class, self.name, self.stats] == [o.class, o.respond_to(:name), o.respond_to(:stats)] end
87
94
  end
88
95
  end
96
+ end
97
+ after(:all){remove_constants :Player}
89
98
 
99
+ before do
100
+ @mission_class = Player::Mission
90
101
  @player = Player.new
91
102
  @player.missions = [
92
- Player::Mission.new('Wasteland', {buildings: 5, units: 10}),
93
- Player::Mission.new('Backwater Station', {buildings: 8, units: 25}),
103
+ Player::Mission.new.set(name: 'Wasteland', stats: {buildings: 5, units: 10}),
104
+ Player::Mission.new.set(name: 'Backwater Station', stats: {buildings: 8, units: 25}),
94
105
  ]
95
106
  end
96
- after{remove_constants :Player}
97
107
 
98
- it_should_behave_like 'shared object CRUD'
108
+ it_should_behave_like 'embedded object CRUD'
99
109
 
100
110
  it 'crud' do
101
111
  # create
@@ -109,7 +119,7 @@ describe "Model CRUD" do
109
119
 
110
120
  # update
111
121
  @player.missions.first.stats[:units] = 9
112
- @player.missions << Player::Mission.new('Desperate Alliance', {buildings: 11, units: 40}),
122
+ @player.missions << Player::Mission.new.set(name: 'Desperate Alliance', stats: {buildings: 11, units: 40})
113
123
  @player.save.should be_true
114
124
  Player.count.should == 1
115
125
  Player.first.should == @player
@@ -0,0 +1,63 @@
1
+ require 'model/spec_helper'
2
+
3
+ describe 'Collection & Database' do
4
+ with_mongo
5
+
6
+ before :all do
7
+ class TheModel
8
+ inherit Mongo::Model
9
+ end
10
+ end
11
+ after(:all){remove_constants :TheModel}
12
+
13
+ after do
14
+ TheModel.db = nil
15
+ TheModel.collection = nil
16
+ Mongo::Model.connection, Mongo::Model.db = nil, nil
17
+ end
18
+
19
+ it "global setting" do
20
+ Mongo::Model.connection = db.connection
21
+ Mongo::Model.db = db
22
+
23
+ Mongo::Model.connection.should == db.connection
24
+ Mongo::Model.db.should == db
25
+ end
26
+
27
+ it "should allow set database per model" do
28
+ Mongo::Model.connection = db.connection
29
+ Mongo::Model.db = db
30
+
31
+ TheModel.db.should == db
32
+
33
+ TheModel.db :test
34
+ TheModel.db.name.should == 'test'
35
+
36
+ TheModel.db = nil
37
+ TheModel.db db
38
+ TheModel.db.should == db
39
+
40
+ TheModel.db = nil
41
+ TheModel.db{db}
42
+ TheModel.db.should == db
43
+ end
44
+
45
+ it "should allow set collection per model" do
46
+ Mongo::Model.db = db
47
+
48
+ # TheModel.default_collection_name.should == :the_model
49
+ # TheModel.collection.name.should == 'the_model'
50
+
51
+ TheModel.collection :units
52
+ TheModel.collection.name.should == 'units'
53
+
54
+ TheModel.collection = nil
55
+ units = db.units
56
+ TheModel.collection units
57
+ TheModel.collection.should == units
58
+
59
+ TheModel.collection = nil
60
+ TheModel.collection{units}
61
+ TheModel.collection.should == units
62
+ end
63
+ end
@@ -0,0 +1,32 @@
1
+ require 'model/spec_helper'
2
+
3
+ describe 'Model Miscellaneous' do
4
+ with_mongo_model
5
+
6
+ after{remove_constants :Unit}
7
+
8
+ it "timestamps" do
9
+ class Unit3
10
+ inherit Mongo::Model
11
+ collection :units
12
+
13
+ attr_accessor :name
14
+
15
+ timestamps!
16
+ end
17
+
18
+ unit = Unit3.new.set name: 'Zeratul'
19
+ unit.save!
20
+
21
+ unit = Unit3.first
22
+ unit.created_at.should_not be_nil
23
+ unit.updated_at.should_not be_nil
24
+ created_at,updated_at = unit.created_at, unit.updated_at
25
+
26
+ unit.save!
27
+ unit.created_at.should == created_at
28
+ unit.updated_at.should > updated_at
29
+ end
30
+
31
+
32
+ end
@@ -0,0 +1,47 @@
1
+ require 'model/spec_helper'
2
+ require 'object/crud_shared'
3
+
4
+ describe "Model Query" do
5
+ with_mongo_model
6
+
7
+ before :all do
8
+ class Unit
9
+ inherit Mongo::Model
10
+ collection :units
11
+
12
+ attr_accessor :name
13
+ end
14
+ end
15
+ after(:all){remove_constants :Unit}
16
+
17
+ before{@zeratul = Unit.new.set name: 'Zeratul'}
18
+
19
+ it 'exist?' do
20
+ Unit.should_not exist(name: 'Zeratul')
21
+ @zeratul.save!
22
+ Unit.should exist(name: 'Zeratul')
23
+ end
24
+
25
+ it 'first, first!' do
26
+ Unit.first.should be_nil
27
+ -> {Unit.first!}.should raise_error(Mongo::NotFound)
28
+ @zeratul.save
29
+ Unit.first.should_not be_nil
30
+ Unit.first!.should_not be_nil
31
+ end
32
+
33
+ it 'all, each' do
34
+ list = []; Unit.each{|o| list << o}
35
+ list.size.should == 0
36
+
37
+ @zeratul.save
38
+ list = []; Unit.each{|o| list << o}
39
+ list.size.should == 1
40
+ end
41
+
42
+ it 'dynamic finders integration' do
43
+ Unit.first_by_name('Zeratul').should be_nil
44
+ Unit.new.set(name: 'Zeratul').save!
45
+ Unit.first_by_name('Zeratul').name.should == 'Zeratul'
46
+ end
47
+ end
@@ -0,0 +1,149 @@
1
+ require 'model/spec_helper'
2
+
3
+ describe "Scope" do
4
+ with_mongo_model
5
+
6
+ before do
7
+ class Unit
8
+ inherit Mongo::Model
9
+ collection :units
10
+
11
+ attr_accessor :name, :status, :race
12
+ end
13
+ end
14
+
15
+ after{remove_constants :Unit, :Protoss}
16
+
17
+ describe 'current scope' do
18
+ it "should affect finders" do
19
+ Unit.new.set(name: 'Zeratul', status: 'alive').save!
20
+ Unit.new.set(name: 'Jim', status: 'alive').save!
21
+ Unit.new.set(name: 'Tassadar', status: 'dead').save!
22
+
23
+ Unit.count.should == 3
24
+ Unit.all.size.should == 3
25
+ Unit.first(name: 'Tassadar').should_not be_nil
26
+ Unit.first!(name: 'Tassadar').should_not be_nil
27
+
28
+ Unit.stub!(:current_scope).and_return(status: 'alive')
29
+
30
+ Unit.count.should == 2
31
+ Unit.all.size.should == 2
32
+ Unit.first(name: 'Tassadar').should be_nil
33
+ -> {Unit.first!(name: 'Tassadar')}.should raise_error(Mongo::NotFound)
34
+
35
+ # should be merged with finders
36
+ Unit.count(status: 'dead').should == 1
37
+ Unit.all(status: 'dead').size.should == 1
38
+ Unit.first(name: 'Tassadar', status: 'dead').should_not be_nil
39
+ Unit.first!(name: 'Tassadar', status: 'dead').should_not be_nil
40
+ end
41
+ end
42
+
43
+ describe 'default scope' do
44
+ it "should not affect objects without default_scope" do
45
+ Unit.current_scope.should == {}
46
+ end
47
+
48
+ it "definition" do
49
+ Unit.default_scope status: 'alive'
50
+ Unit.current_scope.should == {status: 'alive'}
51
+
52
+ Unit.default_scope do
53
+ {status: 'alive'}
54
+ end
55
+ Unit.current_scope.should == {status: 'alive'}
56
+ end
57
+
58
+ it "should be inherited" do
59
+ Unit.default_scope status: 'alive'
60
+
61
+ class Protoss < Unit; end
62
+ Protoss.current_scope.should == {status: 'alive'}
63
+
64
+ Protoss.default_scope status: 'dead'
65
+ Unit.current_scope.should == {status: 'alive'}
66
+ Protoss.current_scope.should == {status: 'dead'}
67
+ end
68
+ end
69
+
70
+ describe 'scope' do
71
+ it "definition" do
72
+ Unit.scope :alive, status: 'alive'
73
+ Unit.alive.current_scope.should == {status: 'alive'}
74
+
75
+ Unit.scope :alive do
76
+ {status: 'alive'}
77
+ end
78
+ Unit.alive.current_scope.should == {status: 'alive'}
79
+ end
80
+
81
+ it 'scope should affect current scope' do
82
+ Unit.scope :alive, status: 'alive'
83
+
84
+ Unit.current_scope.should == {}
85
+
86
+ Unit.alive.current_scope.should == {status: 'alive'}
87
+ Unit.alive.should == Unit
88
+ end
89
+
90
+ it 'should be merged with default scope' do
91
+ Unit.default_scope race: 'Protoss'
92
+ Unit.scope :alive, status: 'alive'
93
+ Unit.alive.current_scope.should == {race: 'Protoss', status: 'alive'}
94
+ end
95
+
96
+ it 'should allow to chain scopes' do
97
+ Unit.scope :alive, status: 'alive'
98
+ Unit.scope :protosses, race: 'Protoss'
99
+ Unit.alive.protosses.current_scope.should == {race: 'Protoss', status: 'alive'}
100
+ end
101
+ end
102
+
103
+ describe 'with_scope' do
104
+ it "shouldn't allow to nest exclusive scope" do
105
+ -> {
106
+ Unit.with_exclusive_scope do
107
+ Unit.with_exclusive_scope{}
108
+ end
109
+ }.should raise_error(/exclusive scope already applied/)
110
+
111
+ -> {
112
+ Unit.with_exclusive_scope do
113
+ Unit.with_scope{}
114
+ end
115
+ }.should raise_error(/exclusive scope already applied/)
116
+ end
117
+
118
+ it "with_exclusive_scope should clear other scopes" do
119
+ Unit.default_scope status: 'alive'
120
+
121
+ Unit.with_scope race: 'Protoss' do
122
+ Unit.current_scope.should == {status: 'alive', race: 'Protoss'}
123
+
124
+ Unit.with_exclusive_scope do
125
+ Unit.current_scope.should == {}
126
+ end
127
+
128
+ Unit.with_exclusive_scope race: 'Terran' do
129
+ Unit.current_scope.should == {race: 'Terran'}
130
+ end
131
+ end
132
+ end
133
+
134
+ it "usage" do
135
+ Unit.with_scope status: 'alive' do
136
+ Unit.current_scope.should == {status: 'alive'}
137
+ end
138
+ end
139
+
140
+ it "should merge scope" do
141
+ Unit.default_scope status: 'alive'
142
+ Unit.with_scope race: 'Protoss' do
143
+ Unit.with_scope name: 'Zeratul' do
144
+ Unit.current_scope.should == {name: 'Zeratul', race: 'Protoss', status: 'alive'}
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,4 @@
1
+ require 'mongo_db/model'
2
+
3
+ require 'object/spec_helper'
4
+ require 'mongo_db/model/spec'
@@ -0,0 +1,37 @@
1
+ require 'model/spec_helper'
2
+
3
+ describe "Validations" do
4
+ with_mongo_model
5
+
6
+ before do
7
+ class Unit
8
+ inherit Mongo::Model
9
+ collection :units
10
+
11
+ attr_accessor :errors
12
+
13
+ attr_accessor :name
14
+ end
15
+ end
16
+ after{remove_constants :Unit}
17
+
18
+ it "should not save model with errors" do
19
+ unit = Unit.new.set name: 'Zeratul'
20
+ unit.save.should be_true
21
+
22
+ unit.errors = []
23
+ unit.save.should be_true
24
+
25
+ unit.errors = ['hairy error']
26
+ unit.save.should be_false
27
+
28
+ unit.errors = {name: 'hairy error'}
29
+ unit.save.should be_false
30
+ end
31
+
32
+ it "should check :errors only and ignore valid? method" do
33
+ unit = Unit.new.set name: 'Zeratul'
34
+ unit.should_not_receive(:valid?)
35
+ unit.save.should be_true
36
+ end
37
+ end
@@ -3,7 +3,7 @@ require 'object/spec_helper'
3
3
  describe 'Object callbacks' do
4
4
  with_mongo
5
5
 
6
- before do
6
+ before :all do
7
7
  class Player
8
8
  include RSpec::CallbackHelper
9
9
  attr_accessor :missions
@@ -12,12 +12,14 @@ describe 'Object callbacks' do
12
12
  include RSpec::CallbackHelper
13
13
  end
14
14
  end
15
+ end
16
+ after(:all){remove_constants :Player}
15
17
 
18
+ before do
16
19
  @mission = Player::Mission.new
17
20
  @player = Player.new
18
21
  @player.missions = [@mission]
19
22
  end
20
- after{remove_constants :Player}
21
23
 
22
24
  it 'create' do
23
25
  %w(before_validate before_save before_create after_create after_save after_validate).each do |name|
@@ -61,8 +63,8 @@ describe 'Object callbacks' do
61
63
  end
62
64
 
63
65
  it 'should be able interrupt CRUD' do
64
- @mission.stub! :_run_callbacks do |name|
65
- false if name == :before_save
66
+ @mission.stub! :_run_callbacks do |type, method_name|
67
+ false if type == :before and method_name == :save
66
68
  end
67
69
  db.players.save(@player).should be_false
68
70
  db.players.count.should == 0
@@ -40,7 +40,7 @@ shared_examples_for 'embedded object CRUD' do
40
40
 
41
41
  # update
42
42
  @player.missions.first.stats[:units] = 9
43
- @player.missions << Player::Mission.new('Desperate Alliance', {buildings: 11, units: 40})
43
+ @player.missions << @mission_class.new('Desperate Alliance', {buildings: 11, units: 40})
44
44
  db.players.save @player
45
45
  db.players.count.should == 1
46
46
  db.players.first.should == @player