kasket 4.0.1 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +0 -4
- data/lib/kasket.rb +0 -12
- data/lib/kasket/configuration_mixin.rb +9 -2
- data/lib/kasket/dirty_mixin.rb +8 -7
- data/lib/kasket/read_mixin.rb +18 -26
- data/lib/kasket/version.rb +2 -2
- data/lib/kasket/write_mixin.rb +14 -9
- metadata +17 -4
- data/lib/kasket/reload_association_mixin.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25efa3724a0e5b5d6b1bf69dba58de2afd6bb000
|
4
|
+
data.tar.gz: cb0b2b1b91897768971e7bfcc0299ff30254644a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b2ae0752068653cf1edaa1f17dc8ca7aee2c6d840f564134e743968fc849e72db1da4d56e2b9f626f2782a94a5702873fee87e409828c75fd88c97577ffb1c9
|
7
|
+
data.tar.gz: 7e7b93830ad115b0c70fc29d442b1f2479adeee06326a06b7d6c106118af5e92afa717be3b3ab0638bf3bcb86dec1d3647379eb48ee30a4f7e9c5116d14ec34f
|
data/README.rdoc
CHANGED
data/lib/kasket.rb
CHANGED
@@ -9,7 +9,6 @@ module Kasket
|
|
9
9
|
autoload :DirtyMixin, 'kasket/dirty_mixin'
|
10
10
|
autoload :QueryParser, 'kasket/query_parser'
|
11
11
|
autoload :ConfigurationMixin, 'kasket/configuration_mixin'
|
12
|
-
autoload :ReloadAssociationMixin, 'kasket/reload_association_mixin'
|
13
12
|
autoload :Query, 'kasket/query'
|
14
13
|
autoload :Visitor, 'kasket/visitor'
|
15
14
|
autoload :SelectManagerMixin, 'kasket/select_manager_mixin'
|
@@ -30,11 +29,6 @@ module Kasket
|
|
30
29
|
ActiveRecord::Relation.send(:include, Kasket::RelationMixin)
|
31
30
|
Arel::SelectManager.send(:include, Kasket::SelectManagerMixin)
|
32
31
|
end
|
33
|
-
|
34
|
-
if options[:assoliations_reload_hack]
|
35
|
-
ActiveRecord::Associations::BelongsToAssociation.send(:include, Kasket::ReloadAssociationMixin)
|
36
|
-
ActiveRecord::Associations::HasOneThroughAssociation.send(:include, Kasket::ReloadAssociationMixin)
|
37
|
-
end
|
38
32
|
end
|
39
33
|
|
40
34
|
def self.cache_store=(options)
|
@@ -44,10 +38,4 @@ module Kasket
|
|
44
38
|
def self.cache
|
45
39
|
@cache_store ||= Rails.cache
|
46
40
|
end
|
47
|
-
|
48
|
-
def clear_local
|
49
|
-
if Kasket.cache.respond_to?(:with_local_cache)
|
50
|
-
Kasket.cache.send(:local_cache).try(:clear)
|
51
|
-
end
|
52
|
-
end
|
53
41
|
end
|
@@ -66,8 +66,8 @@ module Kasket
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def has_kasket_on(*args)
|
69
|
-
attributes = args.
|
70
|
-
if attributes != [:id] && !
|
69
|
+
attributes = args.sort_by!(&:to_s)
|
70
|
+
if attributes != [:id] && !has_kasket_index_on?([:id])
|
71
71
|
has_kasket_on(:id)
|
72
72
|
end
|
73
73
|
|
@@ -79,7 +79,14 @@ module Kasket
|
|
79
79
|
extend ReadMixin unless methods.map(&:to_sym).include?(:find_by_sql_with_kasket)
|
80
80
|
end
|
81
81
|
|
82
|
+
def kasket_expires_in(time)
|
83
|
+
@kasket_ttl = time
|
84
|
+
end
|
85
|
+
|
86
|
+
attr_reader :kasket_ttl
|
87
|
+
|
82
88
|
private
|
89
|
+
|
83
90
|
def quoted_value_for_column(value, column)
|
84
91
|
if column
|
85
92
|
casted_value = if column.respond_to?(:type_cast_for_database)
|
data/lib/kasket/dirty_mixin.rb
CHANGED
@@ -2,13 +2,14 @@ module Kasket
|
|
2
2
|
module DirtyMixin
|
3
3
|
def kasket_dirty_methods(*method_names)
|
4
4
|
method_names.each do |method|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
without = "without_kasket_update_#{method}"
|
6
|
+
return if method_defined? without
|
7
|
+
|
8
|
+
alias_method without, method
|
9
|
+
define_method method do |*args, &block|
|
10
|
+
result = send(without, *args, &block)
|
11
|
+
clear_kasket_indices
|
12
|
+
result
|
12
13
|
end
|
13
14
|
end
|
14
15
|
end
|
data/lib/kasket/read_mixin.rb
CHANGED
@@ -49,36 +49,28 @@ module Kasket
|
|
49
49
|
|
50
50
|
protected
|
51
51
|
|
52
|
-
|
53
|
-
|
52
|
+
def missing_records_from_db(missing_keys)
|
53
|
+
return {} if missing_keys.empty?
|
54
54
|
|
55
|
-
|
55
|
+
id_key_map = Hash[missing_keys.map{|key| [key.split('=').last.to_i, key] }]
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
def store_in_kasket(key, records)
|
63
|
-
if records.size == 1
|
64
|
-
if records.first.kasket_cacheable?
|
65
|
-
Kasket.cache.write(key, records.first.attributes_before_type_cast.dup)
|
66
|
-
end
|
67
|
-
elsif records.empty?
|
68
|
-
ActiveRecord::Base.logger.info("[KASKET] would have stored an empty resultset") if ActiveRecord::Base.logger
|
69
|
-
elsif records.size <= Kasket::CONFIGURATION[:max_collection_size]
|
70
|
-
if records.all?(&:kasket_cacheable?)
|
71
|
-
instance_keys = records.map do |record|
|
72
|
-
instance_key = kasket_key_for_id(record.id)
|
73
|
-
Kasket.cache.write(instance_key, record.attributes_before_type_cast.dup)
|
74
|
-
instance_key
|
75
|
-
end
|
57
|
+
found = without_kasket { where(:id => id_key_map.keys).to_a }
|
58
|
+
found.each(&:store_in_kasket)
|
59
|
+
Hash[found.map{|record| [id_key_map[record.id], record] }]
|
60
|
+
end
|
76
61
|
|
77
|
-
|
78
|
-
|
62
|
+
def store_in_kasket(key, records)
|
63
|
+
if records.size == 1
|
64
|
+
records.first.store_in_kasket(key)
|
65
|
+
elsif records.empty?
|
66
|
+
ActiveRecord::Base.logger.info("[KASKET] would have stored an empty resultset") if ActiveRecord::Base.logger
|
67
|
+
elsif records.size <= Kasket::CONFIGURATION[:max_collection_size]
|
68
|
+
if records.all?(&:kasket_cacheable?)
|
69
|
+
instance_keys = records.map(&:store_in_kasket)
|
70
|
+
Kasket.cache.write(key, instance_keys)
|
79
71
|
end
|
80
|
-
records
|
81
72
|
end
|
82
|
-
|
73
|
+
records
|
74
|
+
end
|
83
75
|
end
|
84
76
|
end
|
data/lib/kasket/version.rb
CHANGED
data/lib/kasket/write_mixin.rb
CHANGED
@@ -29,9 +29,11 @@ module Kasket
|
|
29
29
|
true
|
30
30
|
end
|
31
31
|
|
32
|
-
def store_in_kasket
|
33
|
-
if kasket_cacheable? &&
|
34
|
-
|
32
|
+
def store_in_kasket(key = kasket_key)
|
33
|
+
if kasket_cacheable? && key
|
34
|
+
options = { expires_in: self.class.kasket_ttl } if self.class.kasket_ttl
|
35
|
+
Kasket.cache.write(key, attributes_before_type_cast.dup, options)
|
36
|
+
key
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
@@ -62,9 +64,15 @@ module Kasket
|
|
62
64
|
end
|
63
65
|
end
|
64
66
|
|
65
|
-
def
|
66
|
-
|
67
|
-
|
67
|
+
def reload(*args)
|
68
|
+
clear_kasket_indices
|
69
|
+
super
|
70
|
+
end
|
71
|
+
|
72
|
+
def update_column(*args)
|
73
|
+
result = super
|
74
|
+
clear_kasket_indices
|
75
|
+
result
|
68
76
|
end
|
69
77
|
end
|
70
78
|
|
@@ -80,9 +88,6 @@ module Kasket
|
|
80
88
|
model_class.after_touch :clear_kasket_indices
|
81
89
|
model_class.after_destroy :clear_kasket_indices
|
82
90
|
|
83
|
-
model_class.alias_method_chain :reload, :kasket_clearing
|
84
|
-
|
85
|
-
|
86
91
|
class << model_class
|
87
92
|
alias_method_chain :transaction, :kasket_disabled
|
88
93
|
alias_method_chain :update_counters, :kasket_clearing
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kasket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mick Staugaard
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-11-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -129,6 +129,20 @@ dependencies:
|
|
129
129
|
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
name: timecop
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
type: :development
|
140
|
+
prerelease: false
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
132
146
|
description: puts a cap on your queries
|
133
147
|
email:
|
134
148
|
- mick@zendesk.com
|
@@ -144,7 +158,6 @@ files:
|
|
144
158
|
- lib/kasket/query_parser.rb
|
145
159
|
- lib/kasket/read_mixin.rb
|
146
160
|
- lib/kasket/relation_mixin.rb
|
147
|
-
- lib/kasket/reload_association_mixin.rb
|
148
161
|
- lib/kasket/select_manager_mixin.rb
|
149
162
|
- lib/kasket/version.rb
|
150
163
|
- lib/kasket/visitor.rb
|
@@ -169,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
182
|
version: '0'
|
170
183
|
requirements: []
|
171
184
|
rubyforge_project:
|
172
|
-
rubygems_version: 2.
|
185
|
+
rubygems_version: 2.4.5.1
|
173
186
|
signing_key:
|
174
187
|
specification_version: 4
|
175
188
|
summary: A write back caching layer on active record
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Kasket
|
2
|
-
module ReloadAssociationMixin
|
3
|
-
def reload_with_kasket_clearing(*args)
|
4
|
-
if loaded?
|
5
|
-
Kasket.clear_local if target.class.include?(WriteMixin)
|
6
|
-
else
|
7
|
-
target_class = (reflection.options[:polymorphic] ? (respond_to?(:klass) ? klass : association_class) : reflection.klass)
|
8
|
-
Kasket.clear_local if target_class && target_class.include?(WriteMixin)
|
9
|
-
end
|
10
|
-
|
11
|
-
reload_without_kasket_clearing(*args)
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.included(base)
|
15
|
-
base.alias_method_chain :reload, :kasket_clearing
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|