cached_at 0.0.1 → 0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b1253fed9c1d3d09be31eb8c020547d0457f3b7
4
- data.tar.gz: 8fbc50fb8c8c3e2baa3268c4c4245319793bfc0c
3
+ metadata.gz: 0d073e4785a832e81ac169d68ada7c955ca1c8e8
4
+ data.tar.gz: 9b8b06f0c202052174deee91e542114f76eafed9
5
5
  SHA512:
6
- metadata.gz: c858b0d99ce82233306a5342c10053350fbac67364c89a4384711c9827925bd8699917858e1307577469629b51af4bf6afe7717a4bf173db2da0fc2b7c7aac35
7
- data.tar.gz: 82cac81a5325d5a27f88e3de960e99b6e6be1f35b7b18df5e191b563517bdeaf3920b360ee6afe9fbd0477a7b79d09b67d64c54e1f84b8d443f80c58a03e6a89
6
+ metadata.gz: 27194ed3a1eecbc22ecb0167c69710a77156791ee73d7318af4314aeec208b72447a4907efc2717ea5a3d0bab6ed034c3c8426b6dfb702e3fe52ffac150ebd5e
7
+ data.tar.gz: 7cda8cb407d51f94303ac1020b0678f4d5df6fc2cc46a32daea14b25423458d8c40d6f91e7a216c64e39fb59e4f3b432cd45a606abdaf595cffcbddedcedfad9
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![Build Status](https://api.travis-ci.org/delwyn/cached_at.png?branch=master)](http://travis-ci.org/delwyn/cached_at)
4
4
  [![Code Climate](https://codeclimate.com/github/delwyn/cached_at.png)](https://codeclimate.com/github/delwyn/cached_at)
5
5
 
6
- TODO: Write a gem description
6
+ Use cached_at for ActiveRecord cache key instead of updated at
7
7
 
8
8
  ## Installation
9
9
 
@@ -20,12 +20,45 @@ Or install it yourself as:
20
20
  $ gem install cached_at
21
21
 
22
22
  ## Usage
23
- Too add to any class, just include CachedAt. The cache_at column will be update when a record is created or updated.
23
+ Too add to any class, just include CachedAt
24
24
 
25
25
  class User
26
26
  include CachedAt
27
27
  end
28
28
 
29
+ You will need to add the cached_at column to the table
30
+
31
+ rails generate migration add_cached_at_to_users cached_at:datetime
32
+
33
+ The cache_at column will be update when a record is created or updated.
34
+
35
+ user = User.create # sets the cached_at
36
+ user.save # updates cached_at if another attribute on the record has changed
37
+
38
+ When a records associations are created/updated, the cached_at column will be updated but the updated_at will not change.
39
+
40
+ class Post
41
+ belongs_to :user, touch: true
42
+ end
43
+
44
+ post = Post.create user: user # updates the user cached_at
45
+
46
+ Gem also provides class method `cache_key` for your model, that
47
+ will generate cache key string from `maximum(:cached_at)`
48
+
49
+ Post.cache_key
50
+ # SELECT MAX(`posts`.`cached_at`) AS max_id FROM `posts`
51
+ # => "Post-1377768216"
52
+
53
+ This way you can pass your model class to `Rails.cache.fetch` as an
54
+ argument to monitor when any record was changed.
55
+
56
+ Rails.cache.fetch [Post, 'last_posts'] do
57
+ Post.last_posts
58
+ end
59
+ # => Cache fetch_hit: Post-1377768216/last_posts
60
+
61
+
29
62
  ## Contributing
30
63
 
31
64
  1. Fork it
data/cached_at.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["delwyn.d@gmail.com"]
11
11
  spec.description = %q{Use cached_at for ActiveRecord cache key}
12
12
  spec.summary = %q{Use cached_at for ActiveRecord cache key instead of updated at}
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/delwyn/cached_at"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
data/lib/cached_at.rb CHANGED
@@ -4,6 +4,7 @@ module CachedAt
4
4
  def self.included(klass)
5
5
  klass.instance_eval do
6
6
  before_save :_set_cached_at
7
+ klass.extend ClassMethods
7
8
  end
8
9
  end
9
10
 
@@ -23,6 +24,12 @@ module CachedAt
23
24
  update_column :cached_at, current_time_from_proper_timezone
24
25
  end
25
26
 
27
+ module ClassMethods
28
+ def cache_key
29
+ "#{model_name}-#{maximum(:cached_at).to_i}"
30
+ end
31
+ end
32
+
26
33
  private
27
34
  def _set_cached_at
28
35
  self.cached_at = current_time_from_proper_timezone if new_record? || self.changed?
@@ -1,3 +1,3 @@
1
1
  module CachedAt
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -94,4 +94,15 @@ describe 'Cached At' do
94
94
  end
95
95
  end
96
96
  end
97
+
98
+ describe 'Model.cache_key' do
99
+ subject { User.cache_key }
100
+
101
+ it { subject.must_equal "User-#{User.maximum(:cached_at).to_i}" }
102
+
103
+ context 'when no record exist' do
104
+ before { User.destroy_all }
105
+ it { subject.must_equal "User-0" }
106
+ end
107
+ end
97
108
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cached_at
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delwyn de Villiers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-22 00:00:00.000000000 Z
11
+ date: 2013-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -97,7 +97,7 @@ files:
97
97
  - lib/cached_at/version.rb
98
98
  - test/cached_at_test.rb
99
99
  - test/test_helper.rb
100
- homepage: ''
100
+ homepage: https://github.com/delwyn/cached_at
101
101
  licenses:
102
102
  - MIT
103
103
  metadata: {}
@@ -124,3 +124,4 @@ summary: Use cached_at for ActiveRecord cache key instead of updated at
124
124
  test_files:
125
125
  - test/cached_at_test.rb
126
126
  - test/test_helper.rb
127
+ has_rdoc: