ninja-model 0.9.3 → 0.9.4
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.
- data/.gitignore +2 -2
- data/Guardfile +1 -1
- data/lib/ninja_model/base.rb +18 -0
- data/lib/ninja_model/validation.rb +1 -2
- data/lib/ninja_model/version.rb +1 -1
- data/ninja-model.gemspec +6 -6
- data/spec/lib/ninja_model/associations/belongs_to_association_spec.rb +7 -7
- data/spec/lib/ninja_model/associations/has_many_association_spec.rb +5 -5
- data/spec/lib/ninja_model/associations/has_one_association_spec.rb +8 -8
- data/spec/lib/ninja_model/callbacks_spec.rb +257 -0
- data/spec/lib/ninja_model/persistence_spec.rb +14 -44
- data/spec/lib/ninja_model/validation_spec.rb +5 -0
- data/spec/support/factories/bio.rb +1 -2
- data/spec/support/factories/body.rb +1 -2
- data/spec/support/factories/post.rb +1 -2
- metadata +83 -88
data/.gitignore
CHANGED
data/Guardfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# A sample Guardfile
|
2
2
|
# More info at https://github.com/guard/guard#readme
|
3
3
|
|
4
|
-
guard 'rspec'
|
4
|
+
guard 'rspec' do
|
5
5
|
watch(%r{^spec/.+_spec\.rb$})
|
6
6
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
7
|
watch('spec/spec_helper.rb') { "spec" }
|
data/lib/ninja_model/base.rb
CHANGED
@@ -152,6 +152,24 @@ module NinjaModel
|
|
152
152
|
compute_type(klass)
|
153
153
|
end
|
154
154
|
|
155
|
+
def attribute_for_inspect(attr_name)
|
156
|
+
value = read_attribute(attr_name)
|
157
|
+
if value.is_a?(String) && value.length > 50
|
158
|
+
"#{value[0..50]}...".inspect
|
159
|
+
elsif value.is_a?(Date) || value.is_a?(Time)
|
160
|
+
%("#{value.to_s(:db)}")
|
161
|
+
else
|
162
|
+
value.inspect
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def inspect
|
167
|
+
attributes_as_nice_string = self.class.attribute_names.collect { |attr|
|
168
|
+
"#{attr}: #{attribute_for_inspect(attr)}"
|
169
|
+
}.compact.join(', ')
|
170
|
+
"#<#{self.class} #{attributes_as_nice_string}>"
|
171
|
+
end
|
172
|
+
|
155
173
|
|
156
174
|
private
|
157
175
|
|
@@ -6,7 +6,6 @@ module NinjaModel
|
|
6
6
|
included do
|
7
7
|
include ActiveModel::Validations
|
8
8
|
include ActiveModel::Validations::Callbacks
|
9
|
-
define_model_callbacks :validation
|
10
9
|
end
|
11
10
|
|
12
11
|
def save(options={})
|
@@ -22,7 +21,7 @@ module NinjaModel
|
|
22
21
|
protected
|
23
22
|
|
24
23
|
def perform_validations(options)
|
25
|
-
perform_validation = options[:
|
24
|
+
perform_validation = options[:validat] != false
|
26
25
|
perform_validation ? valid?(options[:context]) : true
|
27
26
|
end
|
28
27
|
end
|
data/lib/ninja_model/version.rb
CHANGED
data/ninja-model.gemspec
CHANGED
@@ -18,15 +18,15 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_dependency 'activerecord', '~> 3.1.
|
22
|
-
s.add_dependency 'rake'
|
21
|
+
s.add_dependency 'activerecord', '~> 3.1.12'
|
22
|
+
s.add_dependency 'rake'
|
23
23
|
|
24
|
-
s.add_development_dependency 'rspec', '~> 2.
|
25
|
-
s.add_development_dependency 'mocha', '~> 0.
|
26
|
-
s.add_development_dependency 'guard-rspec', '~> 0.
|
24
|
+
s.add_development_dependency 'rspec', '~> 2.13.0'
|
25
|
+
s.add_development_dependency 'mocha', '~> 0.13.0'
|
26
|
+
s.add_development_dependency 'guard-rspec', '~> 3.0.0'
|
27
27
|
s.add_development_dependency 'libnotify', '~> 0.6.0'
|
28
28
|
s.add_development_dependency 'yard', '~> 0.7.4'
|
29
29
|
s.add_development_dependency 'redcarpet', '~> 2.0.0'
|
30
30
|
s.add_development_dependency 'sqlite3', '~> 1.3.5'
|
31
|
-
s.add_development_dependency 'factory_girl', '~> 2.
|
31
|
+
s.add_development_dependency 'factory_girl', '~> 4.2.0'
|
32
32
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe NinjaModel::Associations::BelongsToAssociation do
|
4
|
-
let(:user) {
|
5
|
-
let(:post) {
|
4
|
+
let(:user) { FactoryGirl.create(:user) }
|
5
|
+
let(:post) { FactoryGirl.create(:post, user_id: user.id) }
|
6
6
|
|
7
7
|
context 'with an ActiveRecord parent' do
|
8
8
|
describe 'accessing the association directly' do
|
@@ -28,12 +28,12 @@ describe NinjaModel::Associations::BelongsToAssociation do
|
|
28
28
|
describe 'accessing the association directly' do
|
29
29
|
it 'should trigger a fetch' do
|
30
30
|
NinjaModel::Relation.any_instance.expects(:to_a).returns(post)
|
31
|
-
t = Tag.new(:
|
31
|
+
t = Tag.new(post_id: post.id)
|
32
32
|
t.post
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'should assign the proper predicates' do
|
36
|
-
t = Tag.new(:
|
36
|
+
t = Tag.new(post_id: post.id)
|
37
37
|
predicates = t.association(:post).scoped.predicates
|
38
38
|
predicates.count.should eql(1)
|
39
39
|
predicates.first.attribute.should eql(:id)
|
@@ -47,12 +47,12 @@ describe NinjaModel::Associations::BelongsToAssociation do
|
|
47
47
|
describe 'accessing the association directly' do
|
48
48
|
it 'should trigger a fetch' do
|
49
49
|
NinjaModel::Relation.any_instance.expects(:to_a).returns(post)
|
50
|
-
c = Category.new(:
|
50
|
+
c = Category.new(post_id: post.id)
|
51
51
|
c.post
|
52
52
|
end
|
53
53
|
|
54
54
|
it 'should assign the proper predicates' do
|
55
|
-
c = Category.new(:
|
55
|
+
c = Category.new(post_id: post.id)
|
56
56
|
predicates = c.association(:post).scoped.predicates
|
57
57
|
predicates.count.should eql(1)
|
58
58
|
predicates.first.attribute.should eql(:id)
|
@@ -68,7 +68,7 @@ describe NinjaModel::Associations::BelongsToAssociation do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
it 'should properly update the ids when assigning a new instance' do
|
71
|
-
t =
|
71
|
+
t = FactoryGirl.create(:tag)
|
72
72
|
t.post = post
|
73
73
|
t.post_id.should eql(post.id)
|
74
74
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe NinjaModel::Associations::HasManyAssociation do
|
4
|
-
let(:user) {
|
4
|
+
let(:user) { FactoryGirl.create(:user) }
|
5
5
|
|
6
6
|
context 'with an ActiveRecord parent' do
|
7
7
|
|
@@ -48,8 +48,8 @@ describe NinjaModel::Associations::HasManyAssociation do
|
|
48
48
|
|
49
49
|
context 'with a NinjaModel parent' do
|
50
50
|
|
51
|
-
let(:post) {
|
52
|
-
let!(:tags) { FactoryGirl.create_list(:tag, 2, :
|
51
|
+
let(:post) { FactoryGirl.create(:post) }
|
52
|
+
let!(:tags) { FactoryGirl.create_list(:tag, 2, post_id: 1) }
|
53
53
|
|
54
54
|
context 'and an ActiveRecord association' do
|
55
55
|
it 'should return an Array' do
|
@@ -61,7 +61,7 @@ describe NinjaModel::Associations::HasManyAssociation do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'should allow chaining queries' do
|
64
|
-
post.tags.where(:
|
64
|
+
post.tags.where(name: 'Tag 2').count.should eql(1)
|
65
65
|
end
|
66
66
|
|
67
67
|
describe 'building an associated object' do
|
@@ -88,7 +88,7 @@ describe NinjaModel::Associations::HasManyAssociation do
|
|
88
88
|
end
|
89
89
|
|
90
90
|
it 'should allow chaining' do
|
91
|
-
predicates = post.categories.where(:
|
91
|
+
predicates = post.categories.where(name: 'foo').predicates
|
92
92
|
predicates.count.should eql(2)
|
93
93
|
predicates.first.attribute.should eql(:post_id)
|
94
94
|
predicates.first.meth.should eql(:eq)
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe NinjaModel::Associations::HasOneAssociation do
|
4
|
-
let(:user) {
|
5
|
-
let(:post) {
|
6
|
-
let(:bio) {
|
4
|
+
let(:user) { FactoryGirl.create(:user) }
|
5
|
+
let(:post) { FactoryGirl.create(:post, user: user) }
|
6
|
+
let(:bio) { FactoryGirl.create(:bio, user: user) }
|
7
7
|
|
8
8
|
context 'with an ActiveRecord parent' do
|
9
9
|
describe 'accessing the association directly' do
|
@@ -24,7 +24,7 @@ describe NinjaModel::Associations::HasOneAssociation do
|
|
24
24
|
|
25
25
|
context 'with a NinjaModel parent' do
|
26
26
|
context 'and an ActiveRecord child' do
|
27
|
-
let!(:email_address) {
|
27
|
+
let!(:email_address) { FactoryGirl.create(:email_address, bio: bio) }
|
28
28
|
describe 'accessing the association directly' do
|
29
29
|
it 'should retrieve the record' do
|
30
30
|
bio.email_address.should be_kind_of(EmailAddress)
|
@@ -38,12 +38,12 @@ describe NinjaModel::Associations::HasOneAssociation do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'should allow creating the association' do
|
41
|
-
bio.create_email_address(:
|
41
|
+
bio.create_email_address(email: 'foo@bar.com').should be_true
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
context 'and a NinjaModel child' do
|
46
|
-
let(:body) {
|
46
|
+
let(:body) { FactoryGirl.create(:body, post: post) }
|
47
47
|
describe 'accessing the association directly' do
|
48
48
|
it 'should trigger a fetch' do
|
49
49
|
NinjaModel::Relation.any_instance.expects(:to_a).returns([body])
|
@@ -64,14 +64,14 @@ describe NinjaModel::Associations::HasOneAssociation do
|
|
64
64
|
# We have to stub to_a here because building will try and retrieve the
|
65
65
|
# existing record to remove ownership
|
66
66
|
#
|
67
|
-
NinjaModel::Relation.any_instance.stubs(:
|
67
|
+
NinjaModel::Relation.any_instance.stubs(to_a: [])
|
68
68
|
body = post.build_body
|
69
69
|
body.should be_kind_of(Body)
|
70
70
|
body.post_id.should eql(post.id)
|
71
71
|
end
|
72
72
|
|
73
73
|
it 'should allow creating the association' do
|
74
|
-
NinjaModel::Relation.any_instance.stubs(:
|
74
|
+
NinjaModel::Relation.any_instance.stubs(to_a: [])
|
75
75
|
Body.any_instance.stubs(:create).returns(true)
|
76
76
|
post.create_body(:text => 'Foobar')
|
77
77
|
end
|
@@ -0,0 +1,257 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NinjaModel::Callbacks do
|
4
|
+
let(:adapter) { mock('Adapter') }
|
5
|
+
class CallbackModel < NinjaModel::Base
|
6
|
+
attribute :testing, :integer
|
7
|
+
|
8
|
+
before_validation :before_validation_callback
|
9
|
+
after_validation :after_validation_callback
|
10
|
+
|
11
|
+
before_save :before_save_callback
|
12
|
+
after_save :after_save_callback
|
13
|
+
around_save :around_save_callback
|
14
|
+
|
15
|
+
before_create :before_create_callback
|
16
|
+
after_create :after_create_callback
|
17
|
+
around_create :around_create_callback
|
18
|
+
|
19
|
+
before_update :before_update_callback
|
20
|
+
after_update :after_update_callback
|
21
|
+
around_update :around_update_callback
|
22
|
+
|
23
|
+
before_destroy :before_destroy_callback
|
24
|
+
after_destroy :after_destroy_callback
|
25
|
+
around_destroy :around_destroy_callback
|
26
|
+
|
27
|
+
def before_validation_callback; true; end
|
28
|
+
def after_validation_callback; true; end
|
29
|
+
|
30
|
+
def before_save_callback; true; end
|
31
|
+
def after_save_callback; true; end
|
32
|
+
def around_save_callback; yield; end
|
33
|
+
|
34
|
+
def before_create_callback; true; end
|
35
|
+
def after_create_callback; true; end
|
36
|
+
def around_create_callback; yield; end
|
37
|
+
|
38
|
+
def before_update_callback; true; end
|
39
|
+
def after_update_callback; true; end
|
40
|
+
def around_update_callback; yield; end
|
41
|
+
|
42
|
+
def before_destroy_callback; true; end
|
43
|
+
def after_destroy_callback; true; end
|
44
|
+
def around_destroy_callback; yield; end
|
45
|
+
end
|
46
|
+
|
47
|
+
before {
|
48
|
+
@obj = CallbackModel.new
|
49
|
+
@obj.class.stubs(adapter: adapter)
|
50
|
+
}
|
51
|
+
|
52
|
+
describe 'save' do
|
53
|
+
context 'on a new record' do
|
54
|
+
before do
|
55
|
+
@obj.stubs(new_record?: true)
|
56
|
+
adapter.stubs(create: true)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should call the before_validation callback' do
|
60
|
+
@obj.expects(:before_validation_callback)
|
61
|
+
@obj.save
|
62
|
+
end
|
63
|
+
it 'should call the after_validation callback' do
|
64
|
+
@obj.expects(:after_validation_callback)
|
65
|
+
@obj.save
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should call the before_create callback' do
|
69
|
+
@obj.expects(:before_create_callback)
|
70
|
+
@obj.save
|
71
|
+
end
|
72
|
+
it 'should call the after_create callback' do
|
73
|
+
@obj.expects(:after_create_callback)
|
74
|
+
@obj.save
|
75
|
+
end
|
76
|
+
it 'should call the around_create callback' do
|
77
|
+
@obj.expects(:around_create_callback).yields
|
78
|
+
@obj.save
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should call the before_save callback' do
|
82
|
+
@obj.expects(:before_save_callback)
|
83
|
+
@obj.save
|
84
|
+
end
|
85
|
+
it 'should call the after_save callback' do
|
86
|
+
@obj.expects(:after_save_callback)
|
87
|
+
@obj.save
|
88
|
+
end
|
89
|
+
it 'should call the around_save callback' do
|
90
|
+
@obj.expects(:around_save_callback).yields
|
91
|
+
@obj.save
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'should not call the before_update_callback' do
|
95
|
+
@obj.expects(:before_update_callback).never
|
96
|
+
@obj.save
|
97
|
+
end
|
98
|
+
it 'should not call the after_update_callback' do
|
99
|
+
@obj.expects(:after_update_callback).never
|
100
|
+
@obj.save
|
101
|
+
end
|
102
|
+
it 'should not call the around_update_callback' do
|
103
|
+
@obj.expects(:around_update_callback).never
|
104
|
+
@obj.save
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should not call the before_destroy_callback' do
|
108
|
+
@obj.expects(:before_destroy_callback).never
|
109
|
+
@obj.save
|
110
|
+
end
|
111
|
+
it 'should not call the after_destroy_callback' do
|
112
|
+
@obj.expects(:after_destroy_callback).never
|
113
|
+
@obj.save
|
114
|
+
end
|
115
|
+
it 'should not call the around_destroy_callback' do
|
116
|
+
@obj.expects(:around_destroy_callback).never
|
117
|
+
@obj.save
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'on an existing record' do
|
122
|
+
before do
|
123
|
+
@obj.stubs(new_record?: false)
|
124
|
+
adapter.stubs(update: true)
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'should call the before_validation callback' do
|
128
|
+
@obj.expects(:before_validation_callback)
|
129
|
+
@obj.save
|
130
|
+
end
|
131
|
+
it 'should call the after_validation callback' do
|
132
|
+
@obj.expects(:after_validation_callback)
|
133
|
+
@obj.save
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'should not call the before_create callback' do
|
137
|
+
@obj.expects(:before_create_callback).never
|
138
|
+
@obj.save
|
139
|
+
end
|
140
|
+
it 'should not call the after_create callback' do
|
141
|
+
@obj.expects(:after_create_callback).never
|
142
|
+
@obj.save
|
143
|
+
end
|
144
|
+
it 'should not call the around_create callback' do
|
145
|
+
@obj.expects(:around_create_callback).never
|
146
|
+
@obj.save
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'should call the before_save callback' do
|
150
|
+
@obj.expects(:before_save_callback)
|
151
|
+
@obj.save
|
152
|
+
end
|
153
|
+
it 'should call the after_save callback' do
|
154
|
+
@obj.expects(:after_save_callback)
|
155
|
+
@obj.save
|
156
|
+
end
|
157
|
+
it 'should call the around_save callback' do
|
158
|
+
@obj.expects(:around_save_callback).yields
|
159
|
+
@obj.save
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'should call the before_update_callback' do
|
163
|
+
@obj.expects(:before_update_callback)
|
164
|
+
@obj.save
|
165
|
+
end
|
166
|
+
it 'should call the after_update_callback' do
|
167
|
+
@obj.expects(:after_update_callback)
|
168
|
+
@obj.save
|
169
|
+
end
|
170
|
+
it 'should call the around_update_callback' do
|
171
|
+
@obj.expects(:around_update_callback)
|
172
|
+
@obj.save
|
173
|
+
end
|
174
|
+
|
175
|
+
it 'should not call the before_destroy_callback' do
|
176
|
+
@obj.expects(:before_destroy_callback).never
|
177
|
+
@obj.save
|
178
|
+
end
|
179
|
+
it 'should not call the after_destroy_callback' do
|
180
|
+
@obj.expects(:after_destroy_callback).never
|
181
|
+
@obj.save
|
182
|
+
end
|
183
|
+
it 'should not call the around_destroy_callback' do
|
184
|
+
@obj.expects(:around_destroy_callback).never
|
185
|
+
@obj.save
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
describe 'destroy' do
|
191
|
+
before do
|
192
|
+
@obj.stubs(new_record?: false)
|
193
|
+
adapter.stubs(destroy: true)
|
194
|
+
end
|
195
|
+
|
196
|
+
it 'should not call the before_validation callback' do
|
197
|
+
@obj.expects(:before_validation_callback).never
|
198
|
+
@obj.destroy
|
199
|
+
end
|
200
|
+
it 'should not call the after_validation callback' do
|
201
|
+
@obj.expects(:after_validation_callback).never
|
202
|
+
@obj.destroy
|
203
|
+
end
|
204
|
+
|
205
|
+
it 'should not call the before_create callback' do
|
206
|
+
@obj.expects(:before_create_callback).never
|
207
|
+
@obj.destroy
|
208
|
+
end
|
209
|
+
it 'should not call the after_create callback' do
|
210
|
+
@obj.expects(:after_create_callback).never
|
211
|
+
@obj.destroy
|
212
|
+
end
|
213
|
+
it 'should not call the around_create callback' do
|
214
|
+
@obj.expects(:around_create_callback).never
|
215
|
+
@obj.destroy
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'should not call the before_save callback' do
|
219
|
+
@obj.expects(:before_save_callback).never
|
220
|
+
@obj.destroy
|
221
|
+
end
|
222
|
+
it 'should not call the after_save callback' do
|
223
|
+
@obj.expects(:after_save_callback).never
|
224
|
+
@obj.destroy
|
225
|
+
end
|
226
|
+
it 'should not call the around_save callback' do
|
227
|
+
@obj.expects(:around_save_callback).never
|
228
|
+
@obj.destroy
|
229
|
+
end
|
230
|
+
|
231
|
+
it 'should not call the before_update_callback' do
|
232
|
+
@obj.expects(:before_update_callback).never
|
233
|
+
@obj.destroy
|
234
|
+
end
|
235
|
+
it 'should not call the after_update_callback' do
|
236
|
+
@obj.expects(:after_update_callback).never
|
237
|
+
@obj.destroy
|
238
|
+
end
|
239
|
+
it 'should not call the around_update_callback' do
|
240
|
+
@obj.expects(:around_update_callback).never
|
241
|
+
@obj.destroy
|
242
|
+
end
|
243
|
+
|
244
|
+
it 'should call the before_destroy_callback' do
|
245
|
+
@obj.expects(:before_destroy_callback)
|
246
|
+
@obj.destroy
|
247
|
+
end
|
248
|
+
it 'should call the after_destroy_callback' do
|
249
|
+
@obj.expects(:after_destroy_callback)
|
250
|
+
@obj.destroy
|
251
|
+
end
|
252
|
+
it 'should call the around_destroy_callback' do
|
253
|
+
@obj.expects(:around_destroy_callback).yields
|
254
|
+
@obj.destroy
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe NinjaModel::Persistence do
|
4
|
+
let(:adapter) { mock('Adapter') }
|
4
5
|
class PersistenceModel < NinjaModel::Base
|
5
6
|
attribute :testing, :integer
|
6
7
|
end
|
7
8
|
|
8
9
|
before {
|
9
10
|
@obj = PersistenceModel.new
|
10
|
-
@adapter
|
11
|
-
@obj.class.stubs(:adapter).returns(@adapter)
|
11
|
+
@obj.class.stubs(adapter: adapter)
|
12
12
|
}
|
13
13
|
subject { @obj }
|
14
14
|
it { should respond_to(:save) }
|
@@ -25,94 +25,64 @@ describe NinjaModel::Persistence do
|
|
25
25
|
its(:destroyed?) { should be_false }
|
26
26
|
|
27
27
|
describe 'save' do
|
28
|
-
before { subject.stubs(:run_callbacks).yields(true) }
|
29
|
-
it 'should run the save callbacks' do
|
30
|
-
subject.expects(:run_callbacks).with(:save)
|
31
|
-
subject.save
|
32
|
-
end
|
33
|
-
|
34
28
|
it 'should call create for a new record' do
|
35
|
-
subject.stubs(
|
29
|
+
subject.stubs(new_record?: true)
|
36
30
|
subject.expects(:create)
|
37
31
|
subject.save
|
38
32
|
end
|
39
33
|
|
40
34
|
it 'should call update for a persisted record' do
|
41
|
-
subject.stubs(
|
35
|
+
subject.stubs(new_record?: false)
|
42
36
|
subject.expects(:update)
|
43
37
|
subject.save
|
44
38
|
end
|
45
39
|
|
46
40
|
it 'should clear the changed attributes after successful save' do
|
47
41
|
attributes = {}
|
48
|
-
subject.stubs(:
|
49
|
-
subject.stubs(:new_record?).returns(false)
|
50
|
-
subject.stubs(:update).returns(true)
|
42
|
+
subject.stubs(changed_attributes: attributes, new_record?: false, update: true)
|
51
43
|
attributes.expects(:clear)
|
52
44
|
subject.save
|
53
45
|
end
|
54
46
|
|
55
47
|
it 'should not clear the changed attributes after unsuccessful save' do
|
56
48
|
attributes = {}
|
57
|
-
subject.stubs(:
|
58
|
-
subject.stubs(:new_record?).returns(false)
|
59
|
-
subject.stubs(:update).returns(false)
|
49
|
+
subject.stubs(changed_attributes: attributes, new_record?: false, update: false)
|
60
50
|
attributes.expects(:clear).never
|
61
51
|
subject.save
|
62
52
|
end
|
63
53
|
end
|
64
54
|
|
65
55
|
describe 'create' do
|
66
|
-
before {
|
67
|
-
subject.stubs(:run_callbacks).yields(true)
|
68
|
-
@adapter.stubs(:create).returns(true)
|
69
|
-
}
|
70
|
-
it 'should run the create callbacks' do
|
71
|
-
subject.expects(:run_callbacks).with(:create)
|
72
|
-
subject.create
|
73
|
-
end
|
74
56
|
it 'should call create on the adapter' do
|
75
|
-
|
57
|
+
adapter.expects(:create).with(subject)
|
76
58
|
subject.create
|
77
59
|
end
|
78
60
|
it 'should update the persisted status' do
|
61
|
+
adapter.stubs(create: true)
|
79
62
|
subject.create
|
80
63
|
subject.persisted?.should be_true
|
81
64
|
end
|
82
65
|
end
|
83
66
|
|
84
67
|
describe 'update' do
|
85
|
-
before {
|
86
|
-
subject.stubs(:run_callbacks).yields(true)
|
87
|
-
@adapter.stubs(:update).returns(true)
|
88
|
-
}
|
89
|
-
it 'should run the update callbacks' do
|
90
|
-
subject.expects(:run_callbacks).with(:update)
|
91
|
-
subject.update
|
92
|
-
end
|
93
68
|
it 'should call update on the adapter' do
|
94
|
-
|
69
|
+
adapter.expects(:update).with(subject)
|
95
70
|
subject.update
|
96
71
|
end
|
97
72
|
end
|
98
73
|
|
99
74
|
describe 'destroy' do
|
100
|
-
before {
|
101
|
-
@adapter.stubs(:destroy).returns(true)
|
102
|
-
}
|
103
|
-
it 'should run the destroy callbacks' do
|
104
|
-
subject.expects(:run_callbacks).with(:destroy)
|
105
|
-
subject.destroy
|
106
|
-
end
|
107
75
|
it 'should call destroy on the adapter' do
|
108
|
-
|
76
|
+
adapter.expects(:destroy).with(subject)
|
109
77
|
subject.destroy
|
110
78
|
end
|
111
79
|
it 'should update the destroyed? status' do
|
80
|
+
adapter.stubs(destroy: true)
|
112
81
|
subject.destroy
|
113
82
|
subject.destroyed?.should be_true
|
114
83
|
end
|
115
84
|
it 'should not be persisted afterwards' do
|
85
|
+
adapter.stubs(destroy: true)
|
116
86
|
subject.destroy
|
117
87
|
subject.persisted?.should be_false
|
118
88
|
end
|
@@ -120,7 +90,7 @@ describe NinjaModel::Persistence do
|
|
120
90
|
|
121
91
|
describe 'reload' do
|
122
92
|
it 'should call reload on the adapter' do
|
123
|
-
|
93
|
+
adapter.expects(:reload).with(subject)
|
124
94
|
subject.reload
|
125
95
|
end
|
126
96
|
end
|
@@ -128,7 +98,7 @@ describe NinjaModel::Persistence do
|
|
128
98
|
describe 'update_attributes' do
|
129
99
|
it 'update the attributes hash and save' do
|
130
100
|
subject.expects(:save)
|
131
|
-
subject.update_attributes(:
|
101
|
+
subject.update_attributes(testing: 2)
|
132
102
|
subject.testing.should eql(2)
|
133
103
|
end
|
134
104
|
end
|
@@ -14,5 +14,10 @@ describe NinjaModel::Validation do
|
|
14
14
|
it { should respond_to(:valid?) }
|
15
15
|
|
16
16
|
describe 'save' do
|
17
|
+
it 'should run the validation callbacks' do
|
18
|
+
subject.expects(:run_callbacks).with(:validation).yields
|
19
|
+
subject.expects(:run_callbacks).with(:validate)
|
20
|
+
subject.save
|
21
|
+
end
|
17
22
|
end
|
18
23
|
end
|
@@ -4,8 +4,7 @@ FactoryGirl.define do
|
|
4
4
|
sequence(:name) { |n| "Name #{n}" }
|
5
5
|
to_create { |model|
|
6
6
|
model.write_attribute(:id, 1)
|
7
|
-
model.stubs(
|
8
|
-
model.stubs(:new_record?).returns(false)
|
7
|
+
model.stubs(persisted?: true, new_record?: false)
|
9
8
|
}
|
10
9
|
end
|
11
10
|
end
|
@@ -4,8 +4,7 @@ FactoryGirl.define do
|
|
4
4
|
sequence(:text) { |n| "Body #{n}" }
|
5
5
|
to_create { |model|
|
6
6
|
model.write_attribute(:id, 1)
|
7
|
-
model.stubs(
|
8
|
-
model.stubs(:new_record?).returns(false)
|
7
|
+
model.stubs(persisted?: true, new_record?: false)
|
9
8
|
}
|
10
9
|
end
|
11
10
|
end
|
metadata
CHANGED
@@ -1,136 +1,132 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ninja-model
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.4
|
4
5
|
prerelease:
|
5
|
-
version: 0.9.3
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Josh Williams
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-07-04 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: activerecord
|
17
|
-
requirement: &
|
16
|
+
requirement: &16193800 !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
|
-
requirements:
|
18
|
+
requirements:
|
20
19
|
- - ~>
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 3.1.
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.1.12
|
23
22
|
type: :runtime
|
24
23
|
prerelease: false
|
25
|
-
version_requirements: *
|
26
|
-
- !ruby/object:Gem::Dependency
|
24
|
+
version_requirements: *16193800
|
25
|
+
- !ruby/object:Gem::Dependency
|
27
26
|
name: rake
|
28
|
-
requirement: &
|
27
|
+
requirement: &16192980 !ruby/object:Gem::Requirement
|
29
28
|
none: false
|
30
|
-
requirements:
|
31
|
-
- -
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
34
33
|
type: :runtime
|
35
34
|
prerelease: false
|
36
|
-
version_requirements: *
|
37
|
-
- !ruby/object:Gem::Dependency
|
35
|
+
version_requirements: *16192980
|
36
|
+
- !ruby/object:Gem::Dependency
|
38
37
|
name: rspec
|
39
|
-
requirement: &
|
38
|
+
requirement: &16192100 !ruby/object:Gem::Requirement
|
40
39
|
none: false
|
41
|
-
requirements:
|
40
|
+
requirements:
|
42
41
|
- - ~>
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: 2.
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.13.0
|
45
44
|
type: :development
|
46
45
|
prerelease: false
|
47
|
-
version_requirements: *
|
48
|
-
- !ruby/object:Gem::Dependency
|
46
|
+
version_requirements: *16192100
|
47
|
+
- !ruby/object:Gem::Dependency
|
49
48
|
name: mocha
|
50
|
-
requirement: &
|
49
|
+
requirement: &16191220 !ruby/object:Gem::Requirement
|
51
50
|
none: false
|
52
|
-
requirements:
|
51
|
+
requirements:
|
53
52
|
- - ~>
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: 0.
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.13.0
|
56
55
|
type: :development
|
57
56
|
prerelease: false
|
58
|
-
version_requirements: *
|
59
|
-
- !ruby/object:Gem::Dependency
|
57
|
+
version_requirements: *16191220
|
58
|
+
- !ruby/object:Gem::Dependency
|
60
59
|
name: guard-rspec
|
61
|
-
requirement: &
|
60
|
+
requirement: &16177320 !ruby/object:Gem::Requirement
|
62
61
|
none: false
|
63
|
-
requirements:
|
62
|
+
requirements:
|
64
63
|
- - ~>
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: 0.
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 3.0.0
|
67
66
|
type: :development
|
68
67
|
prerelease: false
|
69
|
-
version_requirements: *
|
70
|
-
- !ruby/object:Gem::Dependency
|
68
|
+
version_requirements: *16177320
|
69
|
+
- !ruby/object:Gem::Dependency
|
71
70
|
name: libnotify
|
72
|
-
requirement: &
|
71
|
+
requirement: &16176640 !ruby/object:Gem::Requirement
|
73
72
|
none: false
|
74
|
-
requirements:
|
73
|
+
requirements:
|
75
74
|
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
75
|
+
- !ruby/object:Gem::Version
|
77
76
|
version: 0.6.0
|
78
77
|
type: :development
|
79
78
|
prerelease: false
|
80
|
-
version_requirements: *
|
81
|
-
- !ruby/object:Gem::Dependency
|
79
|
+
version_requirements: *16176640
|
80
|
+
- !ruby/object:Gem::Dependency
|
82
81
|
name: yard
|
83
|
-
requirement: &
|
82
|
+
requirement: &16175840 !ruby/object:Gem::Requirement
|
84
83
|
none: false
|
85
|
-
requirements:
|
84
|
+
requirements:
|
86
85
|
- - ~>
|
87
|
-
- !ruby/object:Gem::Version
|
86
|
+
- !ruby/object:Gem::Version
|
88
87
|
version: 0.7.4
|
89
88
|
type: :development
|
90
89
|
prerelease: false
|
91
|
-
version_requirements: *
|
92
|
-
- !ruby/object:Gem::Dependency
|
90
|
+
version_requirements: *16175840
|
91
|
+
- !ruby/object:Gem::Dependency
|
93
92
|
name: redcarpet
|
94
|
-
requirement: &
|
93
|
+
requirement: &16174900 !ruby/object:Gem::Requirement
|
95
94
|
none: false
|
96
|
-
requirements:
|
95
|
+
requirements:
|
97
96
|
- - ~>
|
98
|
-
- !ruby/object:Gem::Version
|
97
|
+
- !ruby/object:Gem::Version
|
99
98
|
version: 2.0.0
|
100
99
|
type: :development
|
101
100
|
prerelease: false
|
102
|
-
version_requirements: *
|
103
|
-
- !ruby/object:Gem::Dependency
|
101
|
+
version_requirements: *16174900
|
102
|
+
- !ruby/object:Gem::Dependency
|
104
103
|
name: sqlite3
|
105
|
-
requirement: &
|
104
|
+
requirement: &16174300 !ruby/object:Gem::Requirement
|
106
105
|
none: false
|
107
|
-
requirements:
|
106
|
+
requirements:
|
108
107
|
- - ~>
|
109
|
-
- !ruby/object:Gem::Version
|
108
|
+
- !ruby/object:Gem::Version
|
110
109
|
version: 1.3.5
|
111
110
|
type: :development
|
112
111
|
prerelease: false
|
113
|
-
version_requirements: *
|
114
|
-
- !ruby/object:Gem::Dependency
|
112
|
+
version_requirements: *16174300
|
113
|
+
- !ruby/object:Gem::Dependency
|
115
114
|
name: factory_girl
|
116
|
-
requirement: &
|
115
|
+
requirement: &16173560 !ruby/object:Gem::Requirement
|
117
116
|
none: false
|
118
|
-
requirements:
|
117
|
+
requirements:
|
119
118
|
- - ~>
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
version: 2.
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 4.2.0
|
122
121
|
type: :development
|
123
122
|
prerelease: false
|
124
|
-
version_requirements: *
|
123
|
+
version_requirements: *16173560
|
125
124
|
description: Pseudo-ORM for Ruby/Rails with an ActiveRecord-like interface
|
126
125
|
email: theprime@codingprime.com
|
127
126
|
executables: []
|
128
|
-
|
129
127
|
extensions: []
|
130
|
-
|
131
128
|
extra_rdoc_files: []
|
132
|
-
|
133
|
-
files:
|
129
|
+
files:
|
134
130
|
- .gitignore
|
135
131
|
- .rvmrc
|
136
132
|
- Gemfile
|
@@ -194,6 +190,7 @@ files:
|
|
194
190
|
- spec/lib/ninja_model/attribute_methods_spec.rb
|
195
191
|
- spec/lib/ninja_model/attribute_spec.rb
|
196
192
|
- spec/lib/ninja_model/base_spec.rb
|
193
|
+
- spec/lib/ninja_model/callbacks_spec.rb
|
197
194
|
- spec/lib/ninja_model/identity_spec.rb
|
198
195
|
- spec/lib/ninja_model/persistence_spec.rb
|
199
196
|
- spec/lib/ninja_model/predicate_spec.rb
|
@@ -222,38 +219,35 @@ files:
|
|
222
219
|
- spec/support/matchers/convert.rb
|
223
220
|
homepage: http://github.com/t3hpr1m3/ninja-model.git
|
224
221
|
licenses: []
|
225
|
-
|
226
222
|
post_install_message:
|
227
223
|
rdoc_options: []
|
228
|
-
|
229
|
-
require_paths:
|
224
|
+
require_paths:
|
230
225
|
- lib
|
231
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
226
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
232
227
|
none: false
|
233
|
-
requirements:
|
234
|
-
- -
|
235
|
-
- !ruby/object:Gem::Version
|
236
|
-
|
237
|
-
segments:
|
228
|
+
requirements:
|
229
|
+
- - ! '>='
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
version: '0'
|
232
|
+
segments:
|
238
233
|
- 0
|
239
|
-
|
240
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
234
|
+
hash: 2346852410491861994
|
235
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
241
236
|
none: false
|
242
|
-
requirements:
|
243
|
-
- -
|
244
|
-
- !ruby/object:Gem::Version
|
245
|
-
|
246
|
-
segments:
|
237
|
+
requirements:
|
238
|
+
- - ! '>='
|
239
|
+
- !ruby/object:Gem::Version
|
240
|
+
version: '0'
|
241
|
+
segments:
|
247
242
|
- 0
|
248
|
-
|
243
|
+
hash: 2346852410491861994
|
249
244
|
requirements: []
|
250
|
-
|
251
245
|
rubyforge_project: ninja-model
|
252
|
-
rubygems_version: 1.8.
|
246
|
+
rubygems_version: 1.8.10
|
253
247
|
signing_key:
|
254
248
|
specification_version: 3
|
255
249
|
summary: Pseudo-ORM for Ruby
|
256
|
-
test_files:
|
250
|
+
test_files:
|
257
251
|
- spec/db/schema.rb
|
258
252
|
- spec/lib/ninja_model/adapters/abstract_adapter_spec.rb
|
259
253
|
- spec/lib/ninja_model/adapters/adapter_manager_spec.rb
|
@@ -265,6 +259,7 @@ test_files:
|
|
265
259
|
- spec/lib/ninja_model/attribute_methods_spec.rb
|
266
260
|
- spec/lib/ninja_model/attribute_spec.rb
|
267
261
|
- spec/lib/ninja_model/base_spec.rb
|
262
|
+
- spec/lib/ninja_model/callbacks_spec.rb
|
268
263
|
- spec/lib/ninja_model/identity_spec.rb
|
269
264
|
- spec/lib/ninja_model/persistence_spec.rb
|
270
265
|
- spec/lib/ninja_model/predicate_spec.rb
|