identity_cache 0.0.4 → 0.0.5
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 +5 -13
- data/.gitignore +1 -1
- data/.ruby-version +1 -0
- data/.travis.yml +6 -2
- data/Gemfile +3 -0
- data/Gemfile.rails4 +8 -0
- data/README.md +2 -1
- data/identity_cache.gemspec +2 -6
- data/lib/identity_cache.rb +9 -1
- data/lib/identity_cache/belongs_to_caching.rb +1 -1
- data/lib/identity_cache/cache_key_generation.rb +13 -4
- data/lib/identity_cache/configuration_dsl.rb +6 -6
- data/lib/identity_cache/query_api.rb +21 -10
- data/lib/identity_cache/version.rb +1 -1
- data/performance/cache_runner.rb +14 -15
- data/test/attribute_cache_test.rb +29 -8
- data/test/cache_fetch_includes_test.rb +25 -25
- data/test/denormalized_has_many_test.rb +15 -13
- data/test/denormalized_has_one_test.rb +22 -16
- data/test/fetch_multi_test.rb +28 -28
- data/test/fetch_multi_with_batched_associations_test.rb +56 -56
- data/test/fetch_test.rb +38 -30
- data/test/fixtures/serialized_record +0 -0
- data/test/helpers/active_record_objects.rb +28 -24
- data/test/helpers/database_connection.rb +5 -5
- data/test/helpers/serialization_format.rb +7 -7
- data/test/index_cache_test.rb +23 -24
- data/test/memoized_cache_proxy_test.rb +5 -0
- data/test/normalized_belongs_to_test.rb +15 -15
- data/test/normalized_has_many_test.rb +28 -23
- data/test/recursive_denormalized_has_many_test.rb +14 -14
- data/test/save_test.rb +18 -18
- data/test/schema_change_test.rb +26 -13
- metadata +26 -60
@@ -3,9 +3,9 @@ require "test_helper"
|
|
3
3
|
class NormalizedHasManyTest < IdentityCache::TestCase
|
4
4
|
def setup
|
5
5
|
super
|
6
|
-
|
6
|
+
Item.cache_has_many :associated_records, :embed => false
|
7
7
|
|
8
|
-
@record =
|
8
|
+
@record = Item.new(:title => 'foo')
|
9
9
|
@record.not_cached_records << NotCachedRecord.new(:name => 'NoCache')
|
10
10
|
@record.associated_records << AssociatedRecord.new(:name => 'bar')
|
11
11
|
@record.associated_records << AssociatedRecord.new(:name => 'baz')
|
@@ -18,13 +18,13 @@ class NormalizedHasManyTest < IdentityCache::TestCase
|
|
18
18
|
def test_a_records_list_of_associated_ids_on_the_parent_record_retains_association_sort_order
|
19
19
|
assert_equal [2, 1], @record.associated_record_ids
|
20
20
|
|
21
|
-
AssociatedRecord.create(name: 'foo',
|
21
|
+
AssociatedRecord.create(name: 'foo', item_id: @record.id)
|
22
22
|
@record.reload
|
23
23
|
assert_equal [3, 2, 1], @record.associated_record_ids
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_defining_a_denormalized_has_many_cache_caches_the_list_of_associated_ids_on_the_parent_record_during_cache_miss
|
27
|
-
fetched_record =
|
27
|
+
fetched_record = Item.fetch(@record.id)
|
28
28
|
assert_equal [2, 1], fetched_record.cached_associated_record_ids
|
29
29
|
assert_equal false, fetched_record.associated_records.loaded?
|
30
30
|
end
|
@@ -34,7 +34,7 @@ class NormalizedHasManyTest < IdentityCache::TestCase
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_fetching_associated_ids_will_use_the_cached_value_if_the_record_is_from_the_cache
|
37
|
-
@record =
|
37
|
+
@record = Item.fetch(@record.id)
|
38
38
|
assert_queries(0) do
|
39
39
|
assert_equal [2, 1], @record.fetch_associated_record_ids
|
40
40
|
end
|
@@ -50,24 +50,24 @@ class NormalizedHasManyTest < IdentityCache::TestCase
|
|
50
50
|
|
51
51
|
def test_fetching_the_association_from_a_record_on_a_cache_hit_should_not_issue_any_queries
|
52
52
|
# Populate the cache
|
53
|
-
@record =
|
53
|
+
@record = Item.fetch(@record.id)
|
54
54
|
@record.fetch_associated_records
|
55
55
|
assert_queries(0) do
|
56
|
-
@record =
|
56
|
+
@record = Item.fetch(@record.id)
|
57
57
|
assert_equal [@baz, @bar], @record.fetch_associated_records
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
def test_fetching_the_association_from_a_identity_cached_record_should_not_re_fetch_the_association_ids
|
62
|
-
@record =
|
62
|
+
@record = Item.fetch(@record.id)
|
63
63
|
@record.expects(:associated_record_ids).never
|
64
64
|
assert_equal [@baz, @bar], @record.fetch_associated_records
|
65
65
|
end
|
66
66
|
|
67
67
|
def test_fetching_the_association_should_delegate_to_the_normal_association_fetcher_if_any_transaction_are_open
|
68
|
-
@record =
|
68
|
+
@record = Item.fetch(@record.id)
|
69
69
|
|
70
|
-
|
70
|
+
Item.expects(:fetch_multi).never
|
71
71
|
@record.transaction do
|
72
72
|
assert_equal [@baz, @bar], @record.fetch_associated_records
|
73
73
|
end
|
@@ -77,55 +77,60 @@ class NormalizedHasManyTest < IdentityCache::TestCase
|
|
77
77
|
# Warm the ActiveRecord association
|
78
78
|
@record.associated_records.to_a
|
79
79
|
|
80
|
-
|
80
|
+
Item.expects(:fetch_multi).never
|
81
81
|
assert_equal [@baz, @bar], @record.fetch_associated_records
|
82
82
|
end
|
83
83
|
|
84
84
|
def test_saving_a_child_record_shouldnt_expire_the_parents_blob_if_the_foreign_key_hasnt_changed
|
85
85
|
IdentityCache.cache.expects(:delete).with(@record.primary_cache_index_key).never
|
86
|
+
IdentityCache.cache.expects(:delete).with(@baz.primary_cache_index_key)
|
86
87
|
@baz.name = 'foo'
|
87
88
|
@baz.save!
|
88
|
-
assert_equal [@baz.id, @bar.id],
|
89
|
-
assert_equal [@baz, @bar],
|
89
|
+
assert_equal [@baz.id, @bar.id], Item.fetch(@record.id).cached_associated_record_ids
|
90
|
+
assert_equal [@baz, @bar], Item.fetch(@record.id).fetch_associated_records
|
90
91
|
end
|
91
92
|
|
92
93
|
def test_creating_a_child_record_should_expire_the_parents_cache_blob
|
93
94
|
IdentityCache.cache.expects(:delete).with(@record.primary_cache_index_key).once
|
95
|
+
IdentityCache.cache.expects(:delete).with(@bar.primary_cache_index_key[0...-1] + '3')
|
94
96
|
@qux = @record.associated_records.create!(:name => 'qux')
|
95
|
-
assert_equal [@qux, @baz, @bar],
|
97
|
+
assert_equal [@qux, @baz, @bar], Item.fetch(@record.id).fetch_associated_records
|
96
98
|
end
|
97
|
-
|
99
|
+
|
98
100
|
def test_saving_a_child_record_should_expire_the_new_and_old_parents_cache_blob
|
99
|
-
@new_record =
|
100
|
-
@baz.
|
101
|
+
@new_record = Item.create
|
102
|
+
@baz.item_id = @new_record.id
|
101
103
|
|
102
104
|
IdentityCache.cache.expects(:delete).with(@record.primary_cache_index_key).once
|
103
105
|
IdentityCache.cache.expects(:delete).with(@new_record.primary_cache_index_key).once
|
106
|
+
IdentityCache.cache.expects(:delete).with(@baz.primary_cache_index_key).once
|
104
107
|
|
105
108
|
@baz.save!
|
106
109
|
|
107
|
-
assert_equal [@bar.id],
|
108
|
-
assert_equal [@bar],
|
110
|
+
assert_equal [@bar.id], Item.fetch(@record.id).cached_associated_record_ids
|
111
|
+
assert_equal [@bar], Item.fetch(@record.id).fetch_associated_records
|
109
112
|
end
|
110
113
|
|
111
114
|
def test_saving_a_child_record_in_a_transaction_should_expire_the_new_and_old_parents_cache_blob
|
112
|
-
@new_record =
|
113
|
-
@baz.
|
115
|
+
@new_record = Item.create
|
116
|
+
@baz.item_id = @new_record.id
|
114
117
|
|
115
118
|
@baz.transaction do
|
116
119
|
IdentityCache.cache.expects(:delete).with(@record.primary_cache_index_key).once
|
117
120
|
IdentityCache.cache.expects(:delete).with(@new_record.primary_cache_index_key).once
|
121
|
+
IdentityCache.cache.expects(:delete).with(@baz.primary_cache_index_key).once
|
118
122
|
|
119
123
|
@baz.save!
|
120
124
|
@baz.reload
|
121
125
|
end
|
122
126
|
|
123
|
-
assert_equal [@bar.id],
|
124
|
-
assert_equal [@bar],
|
127
|
+
assert_equal [@bar.id], Item.fetch(@record.id).cached_associated_record_ids
|
128
|
+
assert_equal [@bar], Item.fetch(@record.id).fetch_associated_records
|
125
129
|
end
|
126
130
|
|
127
131
|
def test_destroying_a_child_record_should_expire_the_parents_cache_blob
|
128
132
|
IdentityCache.cache.expects(:delete).with(@record.primary_cache_index_key).once
|
133
|
+
IdentityCache.cache.expects(:delete).with(@baz.primary_cache_index_key).once
|
129
134
|
@baz.destroy
|
130
135
|
assert_equal [@bar], @record.reload.fetch_associated_records
|
131
136
|
end
|
@@ -4,10 +4,10 @@ class RecursiveDenormalizedHasManyTest < IdentityCache::TestCase
|
|
4
4
|
def setup
|
5
5
|
super
|
6
6
|
AssociatedRecord.cache_has_many :deeply_associated_records, :embed => true
|
7
|
-
|
8
|
-
|
7
|
+
Item.cache_has_many :associated_records, :embed => true
|
8
|
+
Item.cache_has_one :associated
|
9
9
|
|
10
|
-
@record =
|
10
|
+
@record = Item.new(:title => 'foo')
|
11
11
|
|
12
12
|
@associated_record = AssociatedRecord.new(:name => 'bar')
|
13
13
|
@record.associated_records << AssociatedRecord.new(:name => 'baz')
|
@@ -23,17 +23,17 @@ class RecursiveDenormalizedHasManyTest < IdentityCache::TestCase
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_cache_fetch_includes
|
26
|
-
assert_equal [{:associated_records => [:deeply_associated_records]}, :associated => [:deeply_associated_records]],
|
26
|
+
assert_equal [{:associated_records => [:deeply_associated_records]}, :associated => [:deeply_associated_records]], Item.cache_fetch_includes
|
27
27
|
end
|
28
28
|
|
29
29
|
def test_uncached_record_from_the_db_will_use_normal_association_for_deeply_associated_records
|
30
30
|
expected = @associated_record.deeply_associated_records
|
31
|
-
record_from_db =
|
31
|
+
record_from_db = Item.find(@record.id)
|
32
32
|
assert_equal expected, record_from_db.fetch_associated_records[0].fetch_deeply_associated_records
|
33
33
|
end
|
34
34
|
|
35
35
|
def test_on_cache_miss_record_should_embed_associated_objects_and_return
|
36
|
-
record_from_cache_miss =
|
36
|
+
record_from_cache_miss = Item.fetch(@record.id)
|
37
37
|
expected = @associated_record.deeply_associated_records
|
38
38
|
|
39
39
|
child_record_from_cache_miss = record_from_cache_miss.fetch_associated_records[0]
|
@@ -42,13 +42,13 @@ class RecursiveDenormalizedHasManyTest < IdentityCache::TestCase
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def test_on_cache_hit_record_should_return_embed_associated_objects
|
45
|
-
|
45
|
+
Item.fetch(@record.id) # warm cache
|
46
46
|
expected = @associated_record.deeply_associated_records
|
47
47
|
|
48
|
-
|
48
|
+
Item.any_instance.expects(:associated_records).never
|
49
49
|
AssociatedRecord.any_instance.expects(:deeply_associated_records).never
|
50
50
|
|
51
|
-
record_from_cache_hit =
|
51
|
+
record_from_cache_hit = Item.fetch(@record.id)
|
52
52
|
child_record_from_cache_hit = record_from_cache_hit.fetch_associated_records[0]
|
53
53
|
assert_equal @associated_record, child_record_from_cache_hit
|
54
54
|
assert_equal expected, child_record_from_cache_hit.fetch_deeply_associated_records
|
@@ -61,7 +61,7 @@ class RecursiveDenormalizedHasManyTest < IdentityCache::TestCase
|
|
61
61
|
# one for the mid level has_one association
|
62
62
|
# one for the deep level level has_many on the mid level has_many association
|
63
63
|
# one for the deep level level has_many on the mid level has_one association
|
64
|
-
record_from_cache_miss =
|
64
|
+
record_from_cache_miss = Item.fetch(@record.id)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -94,16 +94,16 @@ class RecursiveNormalizedHasManyTest < IdentityCache::TestCase
|
|
94
94
|
def setup
|
95
95
|
super
|
96
96
|
AssociatedRecord.cache_has_many :deeply_associated_records, :embed => true
|
97
|
-
|
97
|
+
Item.cache_has_many :associated_records, :embed => false
|
98
98
|
|
99
|
-
@record =
|
99
|
+
@record = Item.new(:title => 'foo')
|
100
100
|
@record.save
|
101
101
|
@record.reload
|
102
102
|
end
|
103
103
|
|
104
104
|
def test_cache_repopulation_should_not_fetch_non_embedded_associations
|
105
|
-
|
106
|
-
record_from_cache_miss =
|
105
|
+
Item.any_instance.expects(:fetch_associated_records).never
|
106
|
+
record_from_cache_miss = Item.fetch(@record.id)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
data/test/save_test.rb
CHANGED
@@ -5,32 +5,32 @@ class SaveTest < IdentityCache::TestCase
|
|
5
5
|
|
6
6
|
def setup
|
7
7
|
super
|
8
|
-
|
9
|
-
|
8
|
+
Item.cache_index :title, :unique => true
|
9
|
+
Item.cache_index :id, :title, :unique => true
|
10
10
|
|
11
|
-
@record =
|
12
|
-
@blob_key = "#{NAMESPACE}blob:
|
11
|
+
@record = Item.create(:title => 'bob')
|
12
|
+
@blob_key = "#{NAMESPACE}blob:Item:#{cache_hash("created_at:datetime,id:integer,item_id:integer,title:string,updated_at:datetime")}:1"
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_create
|
16
|
-
@record =
|
16
|
+
@record = Item.new
|
17
17
|
@record.title = 'bob'
|
18
18
|
|
19
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
20
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
21
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}blob:
|
19
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('2/bob')}")
|
20
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
|
21
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}blob:Item:#{cache_hash("created_at:datetime,id:integer,item_id:integer,title:string,updated_at:datetime")}:2").once
|
22
22
|
@record.save
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_update
|
26
26
|
# Regular flow, write index id, write index id/tile, delete data blob since Record has changed
|
27
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
28
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
27
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/fred')}")
|
28
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('fred')}")
|
29
29
|
IdentityCache.cache.expects(:delete).with(@blob_key)
|
30
30
|
|
31
31
|
# Delete index id, delete index id/title
|
32
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
33
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
32
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
|
33
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
|
34
34
|
|
35
35
|
@record.title = 'fred'
|
36
36
|
@record.save
|
@@ -38,8 +38,8 @@ class SaveTest < IdentityCache::TestCase
|
|
38
38
|
|
39
39
|
def test_destroy
|
40
40
|
# Regular flow: delete data blob, delete index id, delete index id/tile
|
41
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
42
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
41
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
|
42
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
|
43
43
|
IdentityCache.cache.expects(:delete).with(@blob_key)
|
44
44
|
|
45
45
|
@record.destroy
|
@@ -47,8 +47,8 @@ class SaveTest < IdentityCache::TestCase
|
|
47
47
|
|
48
48
|
def test_destroy_with_changed_attributes
|
49
49
|
# Make sure to delete the old cache index key, since the new title never ended up in an index
|
50
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
51
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
50
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
|
51
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
|
52
52
|
IdentityCache.cache.expects(:delete).with(@blob_key)
|
53
53
|
|
54
54
|
@record.title = 'fred'
|
@@ -57,8 +57,8 @@ class SaveTest < IdentityCache::TestCase
|
|
57
57
|
|
58
58
|
def test_touch_will_expire_the_caches
|
59
59
|
# Regular flow: delete data blob, delete index id, delete index id/tile
|
60
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
61
|
-
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:
|
60
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:id/title:#{cache_hash('1/bob')}")
|
61
|
+
IdentityCache.cache.expects(:delete).with("#{NAMESPACE}index:Item:title:#{cache_hash('bob')}")
|
62
62
|
IdentityCache.cache.expects(:delete).with(@blob_key)
|
63
63
|
|
64
64
|
@record.touch
|
data/test/schema_change_test.rb
CHANGED
@@ -18,14 +18,14 @@ class SchemaChangeTest < IdentityCache::TestCase
|
|
18
18
|
ActiveRecord::Migration.verbose = false
|
19
19
|
|
20
20
|
read_new_schema
|
21
|
-
|
21
|
+
Item.cache_has_one :associated, :embed => true
|
22
22
|
AssociatedRecord.cache_has_many :deeply_associated_records, :embed => true
|
23
23
|
|
24
24
|
@associated_record = AssociatedRecord.new(:name => 'bar')
|
25
25
|
@deeply_associated_record = DeeplyAssociatedRecord.new(:name => "corge")
|
26
26
|
@associated_record.deeply_associated_records << @deeply_associated_record
|
27
27
|
@associated_record.deeply_associated_records << DeeplyAssociatedRecord.new(:name => "qux")
|
28
|
-
@record =
|
28
|
+
@record = Item.new(:title => 'foo')
|
29
29
|
@record.associated = @associated_record
|
30
30
|
|
31
31
|
@associated_record.save!
|
@@ -46,39 +46,52 @@ class SchemaChangeTest < IdentityCache::TestCase
|
|
46
46
|
DeeplyAssociatedRecord.reset_column_information
|
47
47
|
|
48
48
|
AssociatedRecord.send(:instance_variable_set, :@rails_cache_key_prefix, nil)
|
49
|
-
|
49
|
+
Item.send(:instance_variable_set, :@rails_cache_key_prefix, nil)
|
50
50
|
end
|
51
51
|
|
52
52
|
def test_schema_changes_on_embedded_association_should_cause_cache_miss_for_old_cached_objects
|
53
|
-
record =
|
53
|
+
record = Item.fetch(@record.id)
|
54
54
|
record.fetch_associated
|
55
55
|
|
56
56
|
AddColumnToChild.new.up
|
57
57
|
read_new_schema
|
58
58
|
|
59
|
-
|
60
|
-
record =
|
59
|
+
Item.expects(:resolve_cache_miss).returns(@record)
|
60
|
+
record = Item.fetch(@record.id)
|
61
61
|
end
|
62
62
|
|
63
63
|
def test_schema_changes_on_deeply_embedded_association_should_cause_cache_miss_for_old_cached_objects
|
64
|
-
record =
|
64
|
+
record = Item.fetch(@record.id)
|
65
65
|
associated_record_from_cache = record.fetch_associated
|
66
66
|
associated_record_from_cache.fetch_deeply_associated_records
|
67
67
|
|
68
68
|
AddColumnToDeepChild.new.up
|
69
69
|
read_new_schema
|
70
70
|
|
71
|
-
|
72
|
-
record =
|
71
|
+
Item.expects(:resolve_cache_miss).returns(@record)
|
72
|
+
record = Item.fetch(@record.id)
|
73
73
|
end
|
74
74
|
|
75
75
|
def test_schema_changes_on_new_cached_child_association
|
76
|
-
record =
|
76
|
+
record = Item.fetch(@record.id)
|
77
77
|
|
78
|
-
|
78
|
+
Item.cache_has_many :polymorphic_records, :inverse_name => :owner, :embed => true
|
79
79
|
read_new_schema
|
80
80
|
|
81
|
-
|
82
|
-
record =
|
81
|
+
Item.expects(:resolve_cache_miss).returns(@record)
|
82
|
+
record = Item.fetch(@record.id)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_embed_existing_cache_has_many
|
86
|
+
Item.cache_has_many :polymorphic_records, :inverse_name => :owner, :embed => false
|
87
|
+
read_new_schema
|
88
|
+
|
89
|
+
record = Item.fetch(@record.id)
|
90
|
+
|
91
|
+
Item.cache_has_many :polymorphic_records, :inverse_name => :owner, :embed => true
|
92
|
+
read_new_schema
|
93
|
+
|
94
|
+
Item.expects(:resolve_cache_miss).returns(@record)
|
95
|
+
record = Item.fetch(@record.id)
|
83
96
|
end
|
84
97
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: identity_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Camilo Lopez
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2014-02-21 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: ar_transaction_changes
|
@@ -20,68 +20,60 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - '='
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.
|
23
|
+
version: 0.0.3
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
28
|
- - '='
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: 0.0.
|
30
|
+
version: 0.0.3
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
32
|
name: activerecord
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ">="
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 3.2
|
38
|
-
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
requirements:
|
42
|
-
- - ~>
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: 3.2.12
|
45
|
-
- !ruby/object:Gem::Dependency
|
46
|
-
name: activesupport
|
47
|
-
requirement: !ruby/object:Gem::Requirement
|
48
|
-
requirements:
|
49
|
-
- - ~>
|
37
|
+
version: '3.2'
|
38
|
+
- - "<"
|
50
39
|
- !ruby/object:Gem::Version
|
51
|
-
version:
|
40
|
+
version: '4.1'
|
52
41
|
type: :runtime
|
53
42
|
prerelease: false
|
54
43
|
version_requirements: !ruby/object:Gem::Requirement
|
55
44
|
requirements:
|
56
|
-
- -
|
45
|
+
- - ">="
|
57
46
|
- !ruby/object:Gem::Version
|
58
|
-
version: 3.2
|
47
|
+
version: '3.2'
|
48
|
+
- - "<"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '4.1'
|
59
51
|
- !ruby/object:Gem::Dependency
|
60
52
|
name: memcache-client
|
61
53
|
requirement: !ruby/object:Gem::Requirement
|
62
54
|
requirements:
|
63
|
-
- -
|
55
|
+
- - ">="
|
64
56
|
- !ruby/object:Gem::Version
|
65
57
|
version: '0'
|
66
58
|
type: :development
|
67
59
|
prerelease: false
|
68
60
|
version_requirements: !ruby/object:Gem::Requirement
|
69
61
|
requirements:
|
70
|
-
- -
|
62
|
+
- - ">="
|
71
63
|
- !ruby/object:Gem::Version
|
72
64
|
version: '0'
|
73
65
|
- !ruby/object:Gem::Dependency
|
74
66
|
name: rake
|
75
67
|
requirement: !ruby/object:Gem::Requirement
|
76
68
|
requirements:
|
77
|
-
- -
|
69
|
+
- - ">="
|
78
70
|
- !ruby/object:Gem::Version
|
79
71
|
version: '0'
|
80
72
|
type: :development
|
81
73
|
prerelease: false
|
82
74
|
version_requirements: !ruby/object:Gem::Requirement
|
83
75
|
requirements:
|
84
|
-
- -
|
76
|
+
- - ">="
|
85
77
|
- !ruby/object:Gem::Version
|
86
78
|
version: '0'
|
87
79
|
- !ruby/object:Gem::Dependency
|
@@ -98,34 +90,6 @@ dependencies:
|
|
98
90
|
- - '='
|
99
91
|
- !ruby/object:Gem::Version
|
100
92
|
version: 0.14.0
|
101
|
-
- !ruby/object:Gem::Dependency
|
102
|
-
name: debugger
|
103
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
-
requirements:
|
105
|
-
- - ! '>='
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
version: '0'
|
108
|
-
type: :development
|
109
|
-
prerelease: false
|
110
|
-
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
requirements:
|
112
|
-
- - ! '>='
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
version: '0'
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: ruby-prof
|
117
|
-
requirement: !ruby/object:Gem::Requirement
|
118
|
-
requirements:
|
119
|
-
- - ! '>='
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
version: '0'
|
122
|
-
type: :development
|
123
|
-
prerelease: false
|
124
|
-
version_requirements: !ruby/object:Gem::Requirement
|
125
|
-
requirements:
|
126
|
-
- - ! '>='
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
version: '0'
|
129
93
|
- !ruby/object:Gem::Dependency
|
130
94
|
name: cityhash
|
131
95
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,14 +108,14 @@ dependencies:
|
|
144
108
|
name: mysql2
|
145
109
|
requirement: !ruby/object:Gem::Requirement
|
146
110
|
requirements:
|
147
|
-
- -
|
111
|
+
- - ">="
|
148
112
|
- !ruby/object:Gem::Version
|
149
113
|
version: '0'
|
150
114
|
type: :development
|
151
115
|
prerelease: false
|
152
116
|
version_requirements: !ruby/object:Gem::Requirement
|
153
117
|
requirements:
|
154
|
-
- -
|
118
|
+
- - ">="
|
155
119
|
- !ruby/object:Gem::Version
|
156
120
|
version: '0'
|
157
121
|
description: Opt in read through ActiveRecord caching.
|
@@ -161,10 +125,12 @@ executables: []
|
|
161
125
|
extensions: []
|
162
126
|
extra_rdoc_files: []
|
163
127
|
files:
|
164
|
-
- .gitignore
|
165
|
-
- .
|
128
|
+
- ".gitignore"
|
129
|
+
- ".ruby-version"
|
130
|
+
- ".travis.yml"
|
166
131
|
- CHANGELOG
|
167
132
|
- Gemfile
|
133
|
+
- Gemfile.rails4
|
168
134
|
- LICENSE
|
169
135
|
- README.md
|
170
136
|
- Rakefile
|
@@ -215,17 +181,17 @@ require_paths:
|
|
215
181
|
- lib
|
216
182
|
required_ruby_version: !ruby/object:Gem::Requirement
|
217
183
|
requirements:
|
218
|
-
- -
|
184
|
+
- - ">="
|
219
185
|
- !ruby/object:Gem::Version
|
220
186
|
version: '0'
|
221
187
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
188
|
requirements:
|
223
|
-
- -
|
189
|
+
- - ">="
|
224
190
|
- !ruby/object:Gem::Version
|
225
191
|
version: '0'
|
226
192
|
requirements: []
|
227
193
|
rubyforge_project:
|
228
|
-
rubygems_version: 2.
|
194
|
+
rubygems_version: 2.2.0
|
229
195
|
signing_key:
|
230
196
|
specification_version: 4
|
231
197
|
summary: IdentityCache lets you specify how you want to cache your model objects,
|