kasket 3.1.3 → 3.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/kasket/configuration_mixin.rb +6 -1
- data/lib/kasket/select_manager_mixin.rb +5 -1
- data/lib/kasket/version.rb +1 -1
- data/lib/kasket/visitor.rb +0 -10
- data/test/configuration_mixin_test.rb +7 -0
- data/test/helper.rb +2 -0
- data/test/visitor_test.rb +22 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f991371eb51fc1fa71c6902a9f7521011eaad4a3
|
4
|
+
data.tar.gz: 585665215a4aad97c63f41395965e2f53397a18d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56dd49026d082012079b32fb729e70228081333327026461c8b1a0a2e624ec4cb1cd0d8240800ffbc0f1cf76a8c4870b2d11fc15963afec4fa5d186de6eda8e7
|
7
|
+
data.tar.gz: 62c542fe0a7c6d867b685c8d46d0b021dfc4ee36bc004d207e735845f9bd15ced98f474d5e1ff99c6082efcabe05b5d1fefc72049f31b291af6549b1e9c3c7e2
|
@@ -37,7 +37,12 @@ module Kasket
|
|
37
37
|
key = attribute_value_pairs.map do |attribute, value|
|
38
38
|
column = columns_hash[attribute.to_s]
|
39
39
|
value = nil if value.blank?
|
40
|
-
|
40
|
+
quoted_value = if column
|
41
|
+
connection.quote(column.type_cast(value), column).downcase
|
42
|
+
else
|
43
|
+
value.to_s
|
44
|
+
end
|
45
|
+
attribute.to_s << '=' << quoted_value
|
41
46
|
end.join('/')
|
42
47
|
|
43
48
|
if key.size > (250 - kasket_key_prefix.size) || key =~ /\s/
|
@@ -1,7 +1,11 @@
|
|
1
1
|
module Kasket
|
2
2
|
module SelectManagerMixin
|
3
3
|
def to_kasket_query(klass, binds = [])
|
4
|
-
|
4
|
+
begin
|
5
|
+
query = Kasket::Visitor.new(klass, binds).accept(ast)
|
6
|
+
rescue TypeError # unsupported object in ast
|
7
|
+
return nil
|
8
|
+
end
|
5
9
|
|
6
10
|
return nil if query.nil? || query == :unsupported
|
7
11
|
return nil if query[:attributes].blank?
|
data/lib/kasket/version.rb
CHANGED
data/lib/kasket/visitor.rb
CHANGED
@@ -126,15 +126,5 @@ module Kasket
|
|
126
126
|
alias :visit_TrueClass :literal
|
127
127
|
alias :visit_FalseClass :literal
|
128
128
|
alias :visit_Arel_Nodes_SqlLiteral :literal
|
129
|
-
|
130
|
-
def method_missing(name, *args, &block)
|
131
|
-
return :unsupported if name.to_s.start_with?('visit_')
|
132
|
-
super
|
133
|
-
end
|
134
|
-
|
135
|
-
def respond_to?(name, include_private = false)
|
136
|
-
return super || name.to_s.start_with?('visit_')
|
137
|
-
end
|
138
|
-
|
139
129
|
end
|
140
130
|
end
|
@@ -10,6 +10,13 @@ class ConfigurationMixinTest < ActiveSupport::TestCase
|
|
10
10
|
assert_equal expected_cache_key, Post.kasket_key_for(query_attributes)
|
11
11
|
end
|
12
12
|
|
13
|
+
should "not fail on unknown columns" do
|
14
|
+
expected_cache_key = "#{Post.kasket_key_prefix}does_not_exist=111"
|
15
|
+
query_attributes = [ [:does_not_exist, '111'] ]
|
16
|
+
|
17
|
+
assert_equal expected_cache_key, Post.kasket_key_for(query_attributes)
|
18
|
+
end
|
19
|
+
|
13
20
|
should "not generate keys longer that 255" do
|
14
21
|
very_large_number = (1..999).to_a.join
|
15
22
|
query_attributes = [ [:blog_id, very_large_number] ]
|
data/test/helper.rb
CHANGED
@@ -14,10 +14,12 @@ end
|
|
14
14
|
require 'test/unit'
|
15
15
|
require 'mocha'
|
16
16
|
require 'active_record'
|
17
|
+
require "logger"
|
17
18
|
|
18
19
|
raise "Must configure #time_zone_aware_attributes prior to models" if defined?(Post)
|
19
20
|
ENV['TZ'] = 'utc'
|
20
21
|
ActiveRecord::Base.time_zone_aware_attributes = true
|
22
|
+
ActiveRecord::Base.logger = Logger.new(StringIO.new)
|
21
23
|
|
22
24
|
require 'active_record/fixtures'
|
23
25
|
|
data/test/visitor_test.rb
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
require File.expand_path("helper", File.dirname(__FILE__))
|
2
2
|
|
3
|
+
module Nori
|
4
|
+
class StringWithAttributes < String
|
5
|
+
end
|
6
|
+
|
7
|
+
class Unknown
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
3
11
|
class VisitorTest < ActiveSupport::TestCase
|
4
12
|
if arel?
|
5
13
|
context Kasket::Visitor do
|
@@ -12,6 +20,20 @@ class VisitorTest < ActiveSupport::TestCase
|
|
12
20
|
}
|
13
21
|
assert_equal expected, Post.where(:id => 1).to_kasket_query
|
14
22
|
end
|
23
|
+
|
24
|
+
should "build from Nori::StringWithAttributes" do
|
25
|
+
expected = {
|
26
|
+
:attributes=>[[:id, "1"]],
|
27
|
+
:from=>"posts",
|
28
|
+
:index=>[:id],
|
29
|
+
:key=>"#{Post.kasket_key_prefix}id=1"
|
30
|
+
}
|
31
|
+
assert_equal expected, Post.where(:id => Nori::StringWithAttributes.new("1")).to_kasket_query
|
32
|
+
end
|
33
|
+
|
34
|
+
should "notify on missing attribute" do
|
35
|
+
assert_equal nil, Post.where(:id => Nori::Unknown.new).to_kasket_query
|
36
|
+
end
|
15
37
|
end
|
16
38
|
end
|
17
39
|
end
|
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.1.
|
4
|
+
version: 3.1.4
|
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: 2013-10-
|
12
|
+
date: 2013-10-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -174,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
174
|
version: '0'
|
175
175
|
requirements: []
|
176
176
|
rubyforge_project:
|
177
|
-
rubygems_version: 2.0.
|
177
|
+
rubygems_version: 2.0.6
|
178
178
|
signing_key:
|
179
179
|
specification_version: 4
|
180
180
|
summary: A write back caching layer on active record
|