kasket 3.1.5 → 3.2.0
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 +4 -4
- data/lib/kasket.rb +0 -6
- data/lib/kasket/configuration_mixin.rb +0 -1
- data/lib/kasket/dirty_mixin.rb +0 -1
- data/lib/kasket/query_parser.rb +1 -14
- data/lib/kasket/read_mixin.rb +1 -2
- data/lib/kasket/reload_association_mixin.rb +1 -3
- data/lib/kasket/version.rb +2 -3
- data/lib/kasket/visitor.rb +15 -15
- data/lib/kasket/write_mixin.rb +0 -1
- metadata +49 -73
- data/test/cache_expiry_test.rb +0 -49
- data/test/cacheable_test.rb +0 -58
- data/test/configuration_mixin_test.rb +0 -44
- data/test/database.yml +0 -7
- data/test/dirty_test.rb +0 -16
- data/test/find_one_test.rb +0 -61
- data/test/find_some_test.rb +0 -55
- data/test/fixtures/authors.yml +0 -7
- data/test/fixtures/blogs.yml +0 -5
- data/test/fixtures/comments.yml +0 -16
- data/test/fixtures/posts.yml +0 -24
- data/test/helper.rb +0 -84
- data/test/parser_test.rb +0 -153
- data/test/read_mixin_test.rb +0 -89
- data/test/reload_test.rb +0 -17
- data/test/schema.rb +0 -31
- data/test/test_models.rb +0 -44
- data/test/transaction_test.rb +0 -27
- data/test/visitor_test.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fd8b1112932a3d14ed1e43ab61ad826ba02c5f0
|
4
|
+
data.tar.gz: 997f6891f0df65c1299a3d0da4f1e990a0c6a0fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9eb57e261693839d9b4d81060fadf64737f528c8d37adcc3d3f98459e2947832dbcc3ac96379c2775cde2486731ccf5f1a3178a9ac49e376f93574154a1f7b90
|
7
|
+
data.tar.gz: 19c1289828483003fb8a979969aee6198ac4cbdbe47452b82cbbaa15dee26280c31f7a91559994afa4b856f960fce4411daa1ba9297bac265d6092f347173d32
|
data/lib/kasket.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
1
|
require 'active_record'
|
3
2
|
require 'active_support'
|
4
3
|
|
@@ -16,8 +15,6 @@ module Kasket
|
|
16
15
|
autoload :SelectManagerMixin, 'kasket/select_manager_mixin'
|
17
16
|
autoload :RelationMixin, 'kasket/relation_mixin'
|
18
17
|
|
19
|
-
AR30 = (ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR == 0)
|
20
|
-
|
21
18
|
CONFIGURATION = {:max_collection_size => 100}
|
22
19
|
|
23
20
|
module_function
|
@@ -36,9 +33,6 @@ module Kasket
|
|
36
33
|
|
37
34
|
if options[:assoliations_reload_hack]
|
38
35
|
ActiveRecord::Associations::BelongsToAssociation.send(:include, Kasket::ReloadAssociationMixin)
|
39
|
-
if ActiveRecord::VERSION::MAJOR == 2 || AR30
|
40
|
-
ActiveRecord::Associations::BelongsToPolymorphicAssociation.send(:include, Kasket::ReloadAssociationMixin)
|
41
|
-
end
|
42
36
|
ActiveRecord::Associations::HasOneThroughAssociation.send(:include, Kasket::ReloadAssociationMixin)
|
43
37
|
end
|
44
38
|
end
|
data/lib/kasket/dirty_mixin.rb
CHANGED
data/lib/kasket/query_parser.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
1
|
module Kasket
|
3
2
|
class QueryParser
|
4
3
|
# Examples:
|
@@ -11,11 +10,7 @@ module Kasket
|
|
11
10
|
|
12
11
|
def initialize(model_class)
|
13
12
|
@model_class = model_class
|
14
|
-
@supported_query_pattern =
|
15
|
-
/^select\s+(?:`#{@model_class.table_name}`.)?\* from (?:`|")#{@model_class.table_name}(?:`|") where (.*?)\s*$/i
|
16
|
-
else
|
17
|
-
/^select \* from (?:`|")#{@model_class.table_name}(?:`|") where \((.*)\)(|\s+limit 1)\s*$/i
|
18
|
-
end
|
13
|
+
@supported_query_pattern = /^select \* from (?:`|")#{@model_class.table_name}(?:`|") where \((.*)\)(|\s+limit 1)\s*$/i
|
19
14
|
@table_and_column_pattern = /(?:(?:`|")?#{@model_class.table_name}(?:`|")?\.)?(?:`|")?([a-zA-Z]\w*)(?:`|")?/ # Matches: `users`.id, `users`.`id`, users.id, id
|
20
15
|
@key_eq_value_pattern = /^[\(\s]*#{@table_and_column_pattern}\s+(=|IN)\s+#{VALUE}[\)\s]*$/ # Matches: KEY = VALUE, (KEY = VALUE), ()(KEY = VALUE))
|
21
16
|
end
|
@@ -23,14 +18,6 @@ module Kasket
|
|
23
18
|
def parse(sql)
|
24
19
|
if match = @supported_query_pattern.match(sql)
|
25
20
|
where, limit = match[1], match[2]
|
26
|
-
if AR30
|
27
|
-
return if where =~ / (order by|group by|join|having) /i
|
28
|
-
if where =~ /limit \d+\s*$/i
|
29
|
-
# limit is harder to find in rails 3.0 since where does not use surrounding braces
|
30
|
-
return unless where =~ /(.*?)(\s+limit 1)\s*$/i
|
31
|
-
where, limit = $1, $2
|
32
|
-
end
|
33
|
-
end
|
34
21
|
|
35
22
|
query = Hash.new
|
36
23
|
query[:attributes] = sorted_attribute_value_pairs(where)
|
data/lib/kasket/read_mixin.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
1
|
module Kasket
|
3
2
|
module ReadMixin
|
4
3
|
|
@@ -55,7 +54,7 @@ module Kasket
|
|
55
54
|
|
56
55
|
id_key_map = Hash[missing_keys.map{|key| [key.split('=').last.to_i, key] }]
|
57
56
|
|
58
|
-
found = without_kasket {
|
57
|
+
found = without_kasket { where(:id => id_key_map.keys).to_a }
|
59
58
|
found.each(&:store_in_kasket)
|
60
59
|
Hash[found.map{|record| [id_key_map[record.id], record] }]
|
61
60
|
end
|
@@ -1,12 +1,10 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
1
|
module Kasket
|
3
2
|
module ReloadAssociationMixin
|
4
3
|
def reload_with_kasket_clearing(*args)
|
5
4
|
if loaded?
|
6
5
|
Kasket.clear_local if target.class.include?(WriteMixin)
|
7
6
|
else
|
8
|
-
|
9
|
-
target_class = (refl.options[:polymorphic] ? (respond_to?(:klass) ? klass : association_class) : refl.klass)
|
7
|
+
target_class = (reflection.options[:polymorphic] ? (respond_to?(:klass) ? klass : association_class) : reflection.klass)
|
10
8
|
Kasket.clear_local if target_class && target_class.include?(WriteMixin)
|
11
9
|
end
|
12
10
|
|
data/lib/kasket/version.rb
CHANGED
data/lib/kasket/visitor.rb
CHANGED
@@ -24,8 +24,8 @@ module Kasket
|
|
24
24
|
@model_class.columns_hash[name.to_s]
|
25
25
|
end
|
26
26
|
|
27
|
-
def visit_Arel_Nodes_SelectStatement(node)
|
28
|
-
return :unsupported if
|
27
|
+
def visit_Arel_Nodes_SelectStatement(node, *_)
|
28
|
+
return :unsupported if node.with
|
29
29
|
return :unsupported if node.offset
|
30
30
|
return :unsupported if node.lock
|
31
31
|
return :unsupported if node.orders.any?
|
@@ -42,11 +42,11 @@ module Kasket
|
|
42
42
|
query
|
43
43
|
end
|
44
44
|
|
45
|
-
def visit_Arel_Nodes_SelectCore(node)
|
45
|
+
def visit_Arel_Nodes_SelectCore(node, *_)
|
46
46
|
return :unsupported if node.groups.any?
|
47
47
|
return :unsupported if node.having
|
48
|
-
return :unsupported if
|
49
|
-
return :unsupported if
|
48
|
+
return :unsupported if node.set_quantifier
|
49
|
+
return :unsupported if (!node.source || node.source.empty?)
|
50
50
|
return :unsupported if node.projections.size != 1
|
51
51
|
|
52
52
|
select = node.projections[0]
|
@@ -60,45 +60,45 @@ module Kasket
|
|
60
60
|
parts.include?(:unsupported) ? :unsupported : parts
|
61
61
|
end
|
62
62
|
|
63
|
-
def visit_Arel_Nodes_Limit(node)
|
63
|
+
def visit_Arel_Nodes_Limit(node, *_)
|
64
64
|
{:limit => node.value.to_i}
|
65
65
|
end
|
66
66
|
|
67
|
-
def visit_Arel_Nodes_JoinSource(node)
|
67
|
+
def visit_Arel_Nodes_JoinSource(node, *_)
|
68
68
|
return :unsupported if !node.left || node.right.any?
|
69
69
|
return :unsupported if !node.left.is_a?(Arel::Table)
|
70
70
|
visit(node.left)
|
71
71
|
end
|
72
72
|
|
73
|
-
def visit_Arel_Table(node)
|
73
|
+
def visit_Arel_Table(node, *_)
|
74
74
|
{:from => node.name}
|
75
75
|
end
|
76
76
|
|
77
|
-
def visit_Arel_Nodes_And(node)
|
77
|
+
def visit_Arel_Nodes_And(node, *_)
|
78
78
|
attributes = node.children.map { |child| visit(child) }
|
79
79
|
return :unsupported if attributes.include?(:unsupported)
|
80
80
|
attributes.sort! { |pair1, pair2| pair1[0].to_s <=> pair2[0].to_s }
|
81
81
|
{ :attributes => attributes }
|
82
82
|
end
|
83
83
|
|
84
|
-
def visit_Arel_Nodes_In(node)
|
84
|
+
def visit_Arel_Nodes_In(node, *_)
|
85
85
|
left = visit(node.left)
|
86
86
|
return :unsupported if left != :id
|
87
87
|
|
88
88
|
[left, visit(node.right)]
|
89
89
|
end
|
90
90
|
|
91
|
-
def visit_Arel_Nodes_Equality(node)
|
91
|
+
def visit_Arel_Nodes_Equality(node, *_)
|
92
92
|
right = node.right
|
93
93
|
[visit(node.left), right ? visit(right) : nil]
|
94
94
|
end
|
95
95
|
|
96
|
-
def visit_Arel_Attributes_Attribute(node)
|
96
|
+
def visit_Arel_Attributes_Attribute(node, *_)
|
97
97
|
self.last_column = column_for(node.name)
|
98
98
|
node.name.to_sym
|
99
99
|
end
|
100
100
|
|
101
|
-
def literal(node)
|
101
|
+
def literal(node, *_)
|
102
102
|
if node == '?'
|
103
103
|
column, value = @binds.shift
|
104
104
|
value.to_s
|
@@ -108,11 +108,11 @@ module Kasket
|
|
108
108
|
end
|
109
109
|
|
110
110
|
# only gets used on 1.8.7
|
111
|
-
def visit_Arel_Nodes_BindParam(x)
|
111
|
+
def visit_Arel_Nodes_BindParam(x, *_)
|
112
112
|
@binds.shift[1]
|
113
113
|
end
|
114
114
|
|
115
|
-
def visit_Array(node)
|
115
|
+
def visit_Array(node, *_)
|
116
116
|
node.map {|value| quoted(value) }
|
117
117
|
end
|
118
118
|
|
data/lib/kasket/write_mixin.rb
CHANGED
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: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mick Staugaard
|
@@ -9,112 +9,126 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-05-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
21
|
-
- - <
|
20
|
+
version: '3.2'
|
21
|
+
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
23
|
+
version: '4.2'
|
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:
|
31
|
-
- - <
|
30
|
+
version: '3.2'
|
31
|
+
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '4.2'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: rake
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
type: :development
|
42
42
|
prerelease: false
|
43
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: bundler
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: appraisal
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.5.0
|
69
69
|
type: :development
|
70
70
|
prerelease: false
|
71
71
|
version_requirements: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 0.5.0
|
76
76
|
- !ruby/object:Gem::Dependency
|
77
|
-
name:
|
77
|
+
name: mocha
|
78
78
|
requirement: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
type: :development
|
84
84
|
prerelease: false
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
|
-
name:
|
91
|
+
name: wwtd
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
type: :development
|
98
98
|
prerelease: false
|
99
99
|
version_requirements: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
|
-
name:
|
105
|
+
name: minitest
|
106
106
|
requirement: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '0'
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
name: minitest-rg
|
120
|
+
requirement: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
116
123
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
124
|
+
version: '0'
|
125
|
+
type: :development
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
118
132
|
description: puts a cap on your queries
|
119
133
|
email:
|
120
134
|
- mick@zendesk.com
|
@@ -123,6 +137,8 @@ executables: []
|
|
123
137
|
extensions: []
|
124
138
|
extra_rdoc_files: []
|
125
139
|
files:
|
140
|
+
- README.rdoc
|
141
|
+
- lib/kasket.rb
|
126
142
|
- lib/kasket/configuration_mixin.rb
|
127
143
|
- lib/kasket/dirty_mixin.rb
|
128
144
|
- lib/kasket/query_parser.rb
|
@@ -133,27 +149,6 @@ files:
|
|
133
149
|
- lib/kasket/version.rb
|
134
150
|
- lib/kasket/visitor.rb
|
135
151
|
- lib/kasket/write_mixin.rb
|
136
|
-
- lib/kasket.rb
|
137
|
-
- README.rdoc
|
138
|
-
- test/cache_expiry_test.rb
|
139
|
-
- test/cacheable_test.rb
|
140
|
-
- test/configuration_mixin_test.rb
|
141
|
-
- test/database.yml
|
142
|
-
- test/dirty_test.rb
|
143
|
-
- test/find_one_test.rb
|
144
|
-
- test/find_some_test.rb
|
145
|
-
- test/fixtures/authors.yml
|
146
|
-
- test/fixtures/blogs.yml
|
147
|
-
- test/fixtures/comments.yml
|
148
|
-
- test/fixtures/posts.yml
|
149
|
-
- test/helper.rb
|
150
|
-
- test/parser_test.rb
|
151
|
-
- test/read_mixin_test.rb
|
152
|
-
- test/reload_test.rb
|
153
|
-
- test/schema.rb
|
154
|
-
- test/test_models.rb
|
155
|
-
- test/transaction_test.rb
|
156
|
-
- test/visitor_test.rb
|
157
152
|
homepage: http://github.com/zendesk/kasket
|
158
153
|
licenses:
|
159
154
|
- Apache License Version 2.0
|
@@ -164,37 +159,18 @@ require_paths:
|
|
164
159
|
- lib
|
165
160
|
required_ruby_version: !ruby/object:Gem::Requirement
|
166
161
|
requirements:
|
167
|
-
- -
|
162
|
+
- - ">="
|
168
163
|
- !ruby/object:Gem::Version
|
169
164
|
version: '0'
|
170
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
166
|
requirements:
|
172
|
-
- -
|
167
|
+
- - ">="
|
173
168
|
- !ruby/object:Gem::Version
|
174
169
|
version: '0'
|
175
170
|
requirements: []
|
176
171
|
rubyforge_project:
|
177
|
-
rubygems_version: 2.
|
172
|
+
rubygems_version: 2.2.2
|
178
173
|
signing_key:
|
179
174
|
specification_version: 4
|
180
175
|
summary: A write back caching layer on active record
|
181
|
-
test_files:
|
182
|
-
- test/cache_expiry_test.rb
|
183
|
-
- test/cacheable_test.rb
|
184
|
-
- test/configuration_mixin_test.rb
|
185
|
-
- test/database.yml
|
186
|
-
- test/dirty_test.rb
|
187
|
-
- test/find_one_test.rb
|
188
|
-
- test/find_some_test.rb
|
189
|
-
- test/fixtures/authors.yml
|
190
|
-
- test/fixtures/blogs.yml
|
191
|
-
- test/fixtures/comments.yml
|
192
|
-
- test/fixtures/posts.yml
|
193
|
-
- test/helper.rb
|
194
|
-
- test/parser_test.rb
|
195
|
-
- test/read_mixin_test.rb
|
196
|
-
- test/reload_test.rb
|
197
|
-
- test/schema.rb
|
198
|
-
- test/test_models.rb
|
199
|
-
- test/transaction_test.rb
|
200
|
-
- test/visitor_test.rb
|
176
|
+
test_files: []
|