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
@@ -23,11 +23,11 @@ describe 'conflict handling' do
23
23
  end
24
24
 
25
25
  it 'raises an error after 5 tries' do
26
- couchrest_database = stub(:couchrest_database, info: stub.as_null_object)
27
- couchrest_database.stub(:save_doc).and_raise(RestClient::Conflict)
26
+ couchrest_database = double(:couchrest_database, info: double.as_null_object)
27
+ allow(couchrest_database).to receive(:save_doc).and_raise(CouchRest::Conflict)
28
28
  db = CouchPotato::Database.new(couchrest_database)
29
- measurement = stub(:measurement).as_null_object
30
- measurement.stub(:run_callbacks).and_yield
29
+ measurement = double(:measurement).as_null_object
30
+ allow(measurement).to receive(:run_callbacks).and_yield
31
31
 
32
32
  expect {
33
33
  db.save(measurement, false) {|m| }
@@ -9,19 +9,19 @@ describe "create" do
9
9
  it "should store the class" do
10
10
  @comment = Comment.new :title => 'my_title'
11
11
  CouchPotato.database.save_document! @comment
12
- CouchPotato.couchrest_database.get(@comment.id).send(JSON.create_id).should == 'Comment'
12
+ expect(CouchPotato.couchrest_database.get(@comment.id).send(JSON.create_id)).to eq('Comment')
13
13
  end
14
14
 
15
15
  it "should persist a given created_at" do
16
16
  @comment = Comment.new :created_at => Time.parse('2010-01-02 12:34:48 +0000'), :title => '-'
17
17
  CouchPotato.database.save_document! @comment
18
- CouchPotato.couchrest_database.get(@comment.id).created_at.should == Time.parse('2010-01-02 12:34:48 +0000')
18
+ expect(CouchPotato.couchrest_database.get(@comment.id).created_at).to eq(Time.parse('2010-01-02 12:34:48 +0000'))
19
19
  end
20
20
 
21
21
  it "should persist a given updated_at" do
22
22
  @comment = Comment.new :updated_at => Time.parse('2010-01-02 12:34:48 +0000'), :title => '-'
23
23
  CouchPotato.database.save_document! @comment
24
- CouchPotato.couchrest_database.get(@comment.id).updated_at.should == Time.parse('2010-01-02 12:34:48 +0000')
24
+ expect(CouchPotato.couchrest_database.get(@comment.id).updated_at).to eq(Time.parse('2010-01-02 12:34:48 +0000'))
25
25
  end
26
26
  end
27
27
 
@@ -29,7 +29,7 @@ describe "create" do
29
29
  it "should not store anything" do
30
30
  @comment = Comment.new
31
31
  CouchPotato.database.save_document @comment
32
- CouchPotato.couchrest_database.documents['rows'].should be_empty
32
+ expect(CouchPotato.couchrest_database.documents['rows']).to be_empty
33
33
  end
34
34
  end
35
35
 
@@ -46,7 +46,7 @@ describe "create" do
46
46
  CouchPotato.with_database(db_name) do |couch|
47
47
  couch.save_document! @comment
48
48
  end
49
- CouchPotato.couchrest_database_for_name(db_name).get(@comment.id).send(JSON.create_id).should == 'Comment'
49
+ expect(CouchPotato.couchrest_database_for_name(db_name).get(@comment.id).send(JSON.create_id)).to eq('Comment')
50
50
  end
51
51
  end
52
52
  end
@@ -18,7 +18,7 @@ describe 'default properties' do
18
18
  it "uses the default value if nothing is supplied" do
19
19
  t = Test.new
20
20
 
21
- t.test.should == 'Test value'
21
+ expect(t.test).to eq('Test value')
22
22
  end
23
23
 
24
24
  it "persists the default value if nothing is supplied" do
@@ -26,27 +26,27 @@ describe 'default properties' do
26
26
  CouchPotato.database.save_document! t
27
27
 
28
28
  t = CouchPotato.database.load_document t.id
29
- t.test.should == 'Test value'
29
+ expect(t.test).to eq('Test value')
30
30
  end
31
31
 
32
32
  it "does not have the same default for two instances of the object" do
33
33
  t = Test.new
34
34
  t2 = Test.new
35
- t.complex.object_id.should_not == t2.complex.object_id
35
+ expect(t.complex.object_id).not_to eq(t2.complex.object_id)
36
36
  end
37
37
 
38
38
  it "does not return the default value when the actual value is empty" do
39
- t = Test.new(:complex => []).complex.should == []
39
+ t = expect(Test.new(:complex => []).complex).to eq([])
40
40
  end
41
41
 
42
42
  it "uses the default value also if the default is false" do
43
43
  t = Test.new
44
- t.false_value.should == false
44
+ expect(t.false_value).to eq(false)
45
45
  end
46
46
 
47
47
  it "uses the return value of a Proc given as the default" do
48
48
  t = Test.new
49
- t.proc.should == 3
49
+ expect(t.proc).to eq(3)
50
50
  end
51
51
 
52
52
  it 'passes the model to a block with arity 1' do
@@ -13,17 +13,17 @@ describe 'destroy' do
13
13
  end
14
14
 
15
15
  it "should unset the id" do
16
- @comment._id.should be_nil
16
+ expect(@comment._id).to be_nil
17
17
  end
18
18
 
19
19
  it "should unset the revision" do
20
- @comment._rev.should be_nil
20
+ expect(@comment._rev).to be_nil
21
21
  end
22
22
 
23
23
  it "should remove the document from the database" do
24
- lambda {
25
- CouchPotato.couchrest_database.get(@comment_id).should
26
- }.should raise_error(RestClient::ResourceNotFound)
24
+ expect{
25
+ CouchPotato.couchrest_database.get!(@comment_id)
26
+ }.to raise_error(CouchRest::NotFound)
27
27
  end
28
28
 
29
29
  end
@@ -5,14 +5,14 @@ require 'fixtures/person'
5
5
  class Watch
6
6
  include CouchPotato::Persistence
7
7
 
8
- property :time, :type => Time
9
- property :date, :type => Date
10
- property :custom, :type => [String]
11
- property :custom_date, :type => [Date]
12
- property :custom_address, :type => [Address]
8
+ property :time, type: Time
9
+ property :date, type: Date
10
+ property :custom, type: [String]
11
+ property :custom_date, type: [Date]
12
+ property :custom_address, type: [Address]
13
13
  property :overwritten_read
14
14
  property :overwritten_write
15
- property :diameter, :type => Float
15
+ property :diameter, type: Float
16
16
 
17
17
  def overwritten_read
18
18
  super.to_s
@@ -23,6 +23,9 @@ class Watch
23
23
  end
24
24
  end
25
25
 
26
+ class Address2 < Address
27
+ end
28
+
26
29
  class CuckooClock < Watch
27
30
  property :cuckoo
28
31
  end
@@ -49,43 +52,43 @@ describe 'properties' do
49
52
  end
50
53
 
51
54
  it "should allow me to overwrite read accessor and call super" do
52
- Watch.new(:overwritten_read => 1).overwritten_read.should == '1'
55
+ expect(Watch.new(:overwritten_read => 1).overwritten_read).to eq('1')
53
56
  end
54
57
 
55
58
  it "should allow me to overwrite write accessor and call super" do
56
- Watch.new(:overwritten_write => 1).overwritten_write.should == '1'
59
+ expect(Watch.new(:overwritten_write => 1).overwritten_write).to eq('1')
57
60
  end
58
61
 
59
62
  it "should return the property names" do
60
- Comment.property_names.should == [:created_at, :updated_at, :title]
63
+ expect(Comment.property_names).to eq([:created_at, :updated_at, :title])
61
64
  end
62
65
 
63
66
  it "should persist a string" do
64
67
  c = Comment.new :title => 'my title'
65
68
  CouchPotato.database.save_document! c
66
69
  c = CouchPotato.database.load_document c.id
67
- c.title.should == 'my title'
70
+ expect(c.title).to eq('my title')
68
71
  end
69
72
 
70
73
  it "should persist a number" do
71
74
  c = Comment.new :title => 3
72
75
  CouchPotato.database.save_document! c
73
76
  c = CouchPotato.database.load_document c.id
74
- c.title.should == 3
77
+ expect(c.title).to eq(3)
75
78
  end
76
79
 
77
80
  it "should persist a float with leading digits" do
78
81
  w = Watch.new :diameter => "46.5"
79
82
  CouchPotato.database.save_document! w
80
83
  w = CouchPotato.database.load_document w.id
81
- w.diameter.should == 46.5
84
+ expect(w.diameter).to eq(46.5)
82
85
  end
83
86
 
84
87
  it "should persist a float with no leading digits" do
85
88
  w = Watch.new :diameter => ".465"
86
89
  CouchPotato.database.save_document! w
87
90
  w = CouchPotato.database.load_document w.id
88
- w.diameter.should == 0.465
91
+ expect(w.diameter).to eq(0.465)
89
92
  end
90
93
 
91
94
  it "should persist a big decimal" do
@@ -93,30 +96,37 @@ describe 'properties' do
93
96
  c = BigDecimalContainer.new :number => BigDecimal.new( '42.42' )
94
97
  CouchPotato.database.save_document! c
95
98
  c = CouchPotato.database.load_document c.id
96
- c.number.should == BigDecimal.new( '42.42' )
99
+ expect(c.number).to eq(BigDecimal.new( '42.42' ))
97
100
  end
98
101
 
99
102
  it "should persist a hash" do
100
103
  c = Comment.new :title => {'key' => 'value'}
101
104
  CouchPotato.database.save_document! c
102
105
  c = CouchPotato.database.load_document c.id
103
- c.title.should == {'key' => 'value'}
106
+ expect(c.title).to eq({'key' => 'value'})
104
107
  end
105
108
 
106
109
  it "should persist a HashWithIndifferentAccess" do
107
110
  c = Person.new :information => HashWithIndifferentAccess.new({"key" => "value"})
108
111
  CouchPotato.database.save_document! c
109
112
  c = CouchPotato.database.load_document c.id
110
- c.information.should == {'key' => 'value'}
113
+ expect(c.information).to eq({'key' => 'value'})
114
+ end
115
+
116
+ it "should persist subclasses of the specified type" do
117
+ w = Watch.new(:custom_address => [Address2.new])
118
+ CouchPotato.database.save_document! w
119
+ w = CouchPotato.database.load_document w.id
120
+ expect(w.custom_address[0]).to be_an_instance_of Address2
111
121
  end
112
122
 
113
123
  def it_should_persist value
114
124
  c = Comment.new :title => value
115
125
  CouchPotato.database.save_document! c
116
126
  c = CouchPotato.database.load_document c.id
117
- c.title.to_json.should == value.to_json
127
+ expect(c.title.to_json).to eq(value.to_json)
118
128
  # no id provided in embedded object, need to check yourself for content equality
119
- c.title.should_not == value
129
+ expect(c.title).not_to eq(value)
120
130
  end
121
131
 
122
132
  it "should persist a child class" do
@@ -157,7 +167,7 @@ describe 'properties' do
157
167
  p.ship_address = a
158
168
  CouchPotato.database.save_document! p
159
169
  p = CouchPotato.database.load_document p.id
160
- p.ship_address.to_json.should === a.to_json
170
+ expect(p.ship_address.to_json).to be === a.to_json
161
171
  end
162
172
 
163
173
  it "should persist null for a null " do
@@ -165,17 +175,17 @@ describe 'properties' do
165
175
  p.ship_address = nil
166
176
  CouchPotato.database.save_document! p
167
177
  p = CouchPotato.database.load_document p.id
168
- p.ship_address.should be_nil
178
+ expect(p.ship_address).to be_nil
169
179
  end
170
180
 
171
181
  it "should actually pass the null value down in the JSON document " do
172
182
  p = Person.new
173
183
  p.ship_address = nil
174
- db = mock(:database)
175
- db.should_receive(:save_doc).with do |attributes|
176
- attributes.has_key?(:ship_address).should == true
177
- end.and_return({})
178
- CouchPotato.database.stub(:couchrest_database).and_return(db)
184
+ db = double(:database)
185
+ expect(db).to receive(:save_doc) { |attributes|
186
+ expect(attributes.has_key?(:ship_address)).to eq(true)
187
+ }.and_return({})
188
+ allow(CouchPotato.database).to receive(:couchrest_database).and_return(db)
179
189
  CouchPotato.database.save_document! p
180
190
  end
181
191
 
@@ -184,7 +194,7 @@ describe 'properties' do
184
194
  p.ship_address = false
185
195
  CouchPotato.database.save_document! p
186
196
  p = CouchPotato.database.load_document p.id
187
- p.ship_address.should be_false
197
+ expect(p.ship_address).to be_falsey
188
198
  end
189
199
 
190
200
  describe "time properties" do
@@ -193,29 +203,29 @@ describe 'properties' do
193
203
  w = Watch.new :time => time
194
204
  CouchPotato.database.save_document! w
195
205
  w = CouchPotato.database.load_document w.id
196
- w.time.to_s.should == time.utc.to_s
206
+ expect(w.time.to_s).to eq(time.utc.to_s)
197
207
  end
198
208
 
199
209
  it "should parse a string and persist it as utc time" do
200
210
  w = Watch.new :time => '2009-01-01 13:25 +0100'
201
211
  CouchPotato.database.save_document! w
202
212
  w = CouchPotato.database.load_document w.id
203
- w.time.should be_a(Time)
204
- w.time.should == Time.parse('2009-01-01 12:25 +0000')
213
+ expect(w.time).to be_a(Time)
214
+ expect(w.time).to eq(Time.parse('2009-01-01 12:25 +0000'))
205
215
  end
206
216
 
207
217
  it "should store nil" do
208
218
  w = Watch.new :time => nil
209
219
  CouchPotato.database.save_document! w
210
220
  w = CouchPotato.database.load_document w.id
211
- w.time.should be_nil
221
+ expect(w.time).to be_nil
212
222
  end
213
223
 
214
224
  it "should store an empty string as nil" do
215
225
  w = Watch.new :time => ''
216
226
  CouchPotato.database.save_document! w
217
227
  w = CouchPotato.database.load_document w.id
218
- w.time.should be_nil
228
+ expect(w.time).to be_nil
219
229
  end
220
230
  end
221
231
 
@@ -225,28 +235,28 @@ describe 'properties' do
225
235
  w = Watch.new :date => date
226
236
  CouchPotato.database.save_document! w
227
237
  w = CouchPotato.database.load_document w.id
228
- w.date.should == date
238
+ expect(w.date).to eq(date)
229
239
  end
230
240
 
231
241
  it "should parse a string and persist it as a date" do
232
242
  w = Watch.new :date => '2009-01-10'
233
243
  CouchPotato.database.save_document! w
234
244
  w = CouchPotato.database.load_document w.id
235
- w.date.should == Date.parse('2009-01-10')
245
+ expect(w.date).to eq(Date.parse('2009-01-10'))
236
246
  end
237
247
 
238
248
  it "should store nil" do
239
249
  w = Watch.new :date => nil
240
250
  CouchPotato.database.save_document! w
241
251
  w = CouchPotato.database.load_document w.id
242
- w.date.should be_nil
252
+ expect(w.date).to be_nil
243
253
  end
244
254
 
245
255
  it "should store an empty string as nil" do
246
256
  w = Watch.new :date => ''
247
257
  CouchPotato.database.save_document! w
248
258
  w = CouchPotato.database.load_document w.id
249
- w.date.should be_nil
259
+ expect(w.date).to be_nil
250
260
  end
251
261
  end
252
262
 
@@ -255,7 +265,7 @@ describe 'properties' do
255
265
  w = Watch.new :custom => ["moin"]
256
266
  CouchPotato.database.save_document! w
257
267
  w = CouchPotato.database.load_document w.id
258
- w.custom.should eql(["moin"])
268
+ expect(w.custom).to eql(["moin"])
259
269
  end
260
270
 
261
271
  it "should persist an array of dates" do
@@ -263,7 +273,7 @@ describe 'properties' do
263
273
  w = Watch.new :custom_date => [date]
264
274
  CouchPotato.database.save_document! w
265
275
  w = CouchPotato.database.load_document w.id
266
- w.custom_date.should eql([date])
276
+ expect(w.custom_date).to eql([date])
267
277
  end
268
278
 
269
279
  it "should persist an array of nested documents" do
@@ -271,7 +281,7 @@ describe 'properties' do
271
281
  w = Watch.new :custom_address => [address]
272
282
  CouchPotato.database.save_document! w
273
283
  w = CouchPotato.database.load_document w.id
274
- w.custom_address.to_json.should eql([address].to_json)
284
+ expect(w.custom_address.to_json).to eql([address].to_json)
275
285
  end
276
286
 
277
287
  it "should handle nil values" do
@@ -279,7 +289,7 @@ describe 'properties' do
279
289
  w = Watch.new :custom_address => nil
280
290
  CouchPotato.database.save_document! w
281
291
  w = CouchPotato.database.load_document w.id
282
- w.custom_address.should eql(nil)
292
+ expect(w.custom_address).to eql(nil)
283
293
  end
284
294
  end
285
295
 
@@ -289,7 +299,7 @@ describe 'properties' do
289
299
  a.verified = '0'
290
300
  CouchPotato.database.save_document! a
291
301
  a = CouchPotato.database.load_document a.id
292
- a.verified.should be_false
302
+ expect(a.verified).to be_falsey
293
303
  end
294
304
 
295
305
  it "should persist 0 as false" do
@@ -297,7 +307,7 @@ describe 'properties' do
297
307
  a.verified = 0
298
308
  CouchPotato.database.save_document! a
299
309
  a = CouchPotato.database.load_document a.id
300
- a.verified.should be_false
310
+ expect(a.verified).to be_falsey
301
311
  end
302
312
 
303
313
  it "should persist 'false' as false" do
@@ -305,7 +315,7 @@ describe 'properties' do
305
315
  a.verified = 'false'
306
316
  CouchPotato.database.save_document! a
307
317
  a = CouchPotato.database.load_document a.id
308
- a.verified.should be_false
318
+ expect(a.verified).to be_falsey
309
319
  end
310
320
 
311
321
  it "should persist '1' as true" do
@@ -313,7 +323,7 @@ describe 'properties' do
313
323
  a.verified = '1'
314
324
  CouchPotato.database.save_document! a
315
325
  a = CouchPotato.database.load_document a.id
316
- a.verified.should be_true
326
+ expect(a.verified).to be_truthy
317
327
  end
318
328
 
319
329
  it "should persist 1 as true" do
@@ -321,7 +331,7 @@ describe 'properties' do
321
331
  a.verified = 1
322
332
  CouchPotato.database.save_document! a
323
333
  a = CouchPotato.database.load_document a.id
324
- a.verified.should be_true
334
+ expect(a.verified).to be_truthy
325
335
  end
326
336
 
327
337
  it "should leave nil as nil" do
@@ -329,38 +339,38 @@ describe 'properties' do
329
339
  a.verified = nil
330
340
  CouchPotato.database.save_document! a
331
341
  a = CouchPotato.database.load_document a.id
332
- a.verified.should be_nil
342
+ expect(a.verified).to be_nil
333
343
  end
334
344
  end
335
345
 
336
346
  describe "predicate" do
337
347
  it "should return true if property set" do
338
- Comment.new(:title => 'title').title?.should be_true
348
+ expect(Comment.new(:title => 'title').title?).to be_truthy
339
349
  end
340
350
 
341
351
  it "should return false if property nil" do
342
- Comment.new.title?.should be_false
352
+ expect(Comment.new.title?).to be_falsey
343
353
  end
344
354
 
345
355
  it "should return false if property false" do
346
- Comment.new(:title => false).title?.should be_false
356
+ expect(Comment.new(:title => false).title?).to be_falsey
347
357
  end
348
358
 
349
359
  it "should return false if property blank" do
350
- Comment.new(:title => '').title?.should be_false
360
+ expect(Comment.new(:title => '').title?).to be_falsey
351
361
  end
352
362
  end
353
363
 
354
364
  describe "with subclasses" do
355
365
  it "should include properties of superclasses" do
356
- CuckooClock.properties.map(&:name).should include(:time)
357
- CuckooClock.properties.map(&:name).should include(:cuckoo)
366
+ expect(CuckooClock.properties.map(&:name)).to include(:time)
367
+ expect(CuckooClock.properties.map(&:name)).to include(:cuckoo)
358
368
  end
359
369
 
360
370
  it "should return attributes of superclasses" do
361
371
  clock = CuckooClock.new(:time => Time.now, :cuckoo => 'bavarian')
362
- clock.attributes[:time].should_not be_nil
363
- clock.attributes[:cuckoo].should eql('bavarian')
372
+ expect(clock.attributes[:time]).not_to be_nil
373
+ expect(clock.attributes[:cuckoo]).to eql('bavarian')
364
374
  end
365
375
  end
366
376
 
@@ -375,34 +385,34 @@ describe 'properties' do
375
385
  end
376
386
 
377
387
  it "should not include change-tracking variables" do
378
- comment.inspect.should_not include('title_was')
388
+ expect(comment.inspect).not_to include('title_was')
379
389
  end
380
390
 
381
391
  it "should include the normal persistent variables" do
382
- comment.inspect.should include('title: "title"')
392
+ expect(comment.inspect).to include('title: "title"')
383
393
  end
384
394
 
385
395
  it "should include the id" do
386
- comment.inspect.should include(%Q{_id: "123456abcdef",})
396
+ expect(comment.inspect).to include(%Q{_id: "123456abcdef",})
387
397
  end
388
398
 
389
399
  it "should include the revision" do
390
- comment.inspect.should include(%Q{_rev: "1-654321fedcba",})
400
+ expect(comment.inspect).to include(%Q{_rev: "1-654321fedcba",})
391
401
  end
392
402
 
393
403
  it "should return a complete string" do
394
404
  # stub to work around (un)sorted hash on different rubies
395
- comment.stub!(:attributes).and_return([['created_at', ''], ['updated_at', ''], ['title', 'title']])
405
+ allow(comment).to receive(:attributes).and_return([['created_at', ''], ['updated_at', ''], ['title', 'title']])
396
406
  doc = '#<Comment _id: "123456abcdef", _rev: "1-654321fedcba", created_at: "", updated_at: "", title: "title">'
397
- comment.inspect.should eql(doc)
407
+ expect(comment.inspect).to eql(doc)
398
408
  end
399
409
 
400
410
  it "should include complex datatypes fully inspected" do
401
411
  comment.title = {'en' => 'Blog post'}
402
- comment.inspect.should include('title: {"en"=>"Blog post"}')
412
+ expect(comment.inspect).to include('title: {"en"=>"Blog post"}')
403
413
 
404
414
  comment.title = nil
405
- comment.inspect.should include('title: nil')
415
+ expect(comment.inspect).to include('title: nil')
406
416
  end
407
417
  end
408
418
  end