couchrest_model 2.1.0.rc1 → 2.2.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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