garner 0.5.0 → 0.5.1

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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -30
  3. data/.rubocop_todo.yml +49 -0
  4. data/.travis.yml +2 -0
  5. data/CHANGELOG.md +6 -0
  6. data/Gemfile +1 -1
  7. data/README.md +2 -2
  8. data/garner.gemspec +2 -2
  9. data/lib/garner/cache.rb +1 -1
  10. data/lib/garner/strategies/binding/key/binding_index.rb +1 -1
  11. data/lib/garner/version.rb +1 -1
  12. data/spec/garner/cache/context_spec.rb +4 -4
  13. data/spec/garner/cache/identity_spec.rb +6 -6
  14. data/spec/garner/cache_spec.rb +14 -6
  15. data/spec/garner/config_spec.rb +1 -1
  16. data/spec/garner/mixins/mongoid/document_spec.rb +12 -12
  17. data/spec/garner/mixins/mongoid/identity_spec.rb +25 -25
  18. data/spec/garner/mixins/rack_spec.rb +6 -6
  19. data/spec/garner/strategies/binding/invalidation/binding_index_spec.rb +1 -1
  20. data/spec/garner/strategies/binding/invalidation/touch_spec.rb +3 -3
  21. data/spec/garner/strategies/binding/key/binding_index_spec.rb +44 -44
  22. data/spec/garner/strategies/binding/key/cache_key_spec.rb +2 -2
  23. data/spec/garner/strategies/binding/key/safe_cache_key_spec.rb +12 -12
  24. data/spec/garner/strategies/context/key/caller_spec.rb +17 -17
  25. data/spec/garner/strategies/context/key/jsonp_spec.rb +2 -2
  26. data/spec/garner/strategies/context/key/request_get_spec.rb +3 -3
  27. data/spec/garner/strategies/context/key/request_path_spec.rb +3 -3
  28. data/spec/garner/strategies/context/key/request_post_spec.rb +3 -3
  29. data/spec/garner/version_spec.rb +2 -2
  30. data/spec/integration/active_record_spec.rb +4 -4
  31. data/spec/integration/grape_spec.rb +1 -1
  32. data/spec/integration/mongoid_spec.rb +57 -57
  33. data/spec/integration/rack_spec.rb +7 -7
  34. data/spec/integration/sinatra_spec.rb +1 -1
  35. data/spec/shared/binding_invalidation_strategy.rb +1 -1
  36. data/spec/shared/binding_key_strategy.rb +4 -4
  37. data/spec/shared/conditional_get.rb +13 -13
  38. data/spec/shared/context_key_strategy.rb +2 -2
  39. data/spec/spec_helper.rb +1 -0
  40. metadata +8 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9a593ed7c69343123cf6aa7152da17d9403455cc
4
- data.tar.gz: 2c93f44ef0551b09a947a54dd1dcdaac8145dac4
3
+ metadata.gz: be2617701ad4ec815fb797f21249d19df49c35d5
4
+ data.tar.gz: 3b5dca339f0b0aa5926bd4dd210c58c90ec7c658
5
5
  SHA512:
6
- metadata.gz: f1448f9b7506742c5ceaae135f9e193080e76350366ed9e62cde64c7dd47f0dd7064a934dad934e6ae722823f64c5044da92899d6934c57924e29b9836ce3d21
7
- data.tar.gz: 61ffea9d8c44c86e5fae7f5db352c0fa83880e6e8d317533e81953d5c36ded5beec5802d5846916fbcbc1f9f243898646e4c0f32aad163a002671a9f53eba837
6
+ metadata.gz: 4df4d8bed3cb46aad815fb29fafa791e2f786521ca76849eef16bad67d7da54e52076f85a13c36811a9ca6750813b41cff7e85c3e2b5ae64d5c03b4e953fe7ed
7
+ data.tar.gz: 20ef731da18baf1e571977e3144b4a7aa28d51dee40931260b7c0de8121601ee4d621300248d8bca7eea6c653cac06c9726b55e0b4aa1b1ba1289e1f23588556
@@ -2,34 +2,5 @@ AllCops:
2
2
  Exclude:
3
3
  - vendor/**/*
4
4
 
5
- LineLength:
6
- Enabled: false
5
+ inherit_from: .rubocop_todo.yml
7
6
 
8
- MethodLength:
9
- Enabled: false
10
-
11
- ClassLength:
12
- Enabled: false
13
-
14
- CyclomaticComplexity:
15
- Enabled: false
16
-
17
- Documentation:
18
- # don't require classes to be documented
19
- Enabled: false
20
-
21
- Encoding:
22
- # no need to always specify encoding
23
- Enabled: false
24
-
25
- DoubleNegation:
26
- Enabled: false
27
-
28
- RaiseArgs:
29
- Enabled: false
30
-
31
- RescueModifier:
32
- Enabled: false
33
-
34
- ModuleFunction:
35
- Enabled: false
@@ -0,0 +1,49 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2014-11-26 10:49:30 -0500 using RuboCop version 0.27.1.
3
+ # The point is for the user to remove these configuration records
4
+ # one by one as the offenses are removed from the code base.
5
+ # Note that changes in the inspected code, or installation of new
6
+ # versions of RuboCop, may require this file to be generated again.
7
+
8
+ # Offense count: 3
9
+ Metrics/AbcSize:
10
+ Max: 33
11
+
12
+ # Offense count: 2
13
+ Metrics/CyclomaticComplexity:
14
+ Max: 11
15
+
16
+ # Offense count: 56
17
+ # Configuration parameters: AllowURI, URISchemes.
18
+ Metrics/LineLength:
19
+ Max: 140
20
+
21
+ # Offense count: 3
22
+ # Configuration parameters: CountComments.
23
+ Metrics/MethodLength:
24
+ Max: 24
25
+
26
+ # Offense count: 1
27
+ Metrics/PerceivedComplexity:
28
+ Max: 12
29
+
30
+ # Offense count: 38
31
+ Style/Documentation:
32
+ Enabled: false
33
+
34
+ # Offense count: 3
35
+ Style/DoubleNegation:
36
+ Enabled: false
37
+
38
+ # Offense count: 1
39
+ Style/ModuleFunction:
40
+ Enabled: false
41
+
42
+ # Offense count: 1
43
+ # Configuration parameters: SupportedStyles.
44
+ Style/RaiseArgs:
45
+ EnforcedStyle: compact
46
+
47
+ # Offense count: 1
48
+ Style/RescueModifier:
49
+ Enabled: false
@@ -1,3 +1,5 @@
1
+ sudo: false
2
+
1
3
  services:
2
4
  - mongodb
3
5
  - memcache
@@ -1,3 +1,9 @@
1
+ 0.5.1 (11/26/2014)
2
+ ------------------
3
+
4
+ * Fixed [#81](https://github.com/artsy/garner/issues/81): `Garner.cache` loses namespace options when calling delete when cache block yields `nil` - [@dblock](https://github.com/dblock).
5
+ * Upgraded RSpec to 3.x and RuboCop to 0.27.1 - [@dblock](https://github.com/dblock).
6
+
1
7
  0.5.0 (7/17/2014)
2
8
  -----------------
3
9
 
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
 
3
3
  gemspec
data/README.md CHANGED
@@ -8,7 +8,7 @@ If you're not familiar with HTTP caching, ETags and If-Modified-Since, watch us
8
8
  Upgrading
9
9
  ---------
10
10
 
11
- The current stable release line of Garner is 0.4.x, and contains many breaking changes from the previous 0.3.x series. For a summary of important changes, see [UPGRADING](UPGRADING.md).
11
+ The current stable release line of Garner is 0.5.x, and contains many breaking changes from the previous 0.3.x series. For a summary of important changes, see [UPGRADING](UPGRADING.md).
12
12
 
13
13
  Usage
14
14
  -----
@@ -90,7 +90,7 @@ end
90
90
  In the above example, the `Order.identify` call will not result in a database query. Instead, it just communicates to Garner's cache sweeper that whenever the order with identity `params[:id]` is updated, this cache result should be invalidated. The `identify` method is provided by the Mongoid mixin. To use it, you should configure `Garner.config.mongoid_identity_fields`, e.g.:
91
91
 
92
92
  ```ruby
93
- Garner.configure.do |config|
93
+ Garner.configure do |config|
94
94
  config.mongoid_identity_fields = [:_id, :_slugs]
95
95
  end
96
96
  ```
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
23
23
  s.add_runtime_dependency 'activesupport'
24
24
 
25
25
  s.add_development_dependency 'rake'
26
- s.add_development_dependency 'rspec', '~> 2.10'
26
+ s.add_development_dependency 'rspec', '~> 3.1'
27
27
  s.add_development_dependency 'bundler'
28
28
  s.add_development_dependency 'grape', '~> 0.8.0'
29
29
  s.add_development_dependency 'sinatra'
@@ -40,5 +40,5 @@ Gem::Specification.new do |s|
40
40
  s.add_development_dependency 'coveralls'
41
41
  s.add_development_dependency 'yard'
42
42
  s.add_development_dependency 'dalli'
43
- s.add_development_dependency 'rubocop', '0.24.1'
43
+ s.add_development_dependency 'rubocop', '0.27.1'
44
44
  end
@@ -13,7 +13,7 @@ module Garner
13
13
  result = Garner.config.cache.fetch(compound_key, options_hash) do
14
14
  yield
15
15
  end
16
- Garner.config.cache.delete(compound_key) unless result
16
+ Garner.config.cache.delete(compound_key, options_hash) unless result
17
17
  else
18
18
  result = yield
19
19
  end
@@ -84,7 +84,7 @@ module Garner
84
84
  def self.canonical?(binding)
85
85
  # TODO: Implement real logic for determining canonicity.
86
86
  binding.is_a?(Mongoid::Document) ||
87
- (binding.is_a?(Class) && binding.include?(Mongoid::Document))
87
+ (binding.is_a?(Class) && binding.include?(Mongoid::Document))
88
88
  end
89
89
 
90
90
  def self.index_key_for(binding)
@@ -1,3 +1,3 @@
1
1
  module Garner
2
- VERSION = '0.5.0'
2
+ VERSION = '0.5.1'
3
3
  end
@@ -16,22 +16,22 @@ describe Garner::Cache::Context do
16
16
  end
17
17
 
18
18
  it 'returns a Garner::Cache::Identity' do
19
- subject.call.should be_a(Garner::Cache::Identity)
19
+ expect(subject.call).to be_a(Garner::Cache::Identity)
20
20
  end
21
21
 
22
22
  it "sets the identity's ruby_binding to self" do
23
- subject.call.ruby_context.should eq @test_context
23
+ expect(subject.call.ruby_context).to eq @test_context
24
24
  end
25
25
 
26
26
  it 'applies each of Garner.config.context_key_strategies' do
27
27
  # Default :context_key_strategies
28
- subject.call.key_hash[:caller].should_not be_nil
28
+ expect(subject.call.key_hash[:caller]).not_to be_nil
29
29
 
30
30
  # Custom :context_key_strategies
31
31
  Garner.configure do |config|
32
32
  config.context_key_strategies = []
33
33
  end
34
- subject.call.key_hash[:caller].should be_nil
34
+ expect(subject.call.key_hash[:caller]).to be_nil
35
35
  end
36
36
 
37
37
  end
@@ -4,17 +4,17 @@ describe Garner::Cache::Identity do
4
4
 
5
5
  it 'includes Garner.config.global_cache_options' do
6
6
  Garner.configure { |config| config.global_cache_options = { foo: 'bar' } }
7
- subject.options_hash[:foo].should eq 'bar'
7
+ expect(subject.options_hash[:foo]).to eq 'bar'
8
8
  end
9
9
 
10
10
  it 'includes Garner.config.expires_in' do
11
11
  Garner.configure { |config| config.expires_in = 5.minutes }
12
- subject.options_hash[:expires_in].should eq 5.minutes
12
+ expect(subject.options_hash[:expires_in]).to eq 5.minutes
13
13
  end
14
14
 
15
15
  describe 'nocache' do
16
16
  it 'forces a cache bypass' do
17
- Garner::Cache.should_not_receive :fetch
17
+ expect(Garner::Cache).not_to receive :fetch
18
18
  subject.nocache.fetch { 'foo' }
19
19
  end
20
20
  end
@@ -23,7 +23,7 @@ describe Garner::Cache::Identity do
23
23
  it "adds to the object identity's bindings" do
24
24
  subject.bind('foo')
25
25
  subject.bind('bar')
26
- subject.bindings.should eq %w(foo bar)
26
+ expect(subject.bindings).to eq %w(foo bar)
27
27
  end
28
28
 
29
29
  it 'raises an error for <> 1 arguments' do
@@ -36,7 +36,7 @@ describe Garner::Cache::Identity do
36
36
  it "adds to the object identity's key_hash" do
37
37
  subject.key(foo: 1)
38
38
  subject.key(bar: 2)
39
- subject.key_hash.should eq(foo: 1, bar: 2)
39
+ expect(subject.key_hash).to eq(foo: 1, bar: 2)
40
40
  end
41
41
 
42
42
  it 'raises an error for <> 1 arguments' do
@@ -53,7 +53,7 @@ describe Garner::Cache::Identity do
53
53
  it "adds to the object identity's options_hash" do
54
54
  subject.options(foo: 1)
55
55
  subject.options(bar: 2)
56
- subject.options_hash.should eq(expires_in: nil, foo: 1, bar: 2)
56
+ expect(subject.options_hash).to eq(expires_in: nil, foo: 1, bar: 2)
57
57
  end
58
58
 
59
59
  it 'raises an error for <> 1 arguments' do
@@ -21,18 +21,18 @@ describe Garner::Cache do
21
21
  result2 = subject.fetch([], {}, {}) { 'foo' }
22
22
  result3 = subject.fetch([], {}, {}) { 'bar' }
23
23
 
24
- result1.should.nil?
25
- result2.should eq 'foo'
26
- result3.should eq 'foo'
24
+ expect(result1).to be nil
25
+ expect(result2).to eq 'foo'
26
+ expect(result3).to eq 'foo'
27
27
  end
28
28
 
29
29
  it 'does not cache results with un-bindable bindings' do
30
30
  unbindable = double('object')
31
- unbindable.stub(:garner_cache_key) { nil }
31
+ allow(unbindable).to receive(:garner_cache_key) { nil }
32
32
  result1 = subject.fetch([unbindable], {}, {}) { 'foo' }
33
33
  result2 = subject.fetch([unbindable], {}, {}) { 'bar' }
34
- result1.should eq 'foo'
35
- result2.should eq 'bar'
34
+ expect(result1).to eq 'foo'
35
+ expect(result2).to eq 'bar'
36
36
  end
37
37
 
38
38
  it 'raises an exception by default for nil bindings' do
@@ -45,5 +45,13 @@ describe Garner::Cache do
45
45
  Garner.configure { |config| config.whiny_nils = false }
46
46
  expect { subject.fetch([nil], {}, {}) { 'foo' } }.not_to raise_error
47
47
  end
48
+
49
+ it 'deletes record when cached block yields nil' do
50
+ binding = double('object', garner_cache_key: 'key')
51
+ expect(Garner.config.cache).to receive(:delete).with({ binding_keys: ['key'], context_keys: { key: 'value' } }, { namespace: 'foo' })
52
+ subject.fetch [binding], { key: 'value' }, namespace: 'foo' do
53
+ nil
54
+ end
55
+ end
48
56
  end
49
57
  end
@@ -12,6 +12,6 @@ describe Garner::Config do
12
12
  Garner.configure do |config|
13
13
  config.cache = cache
14
14
  end
15
- Garner.config.cache.should eq cache
15
+ expect(Garner.config.cache).to eq cache
16
16
  end
17
17
  end
@@ -14,8 +14,8 @@ describe Garner::Mixins::Mongoid::Document do
14
14
 
15
15
  describe 'proxied_classes' do
16
16
  it 'returns all Mongoid superclasses' do
17
- @monger.proxied_classes.should eq [Monger]
18
- @cheese.proxied_classes.should eq [Cheese, Food]
17
+ expect(@monger.proxied_classes).to eq [Monger]
18
+ expect(@cheese.proxied_classes).to eq [Cheese, Food]
19
19
  end
20
20
  end
21
21
  end
@@ -26,44 +26,44 @@ describe Garner::Mixins::Mongoid::Document do
26
26
  describe '_latest_by_updated_at' do
27
27
  it 'returns a Mongoid::Document instance' do
28
28
  subject.create
29
- subject.send(:_latest_by_updated_at).should be_a(subject)
29
+ expect(subject.send(:_latest_by_updated_at)).to be_a(subject)
30
30
  end
31
31
 
32
32
  it 'returns the _latest_by_updated_at document by :updated_at' do
33
33
  mongers = 3.times.map { |i| subject.create(name: "M#{i}") }
34
34
  mongers[1].touch
35
35
 
36
- subject.send(:_latest_by_updated_at)._id.should eq mongers[1]._id
37
- subject.send(:_latest_by_updated_at).updated_at.should eq mongers[1].reload.updated_at
36
+ expect(subject.send(:_latest_by_updated_at)._id).to eq mongers[1]._id
37
+ expect(subject.send(:_latest_by_updated_at).updated_at).to eq mongers[1].reload.updated_at
38
38
  end
39
39
 
40
40
  it 'returns nil if there are no documents' do
41
- subject.send(:_latest_by_updated_at).should be_nil
41
+ expect(subject.send(:_latest_by_updated_at)).to be_nil
42
42
  end
43
43
 
44
44
  it 'returns nil if updated_at does not exist' do
45
45
  subject.create
46
- subject.stub(:fields) { {} }
47
- subject.send(:_latest_by_updated_at).should be_nil
46
+ allow(subject).to receive(:fields) { {} }
47
+ expect(subject.send(:_latest_by_updated_at)).to be_nil
48
48
  end
49
49
  end
50
50
 
51
51
  describe 'proxy_binding' do
52
52
  it 'returns the _latest_by_updated_at document' do
53
53
  subject.create
54
- subject.proxy_binding.should be_a(Monger)
54
+ expect(subject.proxy_binding).to be_a(Monger)
55
55
  end
56
56
 
57
57
  it 'responds to :touch' do
58
58
  subject.create
59
- subject.any_instance.should_receive(:touch)
59
+ expect_any_instance_of(subject).to receive(:touch)
60
60
  subject.proxy_binding.touch
61
61
  end
62
62
 
63
63
  describe 'cache_key' do
64
64
  it 'matches what would be returned from the full object' do
65
65
  monger = subject.create
66
- subject.proxy_binding.cache_key.should eq monger.reload.cache_key
66
+ expect(subject.proxy_binding.cache_key).to eq monger.reload.cache_key
67
67
  end
68
68
 
69
69
  context 'with Mongoid subclasses' do
@@ -71,7 +71,7 @@ describe Garner::Mixins::Mongoid::Document do
71
71
 
72
72
  it 'matches what would be returned from the full object' do
73
73
  cheese = subject.create
74
- subject.proxy_binding.cache_key.should eq cheese.reload.cache_key
74
+ expect(subject.proxy_binding.cache_key).to eq cheese.reload.cache_key
75
75
  end
76
76
  end
77
77
  end
@@ -4,9 +4,9 @@ require 'garner/mixins/mongoid'
4
4
  describe Garner::Mixins::Mongoid::Identity do
5
5
  before(:each) do
6
6
  @mock_strategy = double('strategy')
7
- @mock_strategy.stub(:apply)
7
+ allow(@mock_strategy).to receive(:apply)
8
8
  @mock_mongoid_strategy = double('mongoid_strategy')
9
- @mock_mongoid_strategy.stub(:apply)
9
+ allow(@mock_mongoid_strategy).to receive(:apply)
10
10
  end
11
11
 
12
12
  describe 'from_class_and_handle' do
@@ -36,9 +36,9 @@ describe Garner::Mixins::Mongoid::Identity do
36
36
 
37
37
  it 'sets klass, handle and a conditions hash' do
38
38
  identity = subject.from_class_and_handle(Monger, 'id')
39
- identity.klass.should eq Monger
40
- identity.handle.should eq 'id'
41
- identity.conditions['$or'].should eq [
39
+ expect(identity.klass).to eq Monger
40
+ expect(identity.handle).to eq 'id'
41
+ expect(identity.conditions['$or']).to eq [
42
42
  { _id: 'id' },
43
43
  { _slugs: 'id' }
44
44
  ]
@@ -47,9 +47,9 @@ describe Garner::Mixins::Mongoid::Identity do
47
47
  context 'on a Mongoid subclass' do
48
48
  it 'sets klass to parent and includes the _type field' do
49
49
  identity = subject.from_class_and_handle(Cheese, 'id')
50
- identity.klass.should eq Cheese
51
- identity.conditions[:_type].should eq('$in' => ['Cheese'])
52
- identity.conditions['$or'].should eq [
50
+ expect(identity.klass).to eq Cheese
51
+ expect(identity.conditions[:_type]).to eq('$in' => ['Cheese'])
52
+ expect(identity.conditions['$or']).to eq [
53
53
  { _id: 'id' },
54
54
  { _slugs: 'id' }
55
55
  ]
@@ -61,17 +61,17 @@ describe Garner::Mixins::Mongoid::Identity do
61
61
  subject { Monger.identify('m1').to_s }
62
62
 
63
63
  it 'stringizes the binding and includes klass and handle' do
64
- subject.should be_a(String)
65
- subject.should =~ /Monger/
66
- subject.should =~ /m1/
64
+ expect(subject).to be_a(String)
65
+ expect(subject).to match(/Monger/)
66
+ expect(subject).to match(/m1/)
67
67
  end
68
68
 
69
69
  it 'should not change across identical instances' do
70
- subject.should eq Monger.identify('m1').to_s
70
+ expect(subject).to eq Monger.identify('m1').to_s
71
71
  end
72
72
 
73
73
  it 'should be different across different instances' do
74
- subject.should_not == Monger.identify('m2').to_s
74
+ expect(subject).not_to eq(Monger.identify('m2').to_s)
75
75
  end
76
76
  end
77
77
 
@@ -88,26 +88,26 @@ describe Garner::Mixins::Mongoid::Identity do
88
88
 
89
89
  describe 'proxy_binding' do
90
90
  it 'returns nil for nonexistent bindings' do
91
- Monger.identify('m2').proxy_binding.should be_nil
91
+ expect(Monger.identify('m2').proxy_binding).to be_nil
92
92
  end
93
93
 
94
94
  it 'returns nil for nil bindings' do
95
95
  @monger.unset(:_slugs)
96
- Monger.identify(nil).proxy_binding.should be_nil
96
+ expect(Monger.identify(nil).proxy_binding).to be_nil
97
97
  end
98
98
 
99
99
  it 'limits the query' do
100
- Mongoid::Slug::Criteria.any_instance.should_receive(:limit).with(1).and_return([@monger])
100
+ expect_any_instance_of(Mongoid::Slug::Criteria).to receive(:limit).with(1).and_return([@monger])
101
101
  Monger.identify('m1').proxy_binding
102
102
  end
103
103
 
104
104
  describe 'cache_key' do
105
105
  it "generates a cache key equal to Mongoid::Document's" do
106
- Monger.identify('m1').proxy_binding.cache_key.should eq @monger.cache_key
106
+ expect(Monger.identify('m1').proxy_binding.cache_key).to eq @monger.cache_key
107
107
 
108
108
  # Also test for Mongoid subclasses
109
- Cheese.identify('havarti').proxy_binding.cache_key.should eq @cheese.cache_key
110
- Food.identify(@cheese.id).proxy_binding.cache_key.should eq @cheese.cache_key
109
+ expect(Cheese.identify('havarti').proxy_binding.cache_key).to eq @cheese.cache_key
110
+ expect(Food.identify(@cheese.id).proxy_binding.cache_key).to eq @cheese.cache_key
111
111
  end
112
112
 
113
113
  context 'without Mongoid::Timestamps' do
@@ -117,22 +117,22 @@ describe Garner::Mixins::Mongoid::Identity do
117
117
  end
118
118
 
119
119
  it "generates a cache key equal to Mongoid::Document's" do
120
- Monger.identify('m1').proxy_binding.cache_key.should eq @monger.cache_key
120
+ expect(Monger.identify('m1').proxy_binding.cache_key).to eq @monger.cache_key
121
121
 
122
122
  # Also test for Mongoid subclasses
123
- Cheese.identify('havarti').proxy_binding.cache_key.should eq @cheese.cache_key
124
- Food.identify(@cheese.id).proxy_binding.cache_key.should eq @cheese.cache_key
123
+ expect(Cheese.identify('havarti').proxy_binding.cache_key).to eq @cheese.cache_key
124
+ expect(Food.identify(@cheese.id).proxy_binding.cache_key).to eq @cheese.cache_key
125
125
  end
126
126
  end
127
127
  end
128
128
 
129
129
  describe 'updated_at' do
130
130
  it "returns :updated_at equal to Mongoid::Document's" do
131
- Monger.identify('m1').proxy_binding.updated_at.should eq Monger.find('m1').updated_at
131
+ expect(Monger.identify('m1').proxy_binding.updated_at).to eq Monger.find('m1').updated_at
132
132
 
133
133
  # Also test for Mongoid subclasses
134
- Cheese.identify('havarti').proxy_binding.updated_at.should eq @cheese.updated_at
135
- Food.identify(@cheese.id).proxy_binding.updated_at.should eq @cheese.updated_at
134
+ expect(Cheese.identify('havarti').proxy_binding.updated_at).to eq @cheese.updated_at
135
+ expect(Food.identify(@cheese.id).proxy_binding.updated_at).to eq @cheese.updated_at
136
136
  end
137
137
  end
138
138
  end