activerecord_cache 0.0.8 → 0.0.9

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: baa22db3b8750b7947bd677289e81ecb0677ff1e
4
- data.tar.gz: ef6677ee5427142f05ec4c37ec0188996c6bfbe9
3
+ metadata.gz: fecb86dd42b882d6a12115f86055b869d3df8e5b
4
+ data.tar.gz: 3045d66663380cb8c03727af1a22c90e57858aa5
5
5
  SHA512:
6
- metadata.gz: e1a5034b7df686f09ffcd126e09f1aaaa12d78a2e1b0e083a1f855e6d384b12f2a841c96c64849b69d6f443633347796c829211c101c5c57abbfdfbfa43c989c
7
- data.tar.gz: 63e41cb10b232e2c445d6452411b0a4f11162f17c0cf33766db11d6cf048eb293cb41bbf61005d0615e37e5e5a8ba8eb4ebcaee20fa5f5dd975c444fca9abfb3
6
+ metadata.gz: ba80e163493cda91b090529fd1d1b81f27d7fc21fa4e99e77bcf8dd010b8592c0c2ddf45391022f1de9ef0aa19bd1b7293bd33eba0146e68720c463d2f538605
7
+ data.tar.gz: 928688eaed5dc868736abf2c02504996a4dee9da9c77a5364784436a50de61c14de030bafb16a4c6e7c998fa31132a694c8ed355d0e200ca9f2a91634e73d4ca
data/Gemfile.lock CHANGED
@@ -1,33 +1,33 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activerecord_cache (0.0.8)
4
+ activerecord_cache (0.0.9)
5
5
  rails (~> 4.0)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- actionmailer (4.1.4)
11
- actionpack (= 4.1.4)
12
- actionview (= 4.1.4)
10
+ actionmailer (4.1.5)
11
+ actionpack (= 4.1.5)
12
+ actionview (= 4.1.5)
13
13
  mail (~> 2.5.4)
14
- actionpack (4.1.4)
15
- actionview (= 4.1.4)
16
- activesupport (= 4.1.4)
14
+ actionpack (4.1.5)
15
+ actionview (= 4.1.5)
16
+ activesupport (= 4.1.5)
17
17
  rack (~> 1.5.2)
18
18
  rack-test (~> 0.6.2)
19
- actionview (4.1.4)
20
- activesupport (= 4.1.4)
19
+ actionview (4.1.5)
20
+ activesupport (= 4.1.5)
21
21
  builder (~> 3.1)
22
22
  erubis (~> 2.7.0)
23
- activemodel (4.1.4)
24
- activesupport (= 4.1.4)
23
+ activemodel (4.1.5)
24
+ activesupport (= 4.1.5)
25
25
  builder (~> 3.1)
26
- activerecord (4.1.4)
27
- activemodel (= 4.1.4)
28
- activesupport (= 4.1.4)
26
+ activerecord (4.1.5)
27
+ activemodel (= 4.1.5)
28
+ activesupport (= 4.1.5)
29
29
  arel (~> 5.0.0)
30
- activesupport (4.1.4)
30
+ activesupport (4.1.5)
31
31
  i18n (~> 0.6, >= 0.6.9)
32
32
  json (~> 1.7, >= 1.7.7)
33
33
  minitest (~> 5.1)
@@ -46,7 +46,7 @@ GEM
46
46
  treetop (~> 1.4.8)
47
47
  metaclass (0.0.4)
48
48
  mime-types (1.25.1)
49
- minitest (5.4.0)
49
+ minitest (5.4.2)
50
50
  mocha (0.14.0)
51
51
  metaclass (~> 0.0.1)
52
52
  multi_json (1.10.1)
@@ -54,19 +54,19 @@ GEM
54
54
  rack (1.5.2)
55
55
  rack-test (0.6.2)
56
56
  rack (>= 1.0)
57
- rails (4.1.4)
58
- actionmailer (= 4.1.4)
59
- actionpack (= 4.1.4)
60
- actionview (= 4.1.4)
61
- activemodel (= 4.1.4)
62
- activerecord (= 4.1.4)
63
- activesupport (= 4.1.4)
57
+ rails (4.1.5)
58
+ actionmailer (= 4.1.5)
59
+ actionpack (= 4.1.5)
60
+ actionview (= 4.1.5)
61
+ activemodel (= 4.1.5)
62
+ activerecord (= 4.1.5)
63
+ activesupport (= 4.1.5)
64
64
  bundler (>= 1.3.0, < 2.0)
65
- railties (= 4.1.4)
65
+ railties (= 4.1.5)
66
66
  sprockets-rails (~> 2.0)
67
- railties (4.1.4)
68
- actionpack (= 4.1.4)
69
- activesupport (= 4.1.4)
67
+ railties (4.1.5)
68
+ actionpack (= 4.1.5)
69
+ activesupport (= 4.1.5)
70
70
  rake (>= 0.8.7)
71
71
  thor (>= 0.18.1, < 2.0)
72
72
  rake (10.3.2)
@@ -75,7 +75,7 @@ GEM
75
75
  multi_json (~> 1.0)
76
76
  rack (~> 1.0)
77
77
  tilt (~> 1.1, != 1.3.0)
78
- sprockets-rails (2.1.3)
78
+ sprockets-rails (2.1.4)
79
79
  actionpack (>= 3.0)
80
80
  activesupport (>= 3.0)
81
81
  sprockets (~> 2.8)
@@ -86,7 +86,7 @@ GEM
86
86
  treetop (1.4.15)
87
87
  polyglot
88
88
  polyglot (>= 0.3.1)
89
- tzinfo (1.2.1)
89
+ tzinfo (1.2.2)
90
90
  thread_safe (~> 0.1)
91
91
 
92
92
  PLATFORMS
@@ -5,7 +5,6 @@ require File.join(File.dirname(__FILE__), 'activerecord_cache/base')
5
5
  require File.join(File.dirname(__FILE__), 'activerecord_cache/finder_methods')
6
6
  require File.join(File.dirname(__FILE__), 'activerecord_cache/belongs_to_association')
7
7
  require File.join(File.dirname(__FILE__), 'activerecord_cache/belongs_to_preloader')
8
- require File.join(File.dirname(__FILE__), 'activerecord_cache/relation')
9
8
  require File.join(File.dirname(__FILE__), 'activerecord_cache/errors')
10
9
 
11
10
  require 'activerecord_cache/railtie.rb' if defined?(Rails)
@@ -32,7 +32,15 @@ module ActiveRecordCache
32
32
  raise ActiveRecordCache::CacheNotEnabled, message
33
33
  end
34
34
 
35
- Rails.cache.read(cache_key(id)) || where(primary_key => id).first
35
+ record = Rails.cache.read(cache_key(id))
36
+
37
+ unless record
38
+ # use where to bypass cached finders
39
+ record = where(primary_key => id).first
40
+ record.write_to_cache if record
41
+ end
42
+
43
+ record
36
44
  end
37
45
 
38
46
  def find_some_through_cache(ids)
@@ -53,7 +61,12 @@ module ActiveRecordCache
53
61
  end
54
62
 
55
63
  if cache_misses.present?
56
- records += where(primary_key => cache_misses).load
64
+ # use where to bypass cached finders
65
+ loaded_records = where(primary_key => cache_misses).load
66
+
67
+ loaded_records.each(&:write_to_cache)
68
+
69
+ records += loaded_records
57
70
  end
58
71
 
59
72
  records
@@ -14,7 +14,7 @@ module ActiveRecordCache
14
14
 
15
15
  results = find_some_through_cache(ids)
16
16
 
17
- raise_record_not_found_exception!(ids, result.size, ids.size) unless results.size == ids.size
17
+ raise_record_not_found_exception!(ids, results.size, ids.size) unless results.size == ids.size
18
18
 
19
19
  results
20
20
  end
@@ -8,7 +8,6 @@ class ActiveRecordCache::Railtie < Rails::Railtie
8
8
  ActiveRecord::Base.send(:include, ActiveRecordCache::Base)
9
9
  ActiveRecord::Associations::BelongsToAssociation.send(:include, ActiveRecordCache::BelongsToAssociation)
10
10
  ActiveRecord::Associations::Preloader::BelongsTo.send(:include, ActiveRecordCache::BelongsToPreloader)
11
- ActiveRecord::Relation.send(:include, ActiveRecordCache::Relation)
12
11
 
13
12
  # FinderMethods only gets included in ActiveRecord::Relation, so extend it there.
14
13
  # This gets around some headaches caused by extending modules already included in other classes.
@@ -2,7 +2,7 @@ module ActiveRecordCache
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 8
5
+ TINY = 9
6
6
  PRE = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
@@ -14,18 +14,33 @@ class ActiveRecordCacheTest < ActiveSupport::TestCase
14
14
  CachedRecord.find(1, 2)
15
15
  end
16
16
 
17
- test "loading all records should persist them to the cache" do
18
- Rails.cache.expects(:write).twice
17
+ test "loading all records should NOT persist them to the cache" do
18
+ Rails.cache.expects(:write).never
19
19
  CachedRecord.all.load
20
20
  end
21
21
 
22
- test "loading records using a where should persist them to the cache" do
23
- Rails.cache.expects(:write).once
22
+ test "loading records using a where should NOT persist them to the cache" do
23
+ Rails.cache.expects(:write).never
24
24
  CachedRecord.where(:name => 'John').load
25
25
  end
26
26
 
27
27
 
28
28
 
29
+ # Errors should still be raised
30
+ test "loading missing records should still throw errors" do
31
+ bogus_id = 12345
32
+
33
+ assert_raises ActiveRecord::RecordNotFound do
34
+ CachedRecord.find(bogus_id)
35
+ end
36
+
37
+ assert_raises ActiveRecord::RecordNotFound do
38
+ CachedRecord.find([1, bogus_id])
39
+ end
40
+ end
41
+
42
+
43
+
29
44
  # Finders should use the cache
30
45
  test "#find(id) should use the cache" do
31
46
  cache_records(1)
@@ -62,6 +77,15 @@ class ActiveRecordCacheTest < ActiveSupport::TestCase
62
77
  assert records.empty?, 'should not find cached record'
63
78
  end
64
79
 
80
+ # where + id gets treated like a complex query
81
+ test "#where(:id => id) does NOT use the cache" do
82
+ cache_records(1)
83
+
84
+ assert_query_count 1 do
85
+ records = CachedRecord.where(:id => 1).load
86
+ end
87
+ end
88
+
65
89
  test "#select(:id) should NOT use the cache" do
66
90
  cache_records(1)
67
91
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Doan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-15 00:00:00.000000000 Z
11
+ date: 2014-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -44,7 +44,6 @@ files:
44
44
  - lib/activerecord_cache/errors.rb
45
45
  - lib/activerecord_cache/finder_methods.rb
46
46
  - lib/activerecord_cache/railtie.rb
47
- - lib/activerecord_cache/relation.rb
48
47
  - lib/activerecord_cache/version.rb
49
48
  - test/activerecord_cache_test.rb
50
49
  - test/dummy/README.rdoc
@@ -115,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
114
  version: '0'
116
115
  requirements: []
117
116
  rubyforge_project:
118
- rubygems_version: 2.2.0
117
+ rubygems_version: 2.2.2
119
118
  signing_key:
120
119
  specification_version: 4
121
120
  summary: A basic caching plugin for ActiveRecord
@@ -1,16 +0,0 @@
1
- module ActiveRecordCache
2
- module Relation
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- alias_method_chain :exec_queries, :caching
7
- end
8
-
9
- def exec_queries_with_caching
10
- records = exec_queries_without_caching
11
- records.each(&:write_to_cache) if @klass.use_activerecord_cache && select_values.empty?
12
-
13
- records
14
- end
15
- end
16
- end