querybuilder 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/lib/query_builder/info.rb +1 -1
- data/lib/query_builder/processor.rb +4 -0
- data/lib/query_builder/query.rb +18 -3
- data/querybuilder.gemspec +2 -2
- data/test/mock/custom_queries/test.yml +2 -0
- data/test/querybuilder_test.rb +4 -0
- metadata +4 -4
data/History.txt
CHANGED
data/lib/query_builder/info.rb
CHANGED
@@ -758,6 +758,10 @@ module QueryBuilder
|
|
758
758
|
def prepare_custom_query_arguments(key, value)
|
759
759
|
if key == :main_class
|
760
760
|
resolve_main_class(value)
|
761
|
+
elsif key == :types
|
762
|
+
value.each do |k,v|
|
763
|
+
value[k] = v.to_sym
|
764
|
+
end
|
761
765
|
elsif value.kind_of?(Array)
|
762
766
|
value.map {|e| parse_custom_query_argument(key, e)}
|
763
767
|
elsif value.kind_of?(Hash)
|
data/lib/query_builder/query.rb
CHANGED
@@ -2,9 +2,10 @@ require 'active_record'
|
|
2
2
|
|
3
3
|
module QueryBuilder
|
4
4
|
class Query
|
5
|
+
SELECT_WITH_TYPE_REGEX = /^(.*):(.*)$/
|
5
6
|
attr_accessor :processor_class, :distinct, :select, :tables, :table_alias, :where,
|
6
7
|
:limit, :offset, :page_size, :order, :group, :error, :attributes_alias,
|
7
|
-
:pagination_key, :main_class, :context, :key_value_tables, :having
|
8
|
+
:pagination_key, :main_class, :context, :key_value_tables, :having, :types
|
8
9
|
|
9
10
|
class << self
|
10
11
|
def adapter
|
@@ -19,6 +20,8 @@ module QueryBuilder
|
|
19
20
|
@join_tables = {}
|
20
21
|
@needed_join_tables = {}
|
21
22
|
@attributes_alias = {}
|
23
|
+
# Custom select foo as bar:time or 'types:' field in custom query.
|
24
|
+
@types = {}
|
22
25
|
@key_value_tables = {}
|
23
26
|
@where = []
|
24
27
|
end
|
@@ -56,10 +59,18 @@ module QueryBuilder
|
|
56
59
|
@where << filter
|
57
60
|
end
|
58
61
|
|
59
|
-
# Return all explicit selected keys
|
62
|
+
# Return all explicit selected keys
|
60
63
|
# For example, sql such as "SELECT form.*, MAX(form.date) AS last_date" would provice 'last_date' key.
|
61
64
|
def select_keys
|
62
|
-
@select_keys ||=
|
65
|
+
@select_keys ||= begin
|
66
|
+
keys = @attributes_alias.keys.compact
|
67
|
+
# When rebuilding select_keys, we rebuild @types
|
68
|
+
keys.each do |k|
|
69
|
+
# Default type is string
|
70
|
+
@types[k] ||= :string
|
71
|
+
end
|
72
|
+
keys
|
73
|
+
end
|
63
74
|
end
|
64
75
|
|
65
76
|
# Convert query object to a string. This string should then be evaluated.
|
@@ -131,6 +142,10 @@ module QueryBuilder
|
|
131
142
|
end
|
132
143
|
|
133
144
|
def add_select(field, fname)
|
145
|
+
if fname =~ SELECT_WITH_TYPE_REGEX
|
146
|
+
fname, type = $1, $2
|
147
|
+
@types[fname] = type.to_sym
|
148
|
+
end
|
134
149
|
@select ||= ["#{main_table}.*"]
|
135
150
|
@select << "#{field} AS #{quote_column_name(fname)}"
|
136
151
|
@attributes_alias[fname] = field
|
data/querybuilder.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{querybuilder}
|
8
|
-
s.version = "1.1.
|
8
|
+
s.version = "1.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Gaspard Bucher"]
|
12
|
-
s.date = %q{2012-08-
|
12
|
+
s.date = %q{2012-08-30}
|
13
13
|
s.description = %q{QueryBuilder is an interpreter for the "pseudo sql" language. This language
|
14
14
|
can be used for two purposes:
|
15
15
|
|
data/test/querybuilder_test.rb
CHANGED
@@ -78,6 +78,10 @@ class DummyQueryBuilder < Test::Unit::TestCase
|
|
78
78
|
should 'respond to select_keys' do
|
79
79
|
assert_equal %w{a c number}, subject.select_keys.sort
|
80
80
|
end
|
81
|
+
|
82
|
+
should 'return type of custom key' do
|
83
|
+
assert_equal :integer, subject.types['number']
|
84
|
+
end
|
81
85
|
|
82
86
|
should 'not include star keys' do
|
83
87
|
assert !subject.select_keys.include?('*')
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: querybuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 1.1.
|
9
|
+
- 3
|
10
|
+
version: 1.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Gaspard Bucher
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-08-
|
18
|
+
date: 2012-08-30 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|