rgviz-rails 0.9 → 0.10
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.
- data/lib/rgviz_rails/executor.rb +17 -2
- data/spec/rgviz/executor_spec.rb +57 -47
- metadata +3 -3
data/lib/rgviz_rails/executor.rb
CHANGED
@@ -7,6 +7,7 @@ module Rgviz
|
|
7
7
|
@model_class = model_class
|
8
8
|
@query = query
|
9
9
|
@joins = {}
|
10
|
+
@labels = {}
|
10
11
|
case ActiveRecord::Base.connection.adapter_name.downcase
|
11
12
|
when 'sqlite'
|
12
13
|
@adapter = SqliteAdapter.new
|
@@ -19,6 +20,8 @@ module Rgviz
|
|
19
20
|
@table = Table.new
|
20
21
|
@extra_conditions = options[:conditions]
|
21
22
|
|
23
|
+
process_labels
|
24
|
+
|
22
25
|
generate_columns
|
23
26
|
generate_conditions
|
24
27
|
generate_group
|
@@ -28,6 +31,14 @@ module Rgviz
|
|
28
31
|
@table
|
29
32
|
end
|
30
33
|
|
34
|
+
def process_labels
|
35
|
+
return unless @query.labels.present?
|
36
|
+
|
37
|
+
@query.labels.each do |label|
|
38
|
+
@labels[label.column.to_s] = label.label
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
31
42
|
def add_joins(joins)
|
32
43
|
map = @joins
|
33
44
|
joins.each do |join|
|
@@ -45,7 +56,7 @@ module Rgviz
|
|
45
56
|
# Select the specified columns
|
46
57
|
i = 0
|
47
58
|
@query.select.columns.each do |col|
|
48
|
-
@table.cols << (Column.new :id => column_id(col, i), :type => column_type(col))
|
59
|
+
@table.cols << (Column.new :id => column_id(col, i), :type => column_type(col), :label => column_label(col.to_s))
|
49
60
|
@selects << "(#{column_select(col)}) as c#{i}"
|
50
61
|
i += 1
|
51
62
|
end
|
@@ -53,7 +64,7 @@ module Rgviz
|
|
53
64
|
# Select all columns
|
54
65
|
i = 0
|
55
66
|
@model_class.send(:columns).each do |col|
|
56
|
-
@table.cols << (Column.new :id => col.name, :type => (rails_column_type col))
|
67
|
+
@table.cols << (Column.new :id => col.name, :type => (rails_column_type col), :label => column_label(col.name))
|
57
68
|
@selects << "(#{col.name}) as c#{i}"
|
58
69
|
i += 1
|
59
70
|
end
|
@@ -167,6 +178,10 @@ module Rgviz
|
|
167
178
|
end
|
168
179
|
end
|
169
180
|
|
181
|
+
def column_label(string)
|
182
|
+
@labels[string] || string
|
183
|
+
end
|
184
|
+
|
170
185
|
def to_string(node, visitor_class)
|
171
186
|
visitor = visitor_class.new self
|
172
187
|
node.accept visitor
|
data/spec/rgviz/executor_spec.rb
CHANGED
@@ -25,7 +25,7 @@ describe Executor do
|
|
25
25
|
date.strftime "%Y-%m-%d"
|
26
26
|
end
|
27
27
|
|
28
|
-
def self.it_processes_single_select_column(query, id, type, value)
|
28
|
+
def self.it_processes_single_select_column(query, id, type, value, label)
|
29
29
|
it "processes select #{query}" do
|
30
30
|
if block_given?
|
31
31
|
yield
|
@@ -38,6 +38,7 @@ describe Executor do
|
|
38
38
|
|
39
39
|
table.cols[0].id.should == id
|
40
40
|
table.cols[0].type.should == type
|
41
|
+
table.cols[0].label.should == label
|
41
42
|
|
42
43
|
table.rows.length.should == 1
|
43
44
|
table.rows[0].c.length.should == 1
|
@@ -58,6 +59,7 @@ describe Executor do
|
|
58
59
|
['city_id', :number]].each do |id, type|
|
59
60
|
table.cols[i].id.should == id
|
60
61
|
table.cols[i].type.should == type
|
62
|
+
table.cols[i].label.should == id
|
61
63
|
i += 1
|
62
64
|
end
|
63
65
|
|
@@ -72,61 +74,61 @@ describe Executor do
|
|
72
74
|
end
|
73
75
|
end
|
74
76
|
|
75
|
-
it_processes_single_select_column 'name', 'name', :string, 'foo' do
|
77
|
+
it_processes_single_select_column 'name', 'name', :string, 'foo', 'name' do
|
76
78
|
Person.make :name => 'foo'
|
77
79
|
end
|
78
80
|
|
79
|
-
it_processes_single_select_column '1', 'c0', :number, 1
|
80
|
-
it_processes_single_select_column '1.2', 'c0', :number, 1.2
|
81
|
-
it_processes_single_select_column '"hello"', 'c0', :string, 'hello'
|
82
|
-
it_processes_single_select_column 'false', 'c0', :boolean, false
|
83
|
-
it_processes_single_select_column 'true', 'c0', :boolean, true
|
84
|
-
it_processes_single_select_column 'date "2010-01-02"', 'c0', :date, '2010-01-02'
|
85
|
-
it_processes_single_select_column 'datetime "2010-01-02 10:11:12"', 'c0', :datetime, '2010-01-02 10:11:12'
|
86
|
-
it_processes_single_select_column 'timeofday "10:11:12"', 'c0', :timeofday, '10:11:12'
|
87
|
-
|
88
|
-
it_processes_single_select_column '1 + 2', 'c0', :number, 3
|
89
|
-
it_processes_single_select_column '3 - 2', 'c0', :number, 1
|
90
|
-
it_processes_single_select_column '2 * 3', 'c0', :number, 6
|
91
|
-
it_processes_single_select_column '6 / 3', 'c0', :number, 2
|
92
|
-
it_processes_single_select_column '3 * age', 'c0', :number, 60 do
|
81
|
+
it_processes_single_select_column '1', 'c0', :number, 1, '1'
|
82
|
+
it_processes_single_select_column '1.2', 'c0', :number, 1.2, '1.2'
|
83
|
+
it_processes_single_select_column '"hello"', 'c0', :string, 'hello', "'hello'"
|
84
|
+
it_processes_single_select_column 'false', 'c0', :boolean, false, 'false'
|
85
|
+
it_processes_single_select_column 'true', 'c0', :boolean, true, 'true'
|
86
|
+
it_processes_single_select_column 'date "2010-01-02"', 'c0', :date, '2010-01-02', "date '2010-01-02'"
|
87
|
+
it_processes_single_select_column 'datetime "2010-01-02 10:11:12"', 'c0', :datetime, '2010-01-02 10:11:12', "datetime '2010-01-02 10:11:12'"
|
88
|
+
it_processes_single_select_column 'timeofday "10:11:12"', 'c0', :timeofday, '10:11:12', "timeofday '10:11:12'"
|
89
|
+
|
90
|
+
it_processes_single_select_column '1 + 2', 'c0', :number, 3, '1 + 2'
|
91
|
+
it_processes_single_select_column '3 - 2', 'c0', :number, 1, '3 - 2'
|
92
|
+
it_processes_single_select_column '2 * 3', 'c0', :number, 6, '2 * 3'
|
93
|
+
it_processes_single_select_column '6 / 3', 'c0', :number, 2, '6 / 3'
|
94
|
+
it_processes_single_select_column '3 * age', 'c0', :number, 60, '3 * age' do
|
93
95
|
Person.make :age => 20
|
94
96
|
end
|
95
97
|
|
96
|
-
it_processes_single_select_column 'sum(age)', 'c0', :number, 6 do
|
98
|
+
it_processes_single_select_column 'sum(age)', 'c0', :number, 6, 'sum(age)' do
|
97
99
|
[1, 2, 3].each{|i| Person.make :age => i}
|
98
100
|
end
|
99
101
|
|
100
|
-
it_processes_single_select_column 'avg(age)', 'c0', :number, 30 do
|
102
|
+
it_processes_single_select_column 'avg(age)', 'c0', :number, 30, 'avg(age)' do
|
101
103
|
[10, 20, 60].each{|i| Person.make :age => i}
|
102
104
|
end
|
103
105
|
|
104
|
-
it_processes_single_select_column 'count(age)', 'c0', :number, 3 do
|
106
|
+
it_processes_single_select_column 'count(age)', 'c0', :number, 3, 'count(age)' do
|
105
107
|
3.times{|i| Person.make}
|
106
108
|
end
|
107
109
|
|
108
|
-
it_processes_single_select_column 'max(age)', 'c0', :number, 3 do
|
110
|
+
it_processes_single_select_column 'max(age)', 'c0', :number, 3, 'max(age)' do
|
109
111
|
[1, 2, 3].each{|i| Person.make :age => i}
|
110
112
|
end
|
111
113
|
|
112
|
-
it_processes_single_select_column 'min(age)', 'c0', :number, 1 do
|
114
|
+
it_processes_single_select_column 'min(age)', 'c0', :number, 1, 'min(age)' do
|
113
115
|
[1, 2, 3].each{|i| Person.make :age => i}
|
114
116
|
end
|
115
117
|
|
116
|
-
it_processes_single_select_column 'age where age > 2', 'age', :number, 3 do
|
118
|
+
it_processes_single_select_column 'age where age > 2', 'age', :number, 3, 'age' do
|
117
119
|
[1, 2, 3].each{|i| Person.make :age => i}
|
118
120
|
end
|
119
121
|
|
120
|
-
it_processes_single_select_column 'age where age > 2 and age <= 3', 'age', :number, 3 do
|
122
|
+
it_processes_single_select_column 'age where age > 2 and age <= 3', 'age', :number, 3, 'age' do
|
121
123
|
[1, 2, 3, 4, 5].each{|i| Person.make :age => i}
|
122
124
|
end
|
123
125
|
|
124
|
-
it_processes_single_select_column 'name where age is null', 'name', :string, 'b' do
|
126
|
+
it_processes_single_select_column 'name where age is null', 'name', :string, 'b', 'name' do
|
125
127
|
Person.make :age => 1, :name => 'a'
|
126
128
|
Person.make :age => nil, :name => 'b'
|
127
129
|
end
|
128
130
|
|
129
|
-
it_processes_single_select_column 'name where age is not null', 'name', :string, 'a' do
|
131
|
+
it_processes_single_select_column 'name where age is not null', 'name', :string, 'a', 'name' do
|
130
132
|
Person.make :age => 1, :name => 'a'
|
131
133
|
Person.make :age => nil, :name => 'b'
|
132
134
|
end
|
@@ -162,23 +164,23 @@ describe Executor do
|
|
162
164
|
table.rows[2].c[0].v.should == 1
|
163
165
|
end
|
164
166
|
|
165
|
-
it_processes_single_select_column 'age where age > 3 order by age limit 1', 'age', :number, 4 do
|
167
|
+
it_processes_single_select_column 'age where age > 3 order by age limit 1', 'age', :number, 4, 'age' do
|
166
168
|
[1, 2, 3, 4, 5].each{|i| Person.make :age => i}
|
167
169
|
end
|
168
170
|
|
169
|
-
it_processes_single_select_column 'age where age > 3 order by age limit 1 offset 1', 'age', :number, 5 do
|
171
|
+
it_processes_single_select_column 'age where age > 3 order by age limit 1 offset 1', 'age', :number, 5, 'age' do
|
170
172
|
[1, 2, 3, 4, 5].each{|i| Person.make :age => i}
|
171
173
|
end
|
172
174
|
|
173
|
-
it_processes_single_select_column 'city_name', 'city_name', :string, 'Buenos Aires' do
|
175
|
+
it_processes_single_select_column 'city_name', 'city_name', :string, 'Buenos Aires', 'city_name' do
|
174
176
|
Person.make :city => City.make(:name => 'Buenos Aires')
|
175
177
|
end
|
176
178
|
|
177
|
-
it_processes_single_select_column 'city_country_name', 'city_country_name', :string, 'Argentina' do
|
179
|
+
it_processes_single_select_column 'city_country_name', 'city_country_name', :string, 'Argentina', 'city_country_name' do
|
178
180
|
Person.make :city => City.make(:country => Country.make(:name => 'Argentina'))
|
179
181
|
end
|
180
182
|
|
181
|
-
it_processes_single_select_column 'city_country_name group by city_country_name', 'city_country_name', :string, 'Argentina' do
|
183
|
+
it_processes_single_select_column 'city_country_name group by city_country_name', 'city_country_name', :string, 'Argentina', 'city_country_name' do
|
182
184
|
Person.make :city => City.make(:country => Country.make(:name => 'Argentina'))
|
183
185
|
end
|
184
186
|
|
@@ -232,38 +234,46 @@ describe Executor do
|
|
232
234
|
|
233
235
|
[['year', 2006], ['month', 5], ['day', 2],
|
234
236
|
['hour', 3], ['minute', 4], ['second', 9],
|
235
|
-
['
|
236
|
-
it_processes_single_select_column "#{str}(created_at)", 'c0', :number, val do
|
237
|
+
['dayOfWeek', 3]].each do |str, val|
|
238
|
+
it_processes_single_select_column "#{str}(created_at)", 'c0', :number, val, "#{str}(created_at)" do
|
237
239
|
Person.make :created_at => Time.parse('2006-05-02 3:04:09')
|
238
240
|
end
|
239
241
|
end
|
240
242
|
|
241
|
-
it_processes_single_select_column "
|
242
|
-
Person.make
|
243
|
-
end
|
243
|
+
# it_processes_single_select_column "quarter(created_at)", 'c0', :number, 5 do
|
244
|
+
# Person.make :created_at => Time.parse('2006-05-02 3:04:09')
|
245
|
+
# end
|
244
246
|
|
245
|
-
it_processes_single_select_column "
|
246
|
-
|
247
|
-
|
247
|
+
it_processes_single_select_column "dateDiff(date '2008-03-13', date '2008-03-10')", 'c0', :number, 3, "dateDiff(date '2008-03-13', date '2008-03-10')"
|
248
|
+
|
249
|
+
# it_processes_single_select_column "now()", 'c0', :datetime, Time.now.utc.strftime("%Y-%m-%d %H:%M:%S"), "now()" do
|
250
|
+
# Person.make :created_at => Time.parse('2006-05-02 3:04:09')
|
251
|
+
# end
|
248
252
|
|
249
|
-
it_processes_single_select_column "toDate('2008-03-13')", 'c0', :date, Date.parse('2008-03-13').to_s
|
250
|
-
Person.make
|
251
|
-
end
|
253
|
+
it_processes_single_select_column "toDate('2008-03-13')", 'c0', :date, Date.parse('2008-03-13').to_s, "toDate('2008-03-13')"
|
252
254
|
|
253
|
-
it_processes_single_select_column "toDate(created_at)", 'c0', :date, Date.parse('2008-03-13').to_s do
|
255
|
+
it_processes_single_select_column "toDate(created_at)", 'c0', :date, Date.parse('2008-03-13').to_s, "toDate(created_at)" do
|
254
256
|
Person.make :created_at => Time.parse('2008-03-13 3:04:09')
|
255
257
|
end
|
256
258
|
|
257
|
-
it_processes_single_select_column "toDate(1234567890000)", 'c0', :date, Date.parse('2009-02-13').to_s
|
258
|
-
Person.make
|
259
|
-
end
|
259
|
+
# it_processes_single_select_column "toDate(1234567890000)", 'c0', :date, Date.parse('2009-02-13').to_s, "toDate(1234567890000)"
|
260
260
|
|
261
|
-
it_processes_single_select_column "upper(name)", 'c0', :string, 'FOO' do
|
261
|
+
it_processes_single_select_column "upper(name)", 'c0', :string, 'FOO', "upper(name)" do
|
262
262
|
Person.make :name => 'foo'
|
263
263
|
end
|
264
264
|
|
265
|
-
it_processes_single_select_column "lower(name)", 'c0', :string, 'foo' do
|
265
|
+
it_processes_single_select_column "lower(name)", 'c0', :string, 'foo', "lower(name)" do
|
266
266
|
Person.make :name => 'FOO'
|
267
267
|
end
|
268
268
|
|
269
|
+
it_processes_single_select_column "name label name 'my name'", 'name', :string, 'foo', "my name" do
|
270
|
+
Person.make :name => 'foo'
|
271
|
+
end
|
272
|
+
|
273
|
+
it_processes_single_select_column "1 + 2 label 1 + 2 'my name'", 'c0', :number, 3, "my name"
|
274
|
+
|
275
|
+
it_processes_single_select_column "sum(age) label sum(age) 'my name'", 'c0', :number, 2, "my name" do
|
276
|
+
Person.make :age => 2
|
277
|
+
end
|
278
|
+
|
269
279
|
end
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rgviz-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: "0.
|
8
|
+
- 10
|
9
|
+
version: "0.10"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ary Borenszweig
|