mongoid-cached-json 1.5.1 → 1.5.2

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 +7 -0
  2. data/.gitignore +21 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +6 -0
  5. data/.rubocop_todo.yml +80 -0
  6. data/.travis.yml +16 -0
  7. data/CHANGELOG.md +85 -0
  8. data/CONTRIBUTING.md +118 -0
  9. data/Gemfile +21 -0
  10. data/README.md +49 -52
  11. data/Rakefile +34 -0
  12. data/lib/mongoid-cached-json.rb +0 -1
  13. data/lib/mongoid-cached-json/array.rb +1 -3
  14. data/lib/mongoid-cached-json/cached_json.rb +52 -50
  15. data/lib/mongoid-cached-json/config.rb +20 -21
  16. data/lib/mongoid-cached-json/hash.rb +1 -3
  17. data/lib/mongoid-cached-json/key_references.rb +0 -3
  18. data/lib/mongoid-cached-json/mongoid_criteria.rb +1 -3
  19. data/lib/mongoid-cached-json/version.rb +1 -2
  20. data/mongoid-cached-json.gemspec +17 -0
  21. data/spec/array_spec.rb +48 -0
  22. data/spec/benchmark_spec.rb +115 -0
  23. data/spec/cached_json_spec.rb +501 -0
  24. data/spec/config_spec.rb +21 -0
  25. data/spec/dalli_spec.rb +37 -0
  26. data/spec/hash_spec.rb +66 -0
  27. data/spec/mongoid_criteria_spec.rb +78 -0
  28. data/spec/spec_helper.rb +20 -0
  29. data/spec/support/awesome_artwork.rb +11 -0
  30. data/spec/support/awesome_image.rb +14 -0
  31. data/spec/support/fast_json_artwork.rb +15 -0
  32. data/spec/support/fast_json_image.rb +12 -0
  33. data/spec/support/fast_json_url.rb +12 -0
  34. data/spec/support/json_embedded_foobar.rb +5 -0
  35. data/spec/support/json_employee.rb +12 -0
  36. data/spec/support/json_foobar.rb +19 -0
  37. data/spec/support/json_manager.rb +14 -0
  38. data/spec/support/json_math.rb +9 -0
  39. data/spec/support/json_parent_foobar.rb +11 -0
  40. data/spec/support/json_polymorphic_embedded_foobar.rb +9 -0
  41. data/spec/support/json_polymorphic_referenced_foobar.rb +9 -0
  42. data/spec/support/json_referenced_foobar.rb +5 -0
  43. data/spec/support/json_supervisor.rb +13 -0
  44. data/spec/support/json_transform.rb +13 -0
  45. data/spec/support/matchers/invalidate.rb +22 -0
  46. data/spec/support/person.rb +20 -0
  47. data/spec/support/poly_company.rb +10 -0
  48. data/spec/support/poly_person.rb +10 -0
  49. data/spec/support/poly_post.rb +9 -0
  50. data/spec/support/prison_cell.rb +11 -0
  51. data/spec/support/prison_inmate.rb +12 -0
  52. data/spec/support/secret_parent.rb +11 -0
  53. data/spec/support/sometimes_secret.rb +11 -0
  54. data/spec/support/tool.rb +11 -0
  55. data/spec/support/tool_box.rb +10 -0
  56. metadata +62 -137
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0e18f9babf5b55e3d785541737870a25b29ca0c0
4
+ data.tar.gz: 20d28efe0aa10fe48518bfff03015033fa9199ce
5
+ SHA512:
6
+ metadata.gz: 750a96034f2430ade4c8ff7ce27f18b36fb17a2c1173f3bb583f0c82dbd54cb1bdfee27872876291b9dd3106d453dd4dad445eb6d9081177aa4ae5bcdeb9bbcc
7
+ data.tar.gz: d06238d96ef027691d0de888dc76f205964d9b8434511a8c521a09a3ec7a7aac6411f4bb05a765d0652e28a2f0de0699f44b8d83cd191889e12326d3b048caaf
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ # don't commit Gemfile.lock
2
+ Gemfile.lock
3
+
4
+ # rvm
5
+ .rvmrc
6
+
7
+ # rdoc generated
8
+ rdoc
9
+
10
+ # yard generated
11
+ doc
12
+ .yardoc
13
+
14
+ # bundler
15
+ .bundle
16
+
17
+ # jeweler generated
18
+ pkg
19
+
20
+ # redcar
21
+ .redcar
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format=documentation
3
+
data/.rubocop.yml ADDED
@@ -0,0 +1,6 @@
1
+ AllCops:
2
+ Exclude:
3
+ - vendor/**/*
4
+ - bin/**/*
5
+
6
+ inherit_from: .rubocop_todo.yml
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,80 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2014-12-29 16:04:26 -0500 using RuboCop version 0.28.0.
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: 1
9
+ # Configuration parameters: AllowSafeAssignment.
10
+ Lint/AssignmentInCondition:
11
+ Enabled: false
12
+
13
+ # Offense count: 1
14
+ Lint/UnderscorePrefixedVariableName:
15
+ Enabled: false
16
+
17
+ # Offense count: 2
18
+ Lint/UselessAssignment:
19
+ Enabled: false
20
+
21
+ # Offense count: 5
22
+ Metrics/AbcSize:
23
+ Max: 54
24
+
25
+ # Offense count: 2
26
+ Metrics/BlockNesting:
27
+ Max: 4
28
+
29
+ # Offense count: 4
30
+ Metrics/CyclomaticComplexity:
31
+ Max: 15
32
+
33
+ # Offense count: 201
34
+ # Configuration parameters: AllowURI, URISchemes.
35
+ Metrics/LineLength:
36
+ Max: 202
37
+
38
+ # Offense count: 10
39
+ # Configuration parameters: CountComments.
40
+ Metrics/MethodLength:
41
+ Max: 36
42
+
43
+ # Offense count: 4
44
+ Metrics/PerceivedComplexity:
45
+ Max: 16
46
+
47
+ # Offense count: 34
48
+ Style/Documentation:
49
+ Enabled: false
50
+
51
+ # Offense count: 2
52
+ Style/DoubleNegation:
53
+ Enabled: false
54
+
55
+ # Offense count: 1
56
+ Style/EachWithObject:
57
+ Enabled: false
58
+
59
+ # Offense count: 1
60
+ # Configuration parameters: Exclude.
61
+ Style/FileName:
62
+ Enabled: false
63
+
64
+ # Offense count: 5
65
+ Style/Lambda:
66
+ Enabled: false
67
+
68
+ # Offense count: 1
69
+ Style/ModuleFunction:
70
+ Enabled: false
71
+
72
+ # Offense count: 1
73
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
74
+ Style/RaiseArgs:
75
+ Enabled: false
76
+
77
+ # Offense count: 2
78
+ # Configuration parameters: Methods.
79
+ Style/SingleLineBlockParams:
80
+ Enabled: false
data/.travis.yml ADDED
@@ -0,0 +1,16 @@
1
+ sudo: false
2
+
3
+ services:
4
+ - mongodb
5
+ - memcache
6
+
7
+ rvm:
8
+ - 1.9.3
9
+ - 2.0.0
10
+ - 2.2.0
11
+
12
+ env:
13
+ - MONGOID_VERSION=3
14
+ - MONGOID_VERSION=4
15
+
16
+ cache: bundler
data/CHANGELOG.md ADDED
@@ -0,0 +1,85 @@
1
+ 1.5.2 (29/12/2014)
2
+ ------------------
3
+
4
+ * Fixed support for Ruby 2.2.0 - [@dblock](http://github.com/dblock).
5
+ * Implemented RuboCop, Ruby-style linter - [@dblock](http://github.com/dblock).
6
+ * Upgraded to RSpec 3.1 - [@dblock](http://github.com/dblock).
7
+ * Removed Jeweler - [@dblock](http://github.com/dblock).
8
+
9
+ 1.5.1 (05/07/2013)
10
+ --------------------
11
+
12
+ * Fixed `read_multi` calls so as to enable proper cache reading behavior in stores other than `ActiveSupport::Cache::DalliStore` - [@macreery](http://github.com/macreery).
13
+
14
+ 1.5 (04/13/2013)
15
+ ----------------
16
+
17
+ * Added `:reference_properties` that disables dynamic selection of the type of JSON to return for a reference - [@dblock](https://github.com/dblock).
18
+
19
+ 1.4.3 (01/25/2013)
20
+ ------------------
21
+
22
+ * For caches that support `read_multi`, do not attempt to fetch JSON a second time via `fetch`, write it directly to cache - [@dblock](https://github.com/dblock).
23
+
24
+ 1.4.2 (01/24/2013)
25
+ ------------------
26
+
27
+ * Fix: calling `as_json` on a destroyed Mongoid 3.1 object with a HABTM relationship raises `undefined method 'map' for nil:NilClass` - [@dblock](http://github.com/dblock).
28
+
29
+ 1.4.1 (01/22/2013)
30
+ ------------------
31
+
32
+ * Invalidate cache in `after_destroy` - [@dblock](http://github.com/dblock).
33
+ * Do not invalidate cache when the document is created - [@dblock](http://github.com/dblock).
34
+ * Invalidate cache in `after_update` instead of `before_update` - [@dblock](http://github.com/dblock).
35
+
36
+ 1.4 (01/20/2013)
37
+ ---------------
38
+
39
+ * Collect a JSON partial representation first, then fetch data from cache only once per-key - [@dblock](http://github.com/dblock), [@macreery](http://github.com/macreery).
40
+ * Use `read_multi` if the cache store supports it to fetch data from cache in bulk - [@dblock](http://github.com/dblock), [@macreery](http://github.com/macreery).
41
+ * Added a benchmark test suite - [@dblock](http://github.com/dblock), [@macreery](http://github.com/macreery).
42
+
43
+ 1.3 (11/12/2012)
44
+ ----------------
45
+
46
+ * Removed requirement for `bson_ext`, support for Mongoid 3.0 - [@dblock](http://github.com/dblock).
47
+
48
+ 1.2.3 (7/3/2012)
49
+ ----------------
50
+
51
+ * Fix: including a `referenced_in` field in `json_fields` within a child `embedded_in` a parent causes an "access to the collection is not allowed since it is an embedded document" error - [@dblock](http://github.com/dblock).
52
+
53
+ 1.2.2 (7/3/2012)
54
+ ----------------
55
+
56
+ * Fix [#6](https://github.com/dblock/mongoid-cached-json/issues/6): including parent in `json_fields` within a polymorphic reference fails with an "uninitialized constant" error - [@dblock](http://github.com/dblock).
57
+
58
+ 1.2.1 (6/12/2012)
59
+ -----------------
60
+
61
+ * Allow `nil` parameter in as_json - [@dblock](http://github.com/dblock).
62
+
63
+ 1.2.0 (5/28/2012)
64
+ ------------------
65
+
66
+ * Fix: cache key generation bug when using Mongoid 3 - [@marbemac](http://github.com/marbemac).
67
+
68
+ 1.1.1 (3/21/2012)
69
+ -----------------
70
+
71
+ * Fix: caching/invalidating referenced polymorphic documents - [@macreery](http://github.com/macreery).
72
+
73
+ 1.1 (2/29/2012)
74
+ ---------------
75
+
76
+ * Added support for versioning - [@dblock](http://github.com/dblock).
77
+
78
+ 1.0 (2/20/2012)
79
+ ---------------
80
+
81
+ * Initial release - [@aaw](http://github.com/aaw).
82
+ * Retired support for `:markdown` in favor of `Mongoid::CachedJson::transform` - [@dblock](http://github.com/dblock).
83
+ * Added `Mongoid::CachedJson::configure` - [@dblock](http://github.com/dblock).
84
+ * Added support for `:markdown` - [@macreery](http://github.com/macreery).
85
+
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,118 @@
1
+ Contributing to Mongoid::CachedJson
2
+ ===================================
3
+
4
+ Mongoid::CachedJson is work of [many of contributors](https://github.com/dblock/mongoid-cached-json/graphs/contributors). You're encouraged to submit [pull requests](https://github.com/dblock/mongoid-cached-json/pulls), [propose features and discuss issues](https://github.com/dblock/mongoid-cached-json/issues). When in doubt, ask a question in the [Google Group](http://groups.google.com/group/mongoid-cached-json).
5
+
6
+ #### Fork the Project
7
+
8
+ Fork the [project on Github](https://github.com/dblock/mongoid-cached-json) and check out your copy.
9
+
10
+ ```
11
+ git clone https://github.com/contributor/mongoid-cached-json.git
12
+ cd mongoid-cached-json
13
+ git remote add upstream https://github.com/dblock/mongoid-cached-json.git
14
+ ```
15
+
16
+ #### Create a Topic Branch
17
+
18
+ Make sure your fork is up-to-date and create a topic branch for your feature or bug fix.
19
+
20
+ ```
21
+ git checkout master
22
+ git pull upstream master
23
+ git checkout -b my-feature-branch
24
+ ```
25
+
26
+ #### Bundle Install and Test
27
+
28
+ Ensure that you can build the project and run tests.
29
+
30
+ ```
31
+ bundle install
32
+ bundle exec rake
33
+ ```
34
+
35
+ #### Write Tests
36
+
37
+ Try to write a test that reproduces the problem you're trying to fix or describes a feature that you want to build.
38
+
39
+ We definitely appreciate pull requests that highlight or reproduce a problem, even without a fix.
40
+
41
+ #### Write Code
42
+
43
+ Implement your feature or bug fix.
44
+
45
+ Ruby style is enforced with [Rubocop](https://github.com/bbatsov/rubocop), run `bundle exec rubocop` and fix any style issues highlighted.
46
+
47
+ Make sure that `bundle exec rake` completes without errors.
48
+
49
+ #### Write Documentation
50
+
51
+ Document any external behavior in the [README](README.md).
52
+
53
+ #### Update Changelog
54
+
55
+ Add a line to [CHANGELOG](CHANGELOG.md) under *Next Release*. Make it look like every other line, including your name and link to your Github account.
56
+
57
+ #### Commit Changes
58
+
59
+ Make sure git knows your name and email address:
60
+
61
+ ```
62
+ git config --global user.name "Your Name"
63
+ git config --global user.email "contributor@example.com"
64
+ ```
65
+
66
+ Writing good commit logs is important. A commit log should describe what changed and why.
67
+
68
+ ```
69
+ git add ...
70
+ git commit
71
+ ```
72
+
73
+ #### Push
74
+
75
+ ```
76
+ git push origin my-feature-branch
77
+ ```
78
+
79
+ #### Make a Pull Request
80
+
81
+ Go to https://github.com/contributor/mongoid-cached-json and select your feature branch. Click the 'Pull Request' button and fill out the form. Pull requests are usually reviewed within a few days.
82
+
83
+ #### Rebase
84
+
85
+ If you've been working on a change for a while, rebase with upstream/master.
86
+
87
+ ```
88
+ git fetch upstream
89
+ git rebase upstream/master
90
+ git push origin my-feature-branch -f
91
+ ```
92
+
93
+ #### Update CHANGELOG Again
94
+
95
+ Update the [CHANGELOG](CHANGELOG.md) with the pull request number. A typical entry looks as follows.
96
+
97
+ ```
98
+ * [#123](https://github.com/dblock/mongoid-cached-json/pull/123): Reticulated splines - [@contributor](https://github.com/contributor).
99
+ ```
100
+
101
+ Amend your previous commit and force push the changes.
102
+
103
+ ```
104
+ git commit --amend
105
+ git push origin my-feature-branch -f
106
+ ```
107
+
108
+ #### Check on Your Pull Request
109
+
110
+ Go back to your pull request after a few minutes and see whether it passed muster with Travis-CI. Everything should look green, otherwise fix issues and amend your commit as described above.
111
+
112
+ #### Be Patient
113
+
114
+ It's likely that your change will not be merged and that the nitpicky maintainers will ask you to do more, or fix seemingly benign problems. Hang on there!
115
+
116
+ #### Thank You
117
+
118
+ Please do know that we really appreciate and value your time and work. We love you, really.
data/Gemfile ADDED
@@ -0,0 +1,21 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ case version = ENV['MONGOID_VERSION'] || '~> 4.0'
6
+ when /4/
7
+ gem 'mongoid', '~> 4.0'
8
+ when /3/
9
+ gem 'mongoid', '~> 3.1'
10
+ else
11
+ gem 'mongoid', version
12
+ end
13
+
14
+ group :development do
15
+ gem 'rake'
16
+ gem 'rspec', '~> 3.1'
17
+ gem 'bundler', '~> 1.0'
18
+ gem 'yard', '~> 0.6'
19
+ gem 'dalli', '~> 2.6'
20
+ gem 'rubocop', '0.28.0'
21
+ end
data/README.md CHANGED
@@ -18,7 +18,7 @@ Quickstart
18
18
 
19
19
  Add `mongoid-cached-json` to your Gemfile.
20
20
 
21
- gem "mongoid-cached-json"
21
+ gem 'mongoid-cached-json'
22
22
 
23
23
  Include `Mongoid::CachedJson` in your models.
24
24
 
@@ -32,8 +32,8 @@ class Gadget
32
32
  belongs_to :widget
33
33
 
34
34
  json_fields \
35
- :name => { },
36
- :extras => { :properties => :public }
35
+ name: {},
36
+ extras: { properties: :public }
37
37
 
38
38
  end
39
39
 
@@ -44,8 +44,8 @@ class Widget
44
44
  has_many :gadgets
45
45
 
46
46
  json_fields \
47
- :name => { },
48
- :gadgets => { :type => :reference, :properties => :public }
47
+ name: {},
48
+ gadgets: { type: :reference, properties: :public }
49
49
 
50
50
  end
51
51
  ```
@@ -59,13 +59,13 @@ widget = Widget.first
59
59
  widget.as_json
60
60
 
61
61
  # equivalent to the above
62
- widget.as_json({ :properties => :short })
62
+ widget.as_json(properties: :short)
63
63
 
64
64
  # `:public` version of the JSON, `gadgets` returned with `:short` JSON, no `:extras`
65
- widget.as_json({ :properties => :public })
65
+ widget.as_json(properties: :public)
66
66
 
67
67
  # `:all` version of the JSON, `gadgets` returned with `:all` JSON, including `:extras`
68
- widget.as_json({ :properties => :all })
68
+ widget.as_json(properties: :all)
69
69
  ```
70
70
 
71
71
  Configuration
@@ -92,11 +92,11 @@ Defining Fields
92
92
 
93
93
  `Mongoid::CachedJson` supports the following options:
94
94
 
95
- * `:hide_as_child_json_when` is an optional function that hides the child JSON from `as_json` parent objects, eg. `cached_json :hide_as_child_json_when => lambda { |instance| ! instance.is_secret? }`
95
+ * `:hide_as_child_json_when` is an optional function that hides the child JSON from `as_json` parent objects, eg. `cached_json hide_as_child_json_when: lambda { |instance| ! instance.secret? }`
96
96
 
97
97
  `Mongoid::CachedJson` field definitions support the following options:
98
98
 
99
- * `:definition` can be a symbol or an anonymous function, eg. `:description => { :definition => :name }` or `:description => { :definition => lambda { |instance| instance.name } }`
99
+ * `:definition` can be a symbol or an anonymous function, eg. `description: { definition: :name }` or `description: { definition: lambda { |instance| instance.name } }`
100
100
  * `:type` can be `:reference`, required for referenced objects
101
101
  * `:properties` can be one of `:short`, `:public`, `:all`, in this order
102
102
  * `:version` can be a single version for this field to appear in
@@ -115,7 +115,7 @@ When calling `as_json` on a model that contains references to other models the v
115
115
 
116
116
  The dynamic selection where `:public` generates `:short` references allows to return smaller embedded collections, while `:all` allows to fetch deep data. Another way of looking at this is to say that a field in a `:short` JSON appears in collections, a field declared in the `:public` JSON appears for all users and the field declared in the `:all` JSON appears for object owners only.
117
117
 
118
- To override this behavior and always return the `:short` JSON for a child reference, use `:reference_properties`. In the following example we would want `Person.as_json({ :properties => :all })` to return the social security number for that person, but not for all their friends.
118
+ To override this behavior and always return the `:short` JSON for a child reference, use `:reference_properties`. In the following example we would want `Person.as_json(properties: :all)` to return the social security number for that person, but not for all their friends.
119
119
 
120
120
  ``` ruby
121
121
  class Person
@@ -124,12 +124,12 @@ class Person
124
124
 
125
125
  field :name
126
126
  field :ssn
127
- has_and_belongs_to_many :friends, :class_name => "Person"
127
+ has_and_belongs_to_many :friends, class_name: 'Person'
128
128
 
129
129
  json_fields \
130
- :name => {},
131
- :ssn => { :properties => :all }
132
- friends: { :properties => :public, :reference_properties => :short }
130
+ name: {},
131
+ ssn: { properties: :all },
132
+ friends: { properties: :public, reference_properties: :short }
133
133
 
134
134
  end
135
135
  ```
@@ -148,24 +148,24 @@ class Person
148
148
  field :last
149
149
 
150
150
  def name
151
- [ first, middle, last ].compact.join(" ")
151
+ [ first, middle, last ].compact.join(' ')
152
152
  end
153
153
 
154
154
  json_fields \
155
- :first => { :versions => [ :v2, :v3 ] },
156
- :last => { :versions => [ :v2, :v3 ] },
157
- :middle => { :versions => [ :v2, :v3 ] },
158
- :born => { :versions => :v3 },
159
- :name => { :definition => :name }
155
+ first: { versions: [ :v2, :v3 ] },
156
+ last: { versions: [ :v2, :v3 ] },
157
+ middle: { versions: [ :v2, :v3 ] },
158
+ born: { versions: :v3 },
159
+ name: { definition: :name }
160
160
 
161
161
  end
162
162
  ```
163
163
 
164
164
  ``` ruby
165
- person = Person.create({ :first => "John", :middle => "F.", :last => "Kennedy", :born => "May 29, 1917" })
166
- person.as_json # { :name => "John F. Kennedy" }
167
- person.as_json({ :version => :v2 }) # { :first => "John", :middle => "F.", :last => "Kennedy", :name => "John F. Kennedy" }
168
- person.as_json({ :version => :v3 }) # { :first => "John", :middle => "F.", :last => "Kennedy", :name => "John F. Kennedy", :born => "May 29, 1917" }
165
+ person = Person.create(first: 'John', middle: 'F.', last: 'Kennedy', born: 'May 29, 1917')
166
+ person.as_json # { name: 'John F. Kennedy' }
167
+ person.as_json(version: :v2) # { first: 'John', middle: 'F.', last: 'Kennedy', name: 'John F. Kennedy' }
168
+ person.as_json(version: :v3) # { first: 'John', middle: 'F.', last: 'Kennedy', name: 'John F. Kennedy', born: 'May 29, 1917' }
169
169
  ```
170
170
 
171
171
  Transformations
@@ -182,14 +182,14 @@ class Widget
182
182
  field :description
183
183
 
184
184
  json_fields \
185
- :name => { :trusted => true },
186
- :description => { }
185
+ name: { trusted: true },
186
+ description: {}
187
187
  end
188
188
  ```
189
189
 
190
190
  ``` ruby
191
191
  Mongoid::CachedJson.config.transform do |field, definition, value|
192
- trusted = !! definition[:trusted]
192
+ trusted = !!definition[:trusted]
193
193
  trusted ? value : CGI.escapeHTML(value)
194
194
  end
195
195
  ```
@@ -210,12 +210,12 @@ Testing JSON
210
210
  This library overrides `as_json`, hence testing JSON results can be done at model level.
211
211
 
212
212
  ``` ruby
213
- describe "as_json" do
213
+ describe 'as_json' do
214
214
  before :each do
215
- @person = Person.create!({ :first => "John", :last => "Doe" })
215
+ @person = Person.create!(first: 'John', last: 'Doe')
216
216
  end
217
- it "returns name" do
218
- @person.as_json({ :properties => :public })[:name].should == "John Doe"
217
+ it 'returns name' do
218
+ expect(@person.as_json(properties: :public)[:name]).to eql 'John Doe'
219
219
  end
220
220
  end
221
221
  ```
@@ -223,13 +223,13 @@ end
223
223
  It's also common to test the results of the API using the [Pathy](https://github.com/twoism/pathy) library.
224
224
 
225
225
  ``` ruby
226
- describe "as_json" do
226
+ describe 'as_json' do
227
227
  before :each do
228
- person = Person.create!({ :first => "John", :last => "Doe" })
228
+ person = Person.create!(first: 'John', last: 'Doe')
229
229
  end
230
- it "returns name" do
230
+ it 'returns name' do
231
231
  get "/api/person/#{person.id}"
232
- response.body.at_json_path("name").should == "John Doe"
232
+ expect(response.body.at_json_path('name')).to eql 'John Doe'
233
233
  end
234
234
  end
235
235
  ```
@@ -240,24 +240,24 @@ Testing Cache Invalidation
240
240
  Cache is invalidated by calling `:expire_cached_json` on an instance.
241
241
 
242
242
  ``` ruby
243
- describe "updating a person" do
243
+ describe 'updating a person' do
244
244
  before :each
245
- @person = Person.create!({ :name => "John Doe" })
245
+ @person = Person.create!(name: 'John Doe')
246
246
  end
247
- it "invalidates cache" do
248
- @person.should_receive :expire_cached_json
249
- @person.update_attributes!({ :name => "updated" }
247
+ it 'invalidates cache' do
248
+ expect(@person).to receive(:expire_cached_json)
249
+ @person.update_attributes!(name: 'updated')
250
250
  end
251
251
  end
252
252
  ```
253
- You may also want to use [this RSpec matcher](https://github.com/dblock/mongoid-cached-json/blob/master/spec/support/matchers/invalidate.rb).
253
+ You may also want to use [this RSpec matcher](spec/support/matchers/invalidate.rb).
254
254
 
255
255
  ```ruby
256
- describe "updating a person" do
257
- it "invalidates cache" do
258
- lambda {
259
- @person.update_attributes!({ :name => "updated" }
260
- }.should invalidate @person
256
+ describe 'updating a person' do
257
+ it 'invalidates cache' do
258
+ expect do
259
+ @person.update_attributes!(name: 'updated')
260
+ end.to invalidate @person
261
261
  end
262
262
  end
263
263
  ```
@@ -278,14 +278,11 @@ Various cache stores, including Memcached, support bulk read operations. The [Da
278
278
  Contributing
279
279
  ------------
280
280
 
281
- * Fork the project.
282
- * Make your feature addition or bug fix with tests.
283
- * Don't forget to update `CHANGELOG.md`.
284
- * Send a pull request. Bonus points for topic branches.
281
+ See [CONTRIBUTING](CONTRIBUTING.md).
285
282
 
286
283
  Copyright and License
287
284
  ---------------------
288
285
 
289
286
  MIT License, see [LICENSE](https://github.com/dblock/mongoid-cached-json/blob/master/LICENSE.md) for details.
290
287
 
291
- (c) 2012 [Art.sy Inc.](http://artsy.github.com) and [Contributors](https://github.com/dblock/mongoid-cached-json/blob/master/CHANGELOG.md)
288
+ (c) 2012-2014 [Artsy](https://artsy.net) and [Contributors](CHANGELOG.md)