couchrest_model 2.1.0.rc1 → 2.2.0.beta1

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.travis.yml +15 -4
  4. data/Gemfile.activesupport-4.x +4 -0
  5. data/Gemfile.activesupport-5.x +4 -0
  6. data/README.md +2 -0
  7. data/VERSION +1 -1
  8. data/couchrest_model.gemspec +3 -2
  9. data/history.md +14 -1
  10. data/lib/couchrest/model/associations.rb +3 -8
  11. data/lib/couchrest/model/base.rb +15 -7
  12. data/lib/couchrest/model/casted_array.rb +22 -34
  13. data/lib/couchrest/model/configuration.rb +2 -0
  14. data/lib/couchrest/model/design.rb +4 -3
  15. data/lib/couchrest/model/designs/view.rb +37 -32
  16. data/lib/couchrest/model/dirty.rb +93 -19
  17. data/lib/couchrest/model/embeddable.rb +2 -14
  18. data/lib/couchrest/model/extended_attachments.rb +2 -4
  19. data/lib/couchrest/model/persistence.rb +14 -17
  20. data/lib/couchrest/model/properties.rb +46 -54
  21. data/lib/couchrest/model/property.rb +0 -3
  22. data/lib/couchrest/model/proxyable.rb +20 -4
  23. data/lib/couchrest/model/validations/uniqueness.rb +4 -1
  24. data/lib/couchrest_model.rb +2 -2
  25. data/spec/fixtures/models/article.rb +1 -1
  26. data/spec/fixtures/models/card.rb +2 -1
  27. data/spec/fixtures/models/person.rb +1 -0
  28. data/spec/fixtures/models/project.rb +3 -0
  29. data/spec/unit/assocations_spec.rb +73 -73
  30. data/spec/unit/attachment_spec.rb +34 -34
  31. data/spec/unit/base_spec.rb +102 -102
  32. data/spec/unit/casted_array_spec.rb +7 -7
  33. data/spec/unit/casted_spec.rb +7 -7
  34. data/spec/unit/configuration_spec.rb +11 -11
  35. data/spec/unit/connection_spec.rb +30 -30
  36. data/spec/unit/core_extensions/{time_parsing.rb → time_parsing_spec.rb} +21 -21
  37. data/spec/unit/design_spec.rb +38 -38
  38. data/spec/unit/designs/design_mapper_spec.rb +26 -26
  39. data/spec/unit/designs/migrations_spec.rb +13 -13
  40. data/spec/unit/designs/view_spec.rb +319 -274
  41. data/spec/unit/designs_spec.rb +39 -39
  42. data/spec/unit/dirty_spec.rb +188 -103
  43. data/spec/unit/embeddable_spec.rb +119 -117
  44. data/spec/unit/inherited_spec.rb +4 -4
  45. data/spec/unit/persistence_spec.rb +122 -122
  46. data/spec/unit/properties_spec.rb +466 -16
  47. data/spec/unit/property_protection_spec.rb +32 -32
  48. data/spec/unit/property_spec.rb +45 -436
  49. data/spec/unit/proxyable_spec.rb +140 -82
  50. data/spec/unit/subclass_spec.rb +14 -14
  51. data/spec/unit/translations_spec.rb +5 -5
  52. data/spec/unit/typecast_spec.rb +131 -131
  53. data/spec/unit/utils/migrate_spec.rb +2 -2
  54. data/spec/unit/validations_spec.rb +31 -31
  55. metadata +27 -12
  56. data/lib/couchrest/model/casted_hash.rb +0 -84
@@ -23,17 +23,43 @@ describe CouchRest::Model::Proxyable do
23
23
  end
24
24
 
25
25
  it "should respond to method" do
26
- @obj.should respond_to(:proxy_database)
26
+ expect(@obj).to respond_to(:proxy_database)
27
27
  end
28
28
 
29
29
  it "should provide proxy database from method" do
30
30
  expect(@class).to receive(:proxy_database_method).at_least(:twice).and_return(:slug)
31
- expect(@obj.proxy_database).to be_a(CouchRest::Database)
32
- expect(@obj.proxy_database.name).to eql('couchrest_proxy')
31
+ expect(@obj.proxy_database(:assoc)).to be_a(CouchRest::Database)
32
+ expect(@obj.proxy_database(:assoc).name).to eql('couchrest_proxy')
33
33
  end
34
34
 
35
35
  it "should raise an error if called and no proxy_database_method set" do
36
- lambda { @obj.proxy_database }.should raise_error(StandardError, /Please set/)
36
+ expect { @obj.proxy_database(:assoc) }.to raise_error(StandardError, /Please set/)
37
+ end
38
+
39
+ it "should support passing a suffix" do
40
+ allow(@class).to receive(:proxy_database_method).and_return(:slug)
41
+ allow(@class).to receive(:proxy_database_suffixes).and_return({ assoc: 'suffix' })
42
+ expect { @obj.proxy_database(:assoc) }.not_to raise_error
43
+ end
44
+
45
+ it "should join the suffix to the database name" do
46
+ allow(@class).to receive(:proxy_database_method).and_return(:slug)
47
+ allow(@class).to receive(:proxy_database_suffixes).and_return({ assoc: 'suffix' })
48
+ expect(@obj.proxy_database(:assoc).name).to eql('couchrest_proxy_suffix')
49
+ end
50
+
51
+ it "should support multiple databases" do
52
+ allow(@class).to receive(:proxy_database_method).and_return(:slug)
53
+ allow(@class).to receive(:proxy_database_suffixes).and_return({ assoc: 'suffix', another_assoc: "another_suffix" })
54
+ expect(@obj.proxy_database(:assoc).name).to eql('couchrest_proxy_suffix')
55
+ expect(@obj.proxy_database(:another_assoc).name).to eql('couchrest_proxy_another_suffix')
56
+ end
57
+
58
+ it "should use the configuration's join character to add the suffix" do
59
+ @class.connection.update(:join => '-')
60
+ allow(@class).to receive(:proxy_database_method).and_return(:slug)
61
+ allow(@class).to receive(:proxy_database_suffixes).and_return({ assoc: 'suffix' })
62
+ expect(@obj.proxy_database(:assoc).name).to eql('couchrest-proxy-suffix')
37
63
  end
38
64
  end
39
65
 
@@ -45,12 +71,12 @@ describe CouchRest::Model::Proxyable do
45
71
  @class = DummyProxyable.clone
46
72
  end
47
73
  it "should provide proxy_owner_method accessors" do
48
- @class.should respond_to(:proxy_owner_method)
49
- @class.should respond_to(:proxy_owner_method=)
74
+ expect(@class).to respond_to(:proxy_owner_method)
75
+ expect(@class).to respond_to(:proxy_owner_method=)
50
76
  end
51
77
  it "should work as expected" do
52
78
  @class.proxy_owner_method = "foo"
53
- @class.proxy_owner_method.should eql("foo")
79
+ expect(@class.proxy_owner_method).to eql("foo")
54
80
  end
55
81
  end
56
82
 
@@ -60,7 +86,7 @@ describe CouchRest::Model::Proxyable do
60
86
  end
61
87
  it "should be possible to set the proxy database method" do
62
88
  @class.proxy_database_method :db
63
- @class.proxy_database_method.should eql(:db)
89
+ expect(@class.proxy_database_method).to eql(:db)
64
90
  end
65
91
  end
66
92
 
@@ -70,31 +96,54 @@ describe CouchRest::Model::Proxyable do
70
96
  end
71
97
 
72
98
  it "should be provided" do
73
- @class.should respond_to(:proxy_for)
99
+ expect(@class).to respond_to(:proxy_for)
74
100
  end
75
101
 
76
102
  it "should add model name to proxied model name array" do
77
103
  @class.proxy_for(:cats)
78
- @class.proxied_model_names.should eql(['Cat'])
104
+ expect(@class.proxied_model_names).to eql(['Cat'])
79
105
  end
80
106
 
81
107
  it "should add method names to proxied method name array" do
82
108
  @class.proxy_for(:cats)
83
- @class.proxy_method_names.should eql([:cats])
109
+ expect(@class.proxy_method_names).to eql([:cats])
110
+ end
111
+
112
+ it "should accept a class_name override" do
113
+ @class.proxy_for(:felines, class_name: "Cat")
114
+ expect(@class.proxy_method_names).to eql([:felines])
115
+ expect(@class.proxied_model_names).to eql(['Cat'])
116
+ end
117
+
118
+ describe "proxy database suffix" do
119
+ it "should support not passing a suffix" do
120
+ @class.proxy_for(:cats)
121
+ expect(@class.proxy_database_suffixes).to eql({ cats: nil })
122
+ end
123
+
124
+ it "should set the database suffix if provided" do
125
+ @class.proxy_for(:cats, use_suffix: true)
126
+ expect(@class.proxy_database_suffixes).to eql({ cats: 'cats' })
127
+ end
128
+
129
+ it "should accept a database suffix override" do
130
+ @class.proxy_for(:cats, database_suffix: 'felines')
131
+ expect(@class.proxy_database_suffixes).to eql({ cats: 'felines' })
132
+ end
84
133
  end
85
134
 
86
135
  it "should create a new method" do
87
- DummyProxyable.stub(:method_defined?).and_return(true)
136
+ allow(DummyProxyable).to receive(:method_defined?).and_return(true)
88
137
  DummyProxyable.proxy_for(:cats)
89
- DummyProxyable.new.should respond_to(:cats)
138
+ expect(DummyProxyable.new).to respond_to(:cats)
90
139
  end
91
140
 
92
141
  describe "generated method" do
93
142
  it "should call ModelProxy" do
94
143
  DummyProxyable.proxy_for(:cats)
95
144
  @obj = DummyProxyable.new
96
- CouchRest::Model::Proxyable::ModelProxy.should_receive(:new).with(Cat, @obj, 'dummy_proxyable', 'db').and_return(true)
97
- @obj.should_receive(:proxy_database).and_return('db')
145
+ expect(CouchRest::Model::Proxyable::ModelProxy).to receive(:new).with(Cat, @obj, 'dummy_proxyable', 'db').and_return(true)
146
+ expect(@obj).to receive(:proxy_database).and_return('db')
98
147
  @obj.cats
99
148
  end
100
149
 
@@ -104,8 +153,8 @@ describe CouchRest::Model::Proxyable do
104
153
  end
105
154
  DummyProxyable.proxy_for(:documents)
106
155
  @obj = DummyProxyable.new
107
- CouchRest::Model::Proxyable::ModelProxy.should_receive(:new).with(::Document, @obj, 'dummy_proxyable', 'db').and_return(true)
108
- @obj.should_receive('proxy_database').and_return('db')
156
+ expect(CouchRest::Model::Proxyable::ModelProxy).to receive(:new).with(::Document, @obj, 'dummy_proxyable', 'db').and_return(true)
157
+ expect(@obj).to receive('proxy_database').and_return('db')
109
158
  @obj.documents
110
159
  end
111
160
  end
@@ -117,36 +166,36 @@ describe CouchRest::Model::Proxyable do
117
166
  end
118
167
 
119
168
  it "should be provided" do
120
- @class.should respond_to(:proxied_by)
169
+ expect(@class).to respond_to(:proxied_by)
121
170
  end
122
171
 
123
172
  it "should add an attribute accessor" do
124
173
  @class.proxied_by(:foobar)
125
- @class.new.should respond_to(:foobar)
174
+ expect(@class.new).to respond_to(:foobar)
126
175
  end
127
176
 
128
177
  it "should provide #model_proxy method" do
129
178
  @class.proxied_by(:foobar)
130
- @class.new.should respond_to(:model_proxy)
179
+ expect(@class.new).to respond_to(:model_proxy)
131
180
  end
132
181
 
133
182
  it "should set the proxy_owner_method" do
134
183
  @class.proxied_by(:foobar)
135
- @class.proxy_owner_method.should eql(:foobar)
184
+ expect(@class.proxy_owner_method).to eql(:foobar)
136
185
  end
137
186
 
138
187
  it "should raise an error if model name pre-defined" do
139
- lambda { @class.proxied_by(:object_id) }.should raise_error
188
+ expect { @class.proxied_by(:object_id) }.to raise_error(/Model can only be proxied once/)
140
189
  end
141
190
 
142
191
  it "should raise an error if object already has a proxy" do
143
192
  @class.proxied_by(:department)
144
- lambda { @class.proxied_by(:company) }.should raise_error
193
+ expect { @class.proxied_by(:company) }.to raise_error(/Model can only be proxied once/)
145
194
  end
146
195
 
147
196
  it "should overwrite the database method to provide an error" do
148
197
  @class.proxied_by(:company)
149
- lambda { @class.database }.should raise_error(StandardError, /database must be accessed via/)
198
+ expect { @class.database }.to raise_error(StandardError, /database must be accessed via/)
150
199
  end
151
200
  end
152
201
 
@@ -156,16 +205,16 @@ describe CouchRest::Model::Proxyable do
156
205
  end
157
206
 
158
207
  it "should respond to proxied_model_names" do
159
- @class.should respond_to(:proxied_model_names)
208
+ expect(@class).to respond_to(:proxied_model_names)
160
209
  end
161
210
 
162
211
  it "should provide an empty array" do
163
- @class.proxied_model_names.should be_empty
212
+ expect(@class.proxied_model_names).to be_empty
164
213
  end
165
214
 
166
215
  it "should accept new entries" do
167
216
  @class.proxied_model_names << 'Cat'
168
- @class.proxied_model_names.first.should eql('Cat')
217
+ expect(@class.proxied_model_names.first).to eql('Cat')
169
218
  end
170
219
  end
171
220
 
@@ -179,139 +228,148 @@ describe CouchRest::Model::Proxyable do
179
228
 
180
229
  before :each do
181
230
  @design_doc = double('Design')
182
- @design_doc.stub(:view_names).and_return(['all', 'by_name'])
231
+ allow(@design_doc).to receive(:view_names).and_return(['all', 'by_name'])
183
232
  @model = double('Cat')
184
- @model.stub(:design_docs).and_return([@design_doc])
233
+ allow(@model).to receive(:design_docs).and_return([@design_doc])
185
234
  @obj = @klass.new(@model, 'owner', 'owner_name', 'database')
186
235
  end
187
236
 
188
237
  describe "initialization" do
189
238
 
190
239
  it "should set base attributes" do
191
- @obj.model.should eql(@model)
192
- @obj.owner.should eql('owner')
193
- @obj.owner_name.should eql('owner_name')
194
- @obj.database.should eql('database')
240
+ expect(@obj.model).to eql(@model)
241
+ expect(@obj.owner).to eql('owner')
242
+ expect(@obj.owner_name).to eql('owner_name')
243
+ expect(@obj.database).to eql('database')
195
244
  end
196
245
 
197
246
  it "should create view methods" do
198
- @obj.should respond_to('all')
199
- @obj.should respond_to('by_name')
200
- @obj.should respond_to('find_all')
201
- @obj.should respond_to('find_by_name')
202
- @obj.should respond_to('find_by_name!')
247
+ expect(@obj).to respond_to('all')
248
+ expect(@obj).to respond_to('by_name')
249
+ expect(@obj).to respond_to('find_all')
250
+ expect(@obj).to respond_to('find_by_name')
251
+ expect(@obj).to respond_to('find_by_name!')
203
252
  end
204
253
 
205
254
  it "should create 'all' view method that forward to model's view with proxy" do
206
- @model.should_receive(:all).with(:proxy => @obj).and_return(nil)
255
+ expect(@model).to receive(:all).with(:proxy => @obj).and_return(nil)
207
256
  @obj.all
208
257
  end
209
258
 
210
259
  it "should create 'by_name' view method that forward to model's view with proxy" do
211
- @model.should_receive(:by_name).with(:proxy => @obj).and_return(nil)
260
+ expect(@model).to receive(:by_name).with(:proxy => @obj).and_return(nil)
212
261
  @obj.by_name
213
262
  end
214
263
 
215
264
  it "should create 'find_by_name' view that forwards to normal view" do
216
265
  view = double('view')
217
- view.should_receive('key').with('name').and_return(view)
218
- view.should_receive('first').and_return(nil)
219
- @obj.should_receive(:by_name).and_return(view)
266
+ expect(view).to receive('key').with('name').and_return(view)
267
+ expect(view).to receive('first').and_return(nil)
268
+ expect(@obj).to receive(:by_name).and_return(view)
220
269
  @obj.find_by_name('name')
221
270
  end
222
271
 
223
272
  it "should create 'find_by_name!' that raises error when there are no results" do
224
273
  view = double('view')
225
- view.should_receive('key').with('name').and_return(view)
226
- view.should_receive('first').and_return(nil)
227
- @obj.should_receive(:by_name).and_return(view)
228
- lambda { @obj.find_by_name!('name') }.should raise_error(CouchRest::Model::DocumentNotFound)
274
+ expect(view).to receive('key').with('name').and_return(view)
275
+ expect(view).to receive('first').and_return(nil)
276
+ expect(@obj).to receive(:by_name).and_return(view)
277
+ expect { @obj.find_by_name!('name') }.to raise_error(CouchRest::Model::DocumentNotFound)
229
278
  end
230
-
231
279
  end
232
280
 
233
281
  describe "instance" do
234
282
 
235
283
  it "should proxy new call" do
236
- @obj.should_receive(:proxy_block_update).with(:new, 'attrs', 'opts')
284
+ expect(@obj).to receive(:proxy_block_update).with(:new, 'attrs', 'opts')
237
285
  @obj.new('attrs', 'opts')
238
286
  end
239
287
 
240
288
  it "should proxy build_from_database" do
241
- @obj.should_receive(:proxy_block_update).with(:build_from_database, 'attrs', 'opts')
289
+ expect(@obj).to receive(:proxy_block_update).with(:build_from_database, 'attrs', 'opts')
242
290
  @obj.build_from_database('attrs', 'opts')
243
291
  end
244
292
 
245
293
  it "should proxy #count" do
246
294
  view = double('View')
247
- view.should_receive(:count).and_return(nil)
248
- @model.should_receive(:all).and_return(view)
295
+ expect(view).to receive(:count).and_return(nil)
296
+ expect(@model).to receive(:all).and_return(view)
249
297
  @obj.count
250
298
  end
251
299
 
252
300
  it "should proxy #first" do
253
301
  view = double('View')
254
- view.should_receive(:first).and_return(nil)
255
- @model.should_receive(:all).and_return(view)
302
+ expect(view).to receive(:first).and_return(nil)
303
+ expect(@model).to receive(:all).and_return(view)
256
304
  @obj.first
257
305
  end
258
306
 
259
307
  it "should proxy #last" do
260
308
  view = double('View')
261
- view.should_receive(:last).and_return(nil)
262
- @model.should_receive(:all).and_return(view)
309
+ expect(view).to receive(:last).and_return(nil)
310
+ expect(@model).to receive(:all).and_return(view)
263
311
  @obj.last
264
312
  end
265
313
 
266
314
  it "should proxy #get" do
267
- @model.should_receive(:get).with(32, 'database')
268
- @obj.should_receive(:proxy_update)
315
+ expect(@model).to receive(:get).with(32, 'database')
316
+ expect(@obj).to receive(:proxy_update)
269
317
  @obj.get(32)
270
318
  end
319
+
271
320
  it "should proxy #find" do
272
- @model.should_receive(:get).with(32, 'database')
273
- @obj.should_receive(:proxy_update)
321
+ expect(@model).to receive(:get).with(32, 'database')
322
+ expect(@obj).to receive(:proxy_update)
274
323
  @obj.find(32)
275
324
  end
276
325
 
326
+ it "should proxy factory methods" do
327
+ expect(@model).to receive(:factory_method).with(@obj, "arg_1", "arg_2")
328
+ @obj.factory_method("arg_1", "arg_2")
329
+ end
330
+
331
+ it "shouldn't forward undefined model methods" do
332
+ expect { @obj.undefined_factory_method("arg_1", "arg_2") }.to raise_error(NoMethodError, /CouchRest::Model::Proxy/)
333
+ end
334
+
277
335
 
278
336
  ### Updating methods
279
337
 
280
338
  describe "#proxy_update" do
281
339
  it "should set returned doc fields" do
282
340
  doc = double(:Document)
283
- doc.should_receive(:is_a?).with(@model).and_return(true)
284
- doc.should_receive(:database=).with('database')
285
- doc.should_receive(:model_proxy=).with(@obj)
286
- doc.should_receive(:send).with('owner_name=', 'owner')
287
- @obj.send(:proxy_update, doc).should eql(doc)
341
+ expect(doc).to receive(:is_a?).with(@model).and_return(true)
342
+ expect(doc).to receive(:database=).with('database')
343
+ expect(doc).to receive(:model_proxy=).with(@obj)
344
+ expect(doc).to receive(:send).with('owner_name=', 'owner')
345
+ expect(@obj.send(:proxy_update, doc)).to eql(doc)
288
346
  end
289
347
 
290
348
  it "should not set anything if matching document not provided" do
291
349
  doc = double(:DocumentFoo)
292
- doc.should_receive(:is_a?).with(@model).and_return(false)
293
- doc.should_not_receive(:database=)
294
- doc.should_not_receive(:model_proxy=)
295
- doc.should_not_receive(:owner_name=)
296
- @obj.send(:proxy_update, doc).should eql(doc)
350
+ expect(doc).to receive(:is_a?).with(@model).and_return(false)
351
+ expect(doc).not_to receive(:database=)
352
+ expect(doc).not_to receive(:model_proxy=)
353
+ expect(doc).not_to receive(:owner_name=)
354
+ expect(@obj.send(:proxy_update, doc)).to eql(doc)
297
355
  end
298
356
 
299
357
  it "should pass nil straight through without errors" do
300
- lambda { @obj.send(:proxy_update, nil).should eql(nil) }.should_not raise_error
358
+ expect { expect(@obj.send(:proxy_update, nil)).to eql(nil) }.not_to raise_error
301
359
  end
302
360
  end
303
361
 
304
362
  it "#proxy_update_all should update array of docs" do
305
363
  docs = [{}, {}]
306
- @obj.should_receive(:proxy_update).twice.with({})
364
+ expect(@obj).to receive(:proxy_update).twice.with({})
307
365
  @obj.send(:proxy_update_all, docs)
308
366
  end
309
367
 
310
368
  describe "#proxy_block_update" do
311
369
  it "should proxy block updates" do
312
370
  doc = { }
313
- @obj.model.should_receive(:new).and_yield(doc)
314
- @obj.should_receive(:proxy_update).with(doc)
371
+ expect(@obj.model).to receive(:new).and_yield(doc)
372
+ expect(@obj).to receive(:proxy_update).with(doc)
315
373
  @obj.send(:proxy_block_update, :new)
316
374
  end
317
375
  end
@@ -327,7 +385,7 @@ describe CouchRest::Model::Proxyable do
327
385
  use_database DB
328
386
  property :slug
329
387
  proxy_for :proxyable_invoices
330
- def proxy_database
388
+ def proxy_database(assoc)
331
389
  @db ||= TEST_SERVER.database!(TESTDB + "-#{slug}")
332
390
  end
333
391
  end
@@ -346,26 +404,26 @@ describe CouchRest::Model::Proxyable do
346
404
 
347
405
  it "should create the new database" do
348
406
  view = @company.proxyable_invoices.all
349
- view.should be_empty
350
- TEST_SERVER.databases.find{|db| db =~ /#{TESTDB}-samco/}.should_not be_nil
407
+ expect(view).to be_empty
408
+ expect(TEST_SERVER.databases.find{|db| db =~ /#{TESTDB}-samco/}).not_to be_nil
351
409
  end
352
410
 
353
411
  it "should allow creation of new entries" do
354
412
  inv = @company.proxyable_invoices.new(:client => "Lorena", :total => 35)
355
413
  # inv.database.should_not be_nil
356
- inv.save.should be_true
357
- @company.proxyable_invoices.count.should eql(1)
358
- @company.proxyable_invoices.first.client.should eql("Lorena")
414
+ expect(inv.save).to be_truthy
415
+ expect(@company.proxyable_invoices.count).to eql(1)
416
+ expect(@company.proxyable_invoices.first.client).to eql("Lorena")
359
417
  end
360
418
 
361
419
  it "should validate uniqueness" do
362
420
  inv = @company.proxyable_invoices.new(:client => "Lorena", :total => 40)
363
- inv.save.should be_false
421
+ expect(inv.save).to be_falsey
364
422
  end
365
423
 
366
424
  it "should allow design views" do
367
425
  item = @company.proxyable_invoices.by_total.key(35).first
368
- item.client.should eql('Lorena')
426
+ expect(item.client).to eql('Lorena')
369
427
  end
370
428
 
371
429
  end
@@ -39,55 +39,55 @@ describe "Subclassing a Model" do
39
39
  end
40
40
 
41
41
  it "shouldn't messup the parent's properties" do
42
- Card.properties.should_not == BusinessCard.properties
42
+ expect(Card.properties).not_to eq(BusinessCard.properties)
43
43
  end
44
44
 
45
45
  it "should share the same db default" do
46
- @card.database.uri.should == Card.database.uri
46
+ expect(@card.database.uri).to eq(Card.database.uri)
47
47
  end
48
48
 
49
49
  it "should have kept the validation details" do
50
- @card.should_not be_valid
50
+ expect(@card).not_to be_valid
51
51
  end
52
52
 
53
53
  it "should have added the new validation details" do
54
54
  validated_fields = @card.class.validators.map{|v| v.attributes}.flatten
55
- validated_fields.should include(:extension_code)
56
- validated_fields.should include(:job_title)
55
+ expect(validated_fields).to include(:extension_code)
56
+ expect(validated_fields).to include(:job_title)
57
57
  end
58
58
 
59
59
  it "should not add to the parent's validations" do
60
60
  validated_fields = Card.validators.map{|v| v.attributes}.flatten
61
- validated_fields.should_not include(:extension_code)
62
- validated_fields.should_not include(:job_title)
61
+ expect(validated_fields).not_to include(:extension_code)
62
+ expect(validated_fields).not_to include(:job_title)
63
63
  end
64
64
 
65
65
  it "should inherit default property values" do
66
- @card.bg_color.should == '#ccc'
66
+ expect(@card.bg_color).to eq('#ccc')
67
67
  end
68
68
 
69
69
  it "should be able to overwrite a default property" do
70
- DesignBusinessCard.new.bg_color.should == '#eee'
70
+ expect(DesignBusinessCard.new.bg_color).to eq('#eee')
71
71
  end
72
72
 
73
73
  it "should have a design doc slug based on the subclass name" do
74
- OnlineCourse.design_doc['_id'].should =~ /OnlineCourse$/
74
+ expect(OnlineCourse.design_doc['_id']).to match(/OnlineCourse$/)
75
75
  end
76
76
 
77
77
  it "should not add views to the parent's design_doc" do
78
- Course.design_doc['views'].keys.should_not include('by_url')
78
+ expect(Course.design_doc['views'].keys).not_to include('by_url')
79
79
  end
80
80
 
81
81
  it "should add the parent's views to its design doc" do
82
- OnlineCourse.design_doc['views'].keys.should include('by_title')
82
+ expect(OnlineCourse.design_doc['views'].keys).to include('by_title')
83
83
  end
84
84
 
85
85
  it "should add the parent's views but alter the model names in map function" do
86
- OnlineCourse.design_doc['views']['by_title']['map'].should =~ /doc\['#{OnlineCourse.model_type_key}'\] == 'OnlineCourse'/
86
+ expect(OnlineCourse.design_doc['views']['by_title']['map']).to match(/doc\['#{OnlineCourse.model_type_key}'\] == 'OnlineCourse'/)
87
87
  end
88
88
 
89
89
  it "should have an all view with a guard clause for model == subclass name in the map function" do
90
- OnlineCourse.design_doc['views']['all']['map'].should =~ /if \(doc\['#{OnlineCourse.model_type_key}'\] == 'OnlineCourse'\)/
90
+ expect(OnlineCourse.design_doc['views']['all']['map']).to match(/if \(doc\['#{OnlineCourse.model_type_key}'\] == 'OnlineCourse'\)/)
91
91
  end
92
92
 
93
93
  end