couch_potato 1.4.0 → 1.6.3

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/.travis.yml +12 -8
  4. data/CHANGES.md +4 -0
  5. data/Gemfile +1 -1
  6. data/README.md +396 -276
  7. data/Rakefile +9 -9
  8. data/couch_potato-rspec.gemspec +20 -0
  9. data/couch_potato.gemspec +15 -16
  10. data/{active_support_4_0 → gemfiles/active_support_4_0} +3 -3
  11. data/{active_support_3_2 → gemfiles/active_support_4_1} +3 -2
  12. data/gemfiles/active_support_4_2 +11 -0
  13. data/lib/couch_potato-rspec.rb +3 -0
  14. data/lib/couch_potato.rb +3 -1
  15. data/lib/couch_potato/database.rb +42 -39
  16. data/lib/couch_potato/persistence/magic_timestamps.rb +5 -5
  17. data/lib/couch_potato/persistence/properties.rb +8 -2
  18. data/lib/couch_potato/persistence/simple_property.rb +11 -9
  19. data/lib/couch_potato/persistence/type_caster.rb +1 -1
  20. data/lib/couch_potato/railtie.rb +2 -0
  21. data/lib/couch_potato/version.rb +2 -1
  22. data/lib/couch_potato/view/base_view_spec.rb +18 -8
  23. data/lib/couch_potato/view/view_query.rb +2 -3
  24. data/spec/attachments_spec.rb +3 -3
  25. data/spec/callbacks_spec.rb +193 -113
  26. data/spec/conflict_handling_spec.rb +4 -4
  27. data/spec/create_spec.rb +5 -5
  28. data/spec/default_property_spec.rb +6 -6
  29. data/spec/destroy_spec.rb +5 -5
  30. data/spec/property_spec.rb +71 -61
  31. data/spec/rails_spec.rb +3 -3
  32. data/spec/railtie_spec.rb +12 -13
  33. data/spec/spec_helper.rb +3 -3
  34. data/spec/unit/active_model_compliance_spec.rb +16 -16
  35. data/spec/unit/attributes_spec.rb +36 -34
  36. data/spec/unit/base_view_spec_spec.rb +82 -35
  37. data/spec/unit/callbacks_spec.rb +2 -2
  38. data/spec/unit/couch_potato_spec.rb +3 -3
  39. data/spec/unit/create_spec.rb +12 -12
  40. data/spec/unit/custom_views_spec.rb +1 -1
  41. data/spec/unit/database_spec.rb +95 -95
  42. data/spec/unit/date_spec.rb +3 -3
  43. data/spec/unit/deep_dirty_attributes_spec.rb +104 -104
  44. data/spec/unit/dirty_attributes_spec.rb +19 -19
  45. data/spec/unit/forbidden_attributes_protection_spec.rb +4 -4
  46. data/spec/unit/initialize_spec.rb +37 -19
  47. data/spec/unit/json_spec.rb +4 -4
  48. data/spec/unit/lists_spec.rb +8 -8
  49. data/spec/unit/model_view_spec_spec.rb +14 -14
  50. data/spec/unit/persistence_spec.rb +6 -6
  51. data/spec/unit/properties_view_spec_spec.rb +4 -4
  52. data/spec/unit/rspec_matchers_spec.rb +73 -73
  53. data/spec/unit/rspec_stub_db_spec.rb +43 -42
  54. data/spec/unit/string_spec.rb +1 -1
  55. data/spec/unit/time_spec.rb +2 -2
  56. data/spec/unit/validation_spec.rb +1 -1
  57. data/spec/unit/view_query_spec.rb +54 -59
  58. data/spec/update_spec.rb +5 -5
  59. data/spec/view_updates_spec.rb +4 -4
  60. data/spec/views_spec.rb +43 -43
  61. metadata +18 -22
  62. data/lib/couch_potato/rspec.rb +0 -2
  63. data/lib/couch_potato/rspec/matchers.rb +0 -56
  64. data/lib/couch_potato/rspec/matchers/json2.js +0 -482
  65. data/lib/couch_potato/rspec/matchers/list_as_matcher.rb +0 -53
  66. data/lib/couch_potato/rspec/matchers/map_reduce_to_matcher.rb +0 -166
  67. data/lib/couch_potato/rspec/matchers/map_to_matcher.rb +0 -61
  68. data/lib/couch_potato/rspec/matchers/reduce_to_matcher.rb +0 -48
  69. data/lib/couch_potato/rspec/stub_db.rb +0 -57
@@ -14,9 +14,11 @@ module CouchPotato
14
14
 
15
15
  assert_valid_view_parameters normalized_view_parameters
16
16
  @klass = klass
17
- @design_document = translate_to_design_doc_name(klass.to_s, view_name, @list_name)
18
- @view_name = view_name
19
17
  @options = options
18
+ @view_name = compute_view_name(view_name,
19
+ options.key?(:digest_view_name) ? options[:digest_view_name] : Config.digest_view_names)
20
+ @design_document = translate_to_design_doc_name(klass.to_s, @view_name, @list_name)
21
+ @list_params = normalized_view_parameters.delete :list_params
20
22
 
21
23
  @list_function = klass.lists(@list_name) if @list_name
22
24
  @view_parameters = {}
@@ -24,6 +26,7 @@ module CouchPotato
24
26
  @view_parameters[key] = options[key] if options.include?(key)
25
27
  end
26
28
  @view_parameters.merge!(normalized_view_parameters)
29
+ @view_parameters.merge!(@list_params) if @list_params
27
30
  end
28
31
 
29
32
  def process_results(results)
@@ -36,8 +39,15 @@ module CouchPotato
36
39
 
37
40
  private
38
41
 
42
+ def compute_view_name(view_name, digest)
43
+ if digest
44
+ "#{view_name}-#{Digest::MD5.hexdigest(map_function + reduce_function.to_s)}"
45
+ else
46
+ view_name
47
+ end
48
+ end
49
+
39
50
  def normalize_view_parameters(params)
40
- normalized_params = params.dup
41
51
  hash = wrap_in_hash params
42
52
  remove_nil_stale(replace_range_key(hash))
43
53
  end
@@ -65,19 +75,19 @@ module CouchPotato
65
75
 
66
76
  def assert_valid_view_parameters(params)
67
77
  params.keys.each do |key|
68
- raise ArgumentError.new("invalid view parameter: #{key}") unless valid_view_parameters.include?(key.to_s)
78
+ fail ArgumentError, "invalid view parameter: #{key}" unless valid_view_parameters.include?(key.to_s)
69
79
  end
70
80
  end
71
81
 
72
82
  def valid_view_parameters
73
- %w(key keys startkey startkey_docid endkey endkey_docid limit stale descending skip group group_level reduce include_docs inclusive_end)
83
+ %w(list_params key keys startkey startkey_docid endkey endkey_docid limit stale descending skip group group_level reduce include_docs inclusive_end)
74
84
  end
75
85
 
76
86
  def translate_to_design_doc_name(klass_name, view_name, list_name)
77
87
  klass_name = klass_name.dup
78
- klass_name.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
79
- klass_name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
80
- klass_name.tr!("-", "_")
88
+ klass_name.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
89
+ klass_name.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
90
+ klass_name.tr!('-', '_')
81
91
  doc_name = klass_name.downcase
82
92
 
83
93
  if CouchPotato::Config.split_design_documents_per_view
@@ -20,7 +20,7 @@ module CouchPotato
20
20
  update_view unless view_has_been_updated?
21
21
  begin
22
22
  query_view parameters
23
- rescue RestClient::ResourceNotFound
23
+ rescue CouchRest::NotFound
24
24
  update_view
25
25
  retry
26
26
  end
@@ -82,7 +82,7 @@ module CouchPotato
82
82
 
83
83
  def query_view(parameters)
84
84
  if @list_name
85
- CouchRest.get CouchRest.paramify_url(CouchPotato.full_url_to_database + "/_design/#{@design_document_name}/_list/#{@list_name}/#{@view_name}", parameters)
85
+ @database.connection.get CouchRest.paramify_url("/#{@database.name}/_design/#{@design_document_name}/_list/#{@list_name}/#{@view_name}", parameters)
86
86
  else
87
87
  @database.view view_url, parameters
88
88
  end
@@ -91,7 +91,6 @@ module CouchPotato
91
91
  def view_url
92
92
  "#{@design_document_name}/#{@view_name}"
93
93
  end
94
-
95
94
  end
96
95
  end
97
96
  end
@@ -5,7 +5,7 @@ describe CouchPotato, 'attachments' do
5
5
  comment = Comment.new :title => 'nil'
6
6
  comment._attachments['body'] = {'data' => 'a useful comment', 'content_type' => 'text/plain'}
7
7
  CouchPotato.database.save! comment
8
- CouchPotato.couchrest_database.fetch_attachment(comment.to_hash, 'body').to_s.should == 'a useful comment'
8
+ expect(CouchPotato.couchrest_database.fetch_attachment(comment.to_hash, 'body').to_s).to eq('a useful comment')
9
9
  end
10
10
 
11
11
  it "should give me information about the attachments of a document" do
@@ -13,11 +13,11 @@ describe CouchPotato, 'attachments' do
13
13
  comment._attachments = {'body' => {'data' => 'a useful comment', 'content_type' => 'text/plain'}}
14
14
  CouchPotato.database.save! comment
15
15
  comment_reloaded = CouchPotato.database.load comment.id
16
- comment_reloaded._attachments["body"].should include({"content_type" => "text/plain", "stub" => true, "length" => 16})
16
+ expect(comment_reloaded._attachments["body"]).to include({"content_type" => "text/plain", "stub" => true, "length" => 16})
17
17
  end
18
18
 
19
19
  it "should have an empty array for a new object" do
20
- Comment.new._attachments.should == {}
20
+ expect(Comment.new._attachments).to eq({})
21
21
  end
22
22
 
23
23
  end
@@ -1,14 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
- class CallbackRecorder
3
+ class CallbackRecorderWithNoRequiredProperties
4
4
  include CouchPotato::Persistence
5
-
5
+
6
6
  property :required_property
7
-
8
- validates_presence_of :required_property
9
-
7
+
10
8
  [:before_validation, :before_validation_on_create,
11
- :before_validation_on_save, :before_validation_on_update,
9
+ :before_validation_on_save, :before_validation_on_update,
12
10
  :before_save, :before_create, :before_create,
13
11
  :after_save, :after_create, :after_create,
14
12
  :before_update, :after_update,
@@ -19,19 +17,23 @@ class CallbackRecorder
19
17
  end
20
18
  self.send callback, callback
21
19
  end
22
-
20
+
23
21
  view :all, :key => :required_property
24
-
22
+
25
23
  def callbacks
26
24
  @callbacks ||= []
27
25
  end
28
-
26
+
29
27
  private
30
-
28
+
31
29
  def method_callback_with_argument(db)
32
30
  db.view CallbackRecorder.all
33
31
  end
34
-
32
+
33
+ end
34
+
35
+ class CallbackRecorder < CallbackRecorderWithNoRequiredProperties
36
+ validates_presence_of :required_property
35
37
  end
36
38
 
37
39
  describe "multiple callbacks at once" do
@@ -39,224 +41,302 @@ describe "multiple callbacks at once" do
39
41
  class Monkey
40
42
  include CouchPotato::Persistence
41
43
  attr_accessor :eaten_banana, :eaten_apple
42
-
44
+
43
45
  before_create :eat_apple, :eat_banana
44
-
46
+
45
47
  private
46
-
48
+
47
49
  def eat_banana
48
50
  self.eaten_banana = true
49
51
  end
50
-
52
+
51
53
  def eat_apple
52
54
  self.eaten_apple = true
53
55
  end
54
56
  end
55
-
57
+
56
58
  it "should run all callback methods given to the callback method call" do
57
59
  monkey = Monkey.new
58
60
  monkey.run_callbacks :create
59
- monkey.eaten_banana.should be_true
60
- monkey.eaten_apple.should be_true
61
+ expect(monkey.eaten_banana).to be_truthy
62
+ expect(monkey.eaten_apple).to be_truthy
61
63
  end
62
64
  end
63
65
 
64
66
  describe 'create callbacks' do
65
-
67
+
66
68
  before(:each) do
67
69
  @recorder = CallbackRecorder.new
68
- couchrest_database = stub 'couchrest_database', :save_doc => {'id' => '1', 'rev' => '2'}, :view => {'rows' => []}, :info => nil
70
+ couchrest_database = double 'couchrest_database', :save_doc => {'id' => '1', 'rev' => '2'}, :view => {'rows' => []}, :info => nil
69
71
  @db = CouchPotato::Database.new(couchrest_database)
70
72
  end
71
-
73
+
72
74
  describe "successful create" do
73
75
  before(:each) do
74
76
  @recorder.required_property = 1
75
77
  end
76
-
78
+
79
+ it "should call before_validation" do
80
+ @recorder.valid?
81
+ expect(@recorder.callbacks).to include(:before_validation)
82
+ end
83
+
84
+ it "should call before_validation_on_create" do
85
+ @db.save_document! @recorder
86
+ expect(@recorder.callbacks).to include(:before_validation_on_create)
87
+ end
88
+
89
+ it "should call before_validation_on_save" do
90
+ @db.save_document! @recorder
91
+ expect(@recorder.callbacks).to include(:before_validation_on_save)
92
+ end
93
+
94
+ it "should call before_save" do
95
+ @db.save_document! @recorder
96
+ expect(@recorder.callbacks).to include(:before_save)
97
+ end
98
+
99
+ it "should call after_save" do
100
+ @db.save_document! @recorder
101
+ expect(@recorder.callbacks).to include(:after_save)
102
+ end
103
+
104
+ it "should call before_create" do
105
+ @db.save_document! @recorder
106
+ expect(@recorder.callbacks).to include(:before_create)
107
+ end
108
+
109
+ it "should call after_create" do
110
+ @db.save_document! @recorder
111
+ expect(@recorder.callbacks).to include(:after_create)
112
+ end
113
+ end
114
+
115
+ describe "successful create with no changes (object not dirty)" do
116
+ before(:each) do
117
+ @recorder = CallbackRecorderWithNoRequiredProperties.new
118
+ end
119
+
77
120
  it "should call before_validation" do
78
121
  @recorder.valid?
79
- @recorder.callbacks.should include(:before_validation)
122
+ expect(@recorder.callbacks).to include(:before_validation)
80
123
  end
81
-
124
+
82
125
  it "should call before_validation_on_create" do
83
126
  @db.save_document! @recorder
84
- @recorder.callbacks.should include(:before_validation_on_create)
127
+ expect(@recorder.callbacks).to include(:before_validation_on_create)
85
128
  end
86
-
129
+
87
130
  it "should call before_validation_on_save" do
88
131
  @db.save_document! @recorder
89
- @recorder.callbacks.should include(:before_validation_on_save)
132
+ expect(@recorder.callbacks).to include(:before_validation_on_save)
90
133
  end
91
-
134
+
92
135
  it "should call before_save" do
93
136
  @db.save_document! @recorder
94
- @recorder.callbacks.should include(:before_save)
137
+ expect(@recorder.callbacks).to include(:before_save)
95
138
  end
96
-
139
+
97
140
  it "should call after_save" do
98
141
  @db.save_document! @recorder
99
- @recorder.callbacks.should include(:after_save)
142
+ expect(@recorder.callbacks).to include(:after_save)
100
143
  end
101
-
144
+
102
145
  it "should call before_create" do
103
146
  @db.save_document! @recorder
104
- @recorder.callbacks.should include(:before_create)
147
+ expect(@recorder.callbacks).to include(:before_create)
105
148
  end
106
-
149
+
107
150
  it "should call after_create" do
108
151
  @db.save_document! @recorder
109
- @recorder.callbacks.should include(:after_create)
152
+ expect(@recorder.callbacks).to include(:after_create)
110
153
  end
111
-
154
+
112
155
  end
113
-
156
+
114
157
  describe "failed create" do
115
-
158
+
116
159
  it "should call before_validation" do
117
160
  @recorder.valid?
118
- @recorder.callbacks.should include(:before_validation)
161
+ expect(@recorder.callbacks).to include(:before_validation)
119
162
  end
120
-
163
+
121
164
  it "should call before_validation_on_create" do
122
165
  @db.save_document @recorder
123
- @recorder.callbacks.should include(:before_validation_on_create)
166
+ expect(@recorder.callbacks).to include(:before_validation_on_create)
124
167
  end
125
-
168
+
126
169
  it "should call before_validation_on_save" do
127
170
  @db.save_document @recorder
128
- @recorder.callbacks.should include(:before_validation_on_save)
171
+ expect(@recorder.callbacks).to include(:before_validation_on_save)
129
172
  end
130
-
173
+
131
174
  it "should not call before_save" do
132
175
  @db.save_document @recorder
133
- @recorder.callbacks.should_not include(:before_save)
176
+ expect(@recorder.callbacks).not_to include(:before_save)
134
177
  end
135
-
178
+
136
179
  it "should not call after_save" do
137
180
  @db.save_document @recorder
138
- @recorder.callbacks.should_not include(:after_save)
181
+ expect(@recorder.callbacks).not_to include(:after_save)
139
182
  end
140
-
183
+
141
184
  it "should not call before_create" do
142
185
  @db.save_document @recorder
143
- @recorder.callbacks.should_not include(:before_create)
186
+ expect(@recorder.callbacks).not_to include(:before_create)
144
187
  end
145
-
188
+
146
189
  it "should not call after_create" do
147
190
  @db.save_document @recorder
148
- @recorder.callbacks.should_not include(:after_create)
191
+ expect(@recorder.callbacks).not_to include(:after_create)
149
192
  end
150
193
  end
151
194
  end
152
195
 
153
196
  describe "update callbacks" do
154
-
197
+
155
198
  before(:each) do
156
199
  @recorder = CallbackRecorder.new :required_property => 1
157
-
158
- couchrest_database = stub 'couchrest_database', :save_doc => {'id' => '1', 'rev' => '2'}, :view => {'rows' => []}, :info => nil
200
+
201
+ couchrest_database = double 'couchrest_database', :save_doc => {'id' => '1', 'rev' => '2'}, :view => {'rows' => []}, :info => nil
159
202
  @db = CouchPotato::Database.new(couchrest_database)
160
203
  @db.save_document! @recorder
161
-
162
- @recorder.required_property = 2
204
+
163
205
  @recorder.callbacks.clear
164
206
  end
165
-
207
+
166
208
  describe "successful update" do
167
-
209
+
168
210
  before(:each) do
211
+ @recorder.required_property = 2
169
212
  @db.save_document! @recorder
170
213
  end
171
-
214
+
172
215
  it "should call before_validation" do
173
- @recorder.callbacks.should include(:before_validation)
216
+ expect(@recorder.callbacks).to include(:before_validation)
174
217
  end
175
-
218
+
176
219
  it "should call before_validation_on_update" do
177
- @recorder.callbacks.should include(:before_validation_on_update)
220
+ expect(@recorder.callbacks).to include(:before_validation_on_update)
178
221
  end
179
-
222
+
180
223
  it "should call before_validation_on_save" do
181
- @recorder.callbacks.should include(:before_validation_on_save)
224
+ expect(@recorder.callbacks).to include(:before_validation_on_save)
182
225
  end
183
-
226
+
184
227
  it "should call before_save" do
185
- @recorder.callbacks.should include(:before_save)
228
+ expect(@recorder.callbacks).to include(:before_save)
186
229
  end
187
-
230
+
188
231
  it "should call after_save" do
189
- @recorder.callbacks.should include(:after_save)
232
+ expect(@recorder.callbacks).to include(:after_save)
190
233
  end
191
-
234
+
192
235
  it "should call before_update" do
193
- @recorder.callbacks.should include(:before_update)
236
+ expect(@recorder.callbacks).to include(:before_update)
194
237
  end
195
-
238
+
196
239
  it "should call after_update" do
197
- @recorder.callbacks.should include(:after_update)
240
+ expect(@recorder.callbacks).to include(:after_update)
198
241
  end
199
-
242
+
200
243
  end
201
-
244
+
245
+ describe "successful update with no changes (object is not dirty)" do
246
+
247
+ before(:each) do
248
+ @db.save_document! @recorder
249
+ end
250
+
251
+ it "should call before_validation" do
252
+ expect(@recorder.callbacks).to include(:before_validation)
253
+ end
254
+
255
+ it "should call before_validation_on_update" do
256
+ expect(@recorder.callbacks).to include(:before_validation_on_update)
257
+ end
258
+
259
+ it "should call before_validation_on_save" do
260
+ expect(@recorder.callbacks).to include(:before_validation_on_save)
261
+ end
262
+
263
+ it "should call before_save" do
264
+ expect(@recorder.callbacks).to include(:before_save)
265
+ end
266
+
267
+ it "should call after_save" do
268
+ expect(@recorder.callbacks).to include(:after_save)
269
+ end
270
+
271
+ it "should call before_update" do
272
+ expect(@recorder.callbacks).to include(:before_update)
273
+ end
274
+
275
+ it "should call after_update" do
276
+ expect(@recorder.callbacks).to include(:after_update)
277
+ end
278
+
279
+ end
280
+
281
+
202
282
  describe "failed update" do
203
-
283
+
204
284
  before(:each) do
205
285
  @recorder.required_property = nil
206
286
  @db.save_document @recorder
207
287
  end
208
-
288
+
209
289
  it "should call before_validation" do
210
- @recorder.callbacks.should include(:before_validation)
290
+ expect(@recorder.callbacks).to include(:before_validation)
211
291
  end
212
-
292
+
213
293
  it "should call before_validation_on_update" do
214
- @recorder.callbacks.should include(:before_validation_on_update)
294
+ expect(@recorder.callbacks).to include(:before_validation_on_update)
215
295
  end
216
-
296
+
217
297
  it "should call before_validation_on_save" do
218
- @recorder.callbacks.should include(:before_validation_on_save)
298
+ expect(@recorder.callbacks).to include(:before_validation_on_save)
219
299
  end
220
-
300
+
221
301
  it "should not call before_save" do
222
- @recorder.callbacks.should_not include(:before_save)
302
+ expect(@recorder.callbacks).not_to include(:before_save)
223
303
  end
224
-
304
+
225
305
  it "should not call after_save" do
226
- @recorder.callbacks.should_not include(:after_save)
306
+ expect(@recorder.callbacks).not_to include(:after_save)
227
307
  end
228
-
308
+
229
309
  it "should not call before_update" do
230
- @recorder.callbacks.should_not include(:before_update)
310
+ expect(@recorder.callbacks).not_to include(:before_update)
231
311
  end
232
-
312
+
233
313
  it "should not call after_update" do
234
- @recorder.callbacks.should_not include(:after_update)
314
+ expect(@recorder.callbacks).not_to include(:after_update)
235
315
  end
236
-
316
+
237
317
  end
238
-
318
+
239
319
  end
240
320
 
241
321
  describe "destroy callbacks" do
242
-
322
+
243
323
  before(:each) do
244
324
  @recorder = CallbackRecorder.new :required_property => 1
245
- couchrest_database = stub 'couchrest_database', :save_doc => {'id' => '1', 'rev' => '2'}, :delete_doc => nil, :view => {'rows' => []}, :info => nil
325
+ couchrest_database = double 'couchrest_database', :save_doc => {'id' => '1', 'rev' => '2'}, :delete_doc => nil, :view => {'rows' => []}, :info => nil
246
326
  @db = CouchPotato::Database.new(couchrest_database)
247
327
  @db.save_document! @recorder
248
-
328
+
249
329
  @recorder.callbacks.clear
250
330
  end
251
-
331
+
252
332
  it "should call before_destroy" do
253
333
  @db.destroy_document @recorder
254
- @recorder.callbacks.should include(:before_destroy)
334
+ expect(@recorder.callbacks).to include(:before_destroy)
255
335
  end
256
-
336
+
257
337
  it "should call after_destroy" do
258
338
  @db.destroy_document @recorder
259
- @recorder.callbacks.should include(:after_destroy)
339
+ expect(@recorder.callbacks).to include(:after_destroy)
260
340
  end
261
341
  end
262
342
 
@@ -275,24 +355,24 @@ describe "validation callbacks" do
275
355
 
276
356
  it "should keep error messages set in custom before_validation filters" do
277
357
  user = ValidatedUser.new(:name => "john")
278
- user.valid?.should == false
279
- user.errors[:name].should == ["should be Paul"]
358
+ expect(user.valid?).to eq(false)
359
+ expect(user.errors[:name]).to eq(["should be Paul"])
280
360
  end
281
361
 
282
362
  it "should combine the errors from validations and callbacks" do
283
363
  user = ValidatedUser.new(:name => nil)
284
- user.valid?.should == false
285
- user.errors[:name].any? {|msg| msg =~ /can't be (empty|blank)/ }.should == true
286
- user.errors[:name].any? {|msg| msg == "should be Paul" }.should == true
287
- user.errors[:name].size.should == 2
364
+ expect(user.valid?).to eq(false)
365
+ expect(user.errors[:name].any? {|msg| msg =~ /can't be (empty|blank)/ }).to eq(true)
366
+ expect(user.errors[:name].any? {|msg| msg == "should be Paul" }).to eq(true)
367
+ expect(user.errors[:name].size).to eq(2)
288
368
  end
289
369
 
290
370
  it "should clear the errors on subsequent calls to valid?" do
291
371
  user = ValidatedUser.new(:name => nil)
292
- user.valid?.should == false
372
+ expect(user.valid?).to eq(false)
293
373
  user.name = 'Paul'
294
- user.valid?.should == true
295
- user.errors[:name].should == []
374
+ expect(user.valid?).to eq(true)
375
+ expect(user.errors[:name]).to eq([])
296
376
  end
297
377
  end
298
378
 
@@ -360,26 +440,26 @@ describe "validation callbacks and filter halt" do
360
440
 
361
441
  it "should keep error messages set in custom before_validation if an update filter returns false" do
362
442
  @user = FilterValidationUpdateUser.new(:name => "Paul")
363
- @db.save_document(@user).should == true
443
+ expect(@db.save_document(@user)).to eq(true)
364
444
  @user.name = 'Bert'
365
- @db.save_document(@user).should == false
445
+ expect(@db.save_document(@user)).to eq(false)
366
446
  end
367
447
 
368
448
  it "should keep error messages set in custom before_validation if a create filter returns false" do
369
449
  @user = FilterValidationCreateUser.new(:name => "Bert")
370
- @db.save_document(@user).should == false
450
+ expect(@db.save_document(@user)).to eq(false)
371
451
  end
372
452
 
373
453
  it "should return false on saving a document when a before update filter returned false" do
374
454
  @user = FilterSaveUpdateUser.new(:name => "Paul")
375
- @db.save_document(@user).should == true
455
+ expect(@db.save_document(@user)).to eq(true)
376
456
  @user.name = 'Bert'
377
- @db.save_document(@user).should == false
457
+ expect(@db.save_document(@user)).to eq(false)
378
458
  end
379
459
 
380
460
  it "should return false on saving a document when a before save or before create filter returned false" do
381
461
  @user = FilterSaveCreateUser.new(:name => "Bert")
382
- @db.save_document(@user).should == false
462
+ expect(@db.save_document(@user)).to eq(false)
383
463
  end
384
464
 
385
465
  end