rgviz-rails 0.49 → 0.50
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 +33 -0
- data/spec/rgviz/executor_spec.rb +47 -3
- metadata +3 -3
data/lib/rgviz_rails/executor.rb
CHANGED
@@ -8,6 +8,7 @@ module Rgviz
|
|
8
8
|
@selects = []
|
9
9
|
@joins = {}
|
10
10
|
@labels = {}
|
11
|
+
@formats = {}
|
11
12
|
@pivots = {}
|
12
13
|
@group_bys = {}
|
13
14
|
@original_columns = []
|
@@ -33,6 +34,7 @@ module Rgviz
|
|
33
34
|
|
34
35
|
process_pivot
|
35
36
|
process_labels
|
37
|
+
process_formats
|
36
38
|
|
37
39
|
generate_columns
|
38
40
|
generate_conditions
|
@@ -52,6 +54,14 @@ module Rgviz
|
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
57
|
+
def process_formats
|
58
|
+
return unless @query.formats.present?
|
59
|
+
|
60
|
+
@query.formats.each do |format|
|
61
|
+
@formats[format.column.to_s] = format.pattern
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
55
65
|
def process_pivot
|
56
66
|
if @query.pivot
|
57
67
|
@query.pivot.columns.each do |column|
|
@@ -182,6 +192,10 @@ module Rgviz
|
|
182
192
|
@table.cols.each do |col|
|
183
193
|
hash = {}
|
184
194
|
hash[:v] = column_value(col, result.send("c#{i}")) unless @query.options && @query.options.no_values
|
195
|
+
|
196
|
+
format = @formats[@original_columns[i]]
|
197
|
+
hash[:f] = format_value(col, format, hash[:v]) if format
|
198
|
+
|
185
199
|
row.c << Cell.new(hash)
|
186
200
|
i += 1
|
187
201
|
end
|
@@ -261,6 +275,10 @@ module Rgviz
|
|
261
275
|
if @group_bys.include?(original_column)
|
262
276
|
hash = {}
|
263
277
|
hash[:v] = key[group_i] unless @query.options && @query.options.no_values
|
278
|
+
|
279
|
+
format = @formats[original_column]
|
280
|
+
hash[:f] = format_value(@table.cols[i], format, hash[:v]) if format
|
281
|
+
|
264
282
|
row.c << (Cell.new hash)
|
265
283
|
group_i += 1
|
266
284
|
elsif !@pivots.include?(original_column)
|
@@ -270,6 +288,10 @@ module Rgviz
|
|
270
288
|
|
271
289
|
hash = {}
|
272
290
|
hash[:v] = v unless @query.options && @query.options.no_values
|
291
|
+
|
292
|
+
format = @formats[original_column]
|
293
|
+
hash[:f] = format_value(@table.cols[i], format, hash[:v]) if format
|
294
|
+
|
273
295
|
row.c << (Cell.new hash)
|
274
296
|
end
|
275
297
|
value_i += 1
|
@@ -370,6 +392,17 @@ module Rgviz
|
|
370
392
|
@labels[string] || string
|
371
393
|
end
|
372
394
|
|
395
|
+
def format_value(col, format, value)
|
396
|
+
return nil if value.nil?
|
397
|
+
|
398
|
+
case col.type
|
399
|
+
when :boolean, :number, :string
|
400
|
+
format % value
|
401
|
+
when :date, :datetime, :timeofday
|
402
|
+
value.strftime(format)
|
403
|
+
end
|
404
|
+
end
|
405
|
+
|
373
406
|
def to_string(node, visitor_class)
|
374
407
|
visitor = visitor_class.new self
|
375
408
|
node.accept visitor
|
data/spec/rgviz/executor_spec.rb
CHANGED
@@ -21,7 +21,7 @@ describe Executor do
|
|
21
21
|
date.strftime "new Date(%Y, %m, %d)"
|
22
22
|
end
|
23
23
|
|
24
|
-
def self.it_processes_single_select_column(query, id, type, value, label, options = {}, test_options = {})
|
24
|
+
def self.it_processes_single_select_column(query, id, type, value, label, format = nil, options = {}, test_options = {})
|
25
25
|
it "processes select #{query}", test_options do
|
26
26
|
if block_given?
|
27
27
|
yield
|
@@ -40,6 +40,7 @@ describe Executor do
|
|
40
40
|
table.rows[0].c.length.should == 1
|
41
41
|
|
42
42
|
table.rows[0].c[0].v.should == value
|
43
|
+
table.rows[0].c[0].f.should == format
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
@@ -266,11 +267,11 @@ describe Executor do
|
|
266
267
|
Person.make :name => 'FOO'
|
267
268
|
end
|
268
269
|
|
269
|
-
it_processes_single_select_column "concat(age)", 'c0', :string, '20', "concat(age)", :extensions => true do
|
270
|
+
it_processes_single_select_column "concat(age)", 'c0', :string, '20', "concat(age)", nil, :extensions => true do
|
270
271
|
Person.make :age => 20
|
271
272
|
end
|
272
273
|
|
273
|
-
it_processes_single_select_column "concat(name, 'bar')", 'c0', :string, 'foobar', "concat(name, 'bar')", :extensions => true do
|
274
|
+
it_processes_single_select_column "concat(name, 'bar')", 'c0', :string, 'foobar', "concat(name, 'bar')", nil, :extensions => true do
|
274
275
|
Person.make :name => 'foo'
|
275
276
|
end
|
276
277
|
|
@@ -470,4 +471,47 @@ describe Executor do
|
|
470
471
|
end
|
471
472
|
end
|
472
473
|
|
474
|
+
# Formatting
|
475
|
+
it_processes_single_select_column 'false format false "%s is falsey"', 'c0', :boolean, false, 'false', 'false is falsey'
|
476
|
+
it_processes_single_select_column '1 format 1 "%.2f"', 'c0', :number, 1, '1', '1.00'
|
477
|
+
it_processes_single_select_column '1.2 format 1.2 "%.2f"', 'c0', :number, 1.2, '1.2', '1.20'
|
478
|
+
it_processes_single_select_column '"hello" format "hello" "%s world"', 'c0', :string, "hello", "'hello'", 'hello world'
|
479
|
+
it_processes_single_select_column 'date "2001-01-02" format date "2001-01-02" "%Y"', 'c0', :date, Time.parse('2001-01-02').to_date, "date '2001-01-02'", '2001'
|
480
|
+
|
481
|
+
it "processes pivot with format" do
|
482
|
+
Person.make :name => 'Eng', :birthday => '2000-01-12', :age => 1000
|
483
|
+
Person.make :name => 'Eng', :birthday => '2000-01-12', :age => 500
|
484
|
+
Person.make :name => 'Eng', :birthday => '2000-01-13', :age => 600
|
485
|
+
Person.make :name => 'Sales', :birthday => '2000-01-12', :age => 400
|
486
|
+
Person.make :name => 'Sales', :birthday => '2000-01-12', :age => 350
|
487
|
+
Person.make :name => 'Marketing', :birthday => '2000-01-13', :age => 800
|
488
|
+
|
489
|
+
table = exec 'select name, sum(age) group by name pivot birthday order by name format name "x %s", sum(age) "%.2f"'
|
490
|
+
|
491
|
+
table.cols.length.should == 3
|
492
|
+
|
493
|
+
i = 0
|
494
|
+
[['c0', :string, 'name'],
|
495
|
+
['c1', :number, '2000-01-12 sum(age)'],
|
496
|
+
['c2', :number, '2000-01-13 sum(age)']].each do |id, type, label|
|
497
|
+
table.cols[i].id.should == id
|
498
|
+
table.cols[i].type.should == type
|
499
|
+
table.cols[i].label.should == label
|
500
|
+
i += 1
|
501
|
+
end
|
502
|
+
|
503
|
+
table.rows.length.should == 3
|
504
|
+
|
505
|
+
i = 0
|
506
|
+
[[['Eng', 'x Eng'], [1500, '1500.00'], [600, '600.00']],
|
507
|
+
[['Marketing', 'x Marketing'], [nil, nil], [800, '800.00']],
|
508
|
+
[['Sales', 'x Sales'], [750, '750.00'], [nil, nil]]].each do |values|
|
509
|
+
table.rows[i].c.length.should == 3
|
510
|
+
values.each_with_index do |v, j|
|
511
|
+
table.rows[i].c[j].v.should == v[0]
|
512
|
+
table.rows[i].c[j].f.should == v[1]
|
513
|
+
end
|
514
|
+
i += 1
|
515
|
+
end
|
516
|
+
end
|
473
517
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rgviz-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.50'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-01-17 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rgviz
|
16
|
-
requirement: &
|
16
|
+
requirement: &70152760172220 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70152760172220
|
25
25
|
description:
|
26
26
|
email: aborenszweig@manas.com.ar
|
27
27
|
executables: []
|