rorschart 0.10.3 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/rorschart.rb +2 -1
- data/lib/rorschart/{multiple_series.rb → data/multiple_series.rb} +10 -14
- data/lib/rorschart/data/pivot_series.rb +44 -0
- data/lib/rorschart/{pivot_data.rb → data/rorschart_data.rb} +2 -3
- data/lib/rorschart/google_chart_mapper.rb +6 -6
- data/lib/rorschart/google_chart_options.rb +1 -2
- data/lib/rorschart/helper.rb +1 -6
- data/lib/rorschart/version.rb +1 -1
- data/test/data/pivot_series_test.rb +78 -0
- data/test/{pivot_data_test.rb → data/rorschart_data_test.rb} +4 -4
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1796e18cfc48a16921780aaecd6d52d4d0512610
|
4
|
+
data.tar.gz: f4df16d9dfcfd300a31fc0009d231f59f042ba1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 033abe8fa201b49fbdc8fa14b8b4b87123cfbf995110762a303994a7531399b6e56e4c68c73700b542718f52213f61b6d944d57a084c3eb039e02f8f5a2285a0
|
7
|
+
data.tar.gz: 170940cb189d42cbf961fbc9f748c6f783c365dd2e7684510466610bdb93e91ec1e9552bae68ebdb434df7c97abc13f0bd727f6d6c1e49284961aab01d699a69
|
data/Gemfile.lock
CHANGED
data/lib/rorschart.rb
CHANGED
@@ -1,22 +1,21 @@
|
|
1
1
|
module Rorschart
|
2
|
-
class MultipleSeries
|
2
|
+
class MultipleSeries < RorschartData
|
3
3
|
|
4
|
-
attr_accessor :raw_series, :
|
4
|
+
attr_accessor :raw_series, :rorschart_series
|
5
5
|
|
6
6
|
def initialize(raw_series)
|
7
7
|
@raw_series = raw_series
|
8
|
-
@
|
9
|
-
|
8
|
+
@rorschart_series = raw_series.collect { |serie|
|
9
|
+
RorschartData.new(serie)
|
10
10
|
}
|
11
11
|
end
|
12
12
|
|
13
13
|
def cols
|
14
|
-
cols_with_dup = @
|
15
|
-
cols + series.cols
|
14
|
+
cols_with_dup = @rorschart_series.inject([]) { |cols, series|
|
15
|
+
cols + (series.cols || [])
|
16
16
|
}
|
17
17
|
|
18
18
|
cols_with_dup.uniq
|
19
|
-
|
20
19
|
end
|
21
20
|
|
22
21
|
def rows
|
@@ -25,8 +24,8 @@ module Rorschart
|
|
25
24
|
|
26
25
|
# Preparation: store all series rows in a hash indexed by first column
|
27
26
|
series_indexed = []
|
28
|
-
@
|
29
|
-
series_indexed << index_series_by_first_col(serie)
|
27
|
+
@rorschart_series.each { |serie|
|
28
|
+
series_indexed << index_series_by_first_col(serie) if !serie.cols.nil?
|
30
29
|
}
|
31
30
|
|
32
31
|
# The Merge:
|
@@ -46,12 +45,9 @@ module Rorschart
|
|
46
45
|
|
47
46
|
private
|
48
47
|
|
49
|
-
def uniq_label(label)
|
50
|
-
end
|
51
|
-
|
52
48
|
def union_of_first_columns
|
53
49
|
(
|
54
|
-
@
|
50
|
+
@rorschart_series.inject([]) { |union, serie|
|
55
51
|
union + serie.rows
|
56
52
|
}
|
57
53
|
).collect{|r| r[0]}.uniq.sort
|
@@ -68,4 +64,4 @@ module Rorschart
|
|
68
64
|
end
|
69
65
|
|
70
66
|
end
|
71
|
-
end
|
67
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Rorschart
|
2
|
+
class PivotSeries < RorschartData
|
3
|
+
|
4
|
+
def initialize(raw_serie)
|
5
|
+
rorschart_serie = RorschartData.new(raw_serie)
|
6
|
+
|
7
|
+
# Initialiaze a default row with nil values
|
8
|
+
row_nil = init_cols_with_nil(rorschart_serie)
|
9
|
+
|
10
|
+
rows_by_x = {}
|
11
|
+
rorschart_serie.rows.each { |r|
|
12
|
+
rows_by_x[r[0]] = row_nil.dup if rows_by_x[r[0]].nil?
|
13
|
+
rows_by_x[r[0]][r[1]] = r[2]
|
14
|
+
}
|
15
|
+
|
16
|
+
# Flatten rows hash into array matrix
|
17
|
+
@rows = rows_by_x.collect { |row|
|
18
|
+
[row[0], row[1].values].flatten
|
19
|
+
}
|
20
|
+
|
21
|
+
#cols
|
22
|
+
type = rorschart_serie.cols[2][:type]
|
23
|
+
@cols = []
|
24
|
+
@cols << rorschart_serie.cols[0]
|
25
|
+
row_nil.keys.each { |r|
|
26
|
+
@cols << { :type => type, :label => r }
|
27
|
+
}
|
28
|
+
|
29
|
+
sort_by_date!
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def init_cols_with_nil(rorschart_serie)
|
35
|
+
col_nil = {}
|
36
|
+
rorschart_serie.rows.collect{|r| r[1]}.uniq.each{ |c|
|
37
|
+
col_nil[c] = nil
|
38
|
+
}
|
39
|
+
return col_nil
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
module Rorschart
|
2
2
|
|
3
|
-
class
|
3
|
+
class RorschartData
|
4
4
|
|
5
5
|
attr_accessor :cols, :rows
|
6
6
|
|
7
7
|
def initialize(raw_data)
|
8
8
|
|
9
9
|
data = convert_objects_to_array_of_hash(raw_data)
|
10
|
-
data = data.to_pivot if data.is_a? Rorschart::MultipleSeries
|
11
10
|
|
12
11
|
case data
|
13
12
|
when Array
|
@@ -29,7 +28,7 @@ module Rorschart
|
|
29
28
|
def sort_by_date!
|
30
29
|
|
31
30
|
if ['datetime', 'date'].include? @cols.first[:type]
|
32
|
-
@rows.
|
31
|
+
@rows = @rows.sort_by{ |c| c.first }
|
33
32
|
end
|
34
33
|
|
35
34
|
end
|
@@ -2,7 +2,7 @@ module Rorschart
|
|
2
2
|
module GoogleChart
|
3
3
|
module Mapper
|
4
4
|
|
5
|
-
require 'rorschart/
|
5
|
+
require 'rorschart/data/rorschart_data'
|
6
6
|
|
7
7
|
def format_if_needed(data_source)
|
8
8
|
data_source.is_a?(String) ? data_source : to_datatable_format(data_source)
|
@@ -12,14 +12,14 @@ module Rorschart
|
|
12
12
|
|
13
13
|
return data if is_already_converted? data
|
14
14
|
|
15
|
-
if (data.is_a?
|
16
|
-
|
15
|
+
if (data.is_a? RorschartData)
|
16
|
+
r_data = data
|
17
17
|
else
|
18
|
-
|
19
|
-
|
18
|
+
r_data = RorschartData.new(data)
|
19
|
+
r_data.sort_by_date!
|
20
20
|
end
|
21
21
|
|
22
|
-
return {cols:
|
22
|
+
return {cols: r_data.cols, rows: add_rows(r_data.rows) }
|
23
23
|
end
|
24
24
|
|
25
25
|
def is_already_converted?(data)
|
data/lib/rorschart/helper.rb
CHANGED
@@ -19,11 +19,6 @@ module Rorschart
|
|
19
19
|
rorschart_chart "ColumnChart", data_source, options
|
20
20
|
end
|
21
21
|
|
22
|
-
def stacked_column_chart(data_source, options = {})
|
23
|
-
options = {:isStacked => true}.merge(options)
|
24
|
-
rorschart_chart "ColumnChart", data_source, options
|
25
|
-
end
|
26
|
-
|
27
22
|
def bar_chart(data_source, options = {})
|
28
23
|
rorschart_chart "BarChart", data_source, options
|
29
24
|
end
|
@@ -77,4 +72,4 @@ JS
|
|
77
72
|
end
|
78
73
|
|
79
74
|
end
|
80
|
-
end
|
75
|
+
end
|
data/lib/rorschart/version.rb
CHANGED
@@ -0,0 +1,78 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "rorschart/data/rorschart_data"
|
3
|
+
|
4
|
+
module Rorschart
|
5
|
+
|
6
|
+
class TestPivotSeries < Minitest::Unit::TestCase
|
7
|
+
|
8
|
+
def test_pivot
|
9
|
+
|
10
|
+
# Given
|
11
|
+
data = [
|
12
|
+
{"collector_tstamp"=> Date.parse("2013-11-02"), "series" => "A", "count"=> 1},
|
13
|
+
{"collector_tstamp"=> Date.parse("2013-11-02"), "series" => "B", "count"=> 2},
|
14
|
+
{"collector_tstamp"=> Date.parse("2013-11-02"), "series" => "C", "count"=> 3},
|
15
|
+
{"collector_tstamp"=> Date.parse("2013-11-02"), "series" => "D", "count"=> 4},
|
16
|
+
{"collector_tstamp"=> Date.parse("2013-12-01"), "series" => "A", "count"=> 5},
|
17
|
+
{"collector_tstamp"=> Date.parse("2013-12-01"), "series" => "B", "count"=> 6},
|
18
|
+
{"collector_tstamp"=> Date.parse("2013-12-01"), "series" => "D", "count"=> 7}
|
19
|
+
|
20
|
+
]
|
21
|
+
|
22
|
+
# When
|
23
|
+
|
24
|
+
pivot_series = PivotSeries.new(data)
|
25
|
+
|
26
|
+
# assert
|
27
|
+
expected_cols = [
|
28
|
+
{:type=>"date", :label=>"collector_tstamp"},
|
29
|
+
{:type=>"number", :label=>"A"},
|
30
|
+
{:type=>"number", :label=>"B"},
|
31
|
+
{:type=>"number", :label=>"C"},
|
32
|
+
{:type=>"number", :label=>"D"}
|
33
|
+
|
34
|
+
]
|
35
|
+
|
36
|
+
expected_rows = [
|
37
|
+
[Date.parse("2013-11-02"), 1, 2, 3, 4],
|
38
|
+
[Date.parse("2013-12-01"), 5, 6, nil, 7]
|
39
|
+
]
|
40
|
+
|
41
|
+
assert_equal expected_cols, pivot_series.cols
|
42
|
+
assert_equal expected_rows, pivot_series.rows
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
# def test_convert_numeric_grouped_dy_date_and_multiple_fields_into_multiseries
|
47
|
+
|
48
|
+
# # Given
|
49
|
+
# data = [
|
50
|
+
# {"collector_tstamp"=> Date.parse("2013-11-02"), "series" => "A", "count"=> 1},
|
51
|
+
# {"collector_tstamp"=> Date.parse("2013-11-02"), "series" => "B", "count"=> 2},
|
52
|
+
# {"collector_tstamp"=> Date.parse("2013-12-01"), "series" => "A", "count"=> 3},
|
53
|
+
# {"collector_tstamp"=> Date.parse("2013-12-01"), "series" => "B", "count"=> 4}
|
54
|
+
# ]
|
55
|
+
|
56
|
+
# # When
|
57
|
+
# dataTable = to_datatable_format(data)
|
58
|
+
|
59
|
+
# # Then
|
60
|
+
# excepted = {
|
61
|
+
# cols: [
|
62
|
+
# {type: 'date', label: 'collector_tstamp'},
|
63
|
+
# {type: 'number', label: 'A'},
|
64
|
+
# {type: 'number', label: 'B'}
|
65
|
+
# ],
|
66
|
+
# rows: [
|
67
|
+
# {c:[{v: Date.parse("2013-11-02")}, {v: 1}, {v: 2}]},
|
68
|
+
# {c:[{v: Date.parse("2013-12-01")}, {v: 3}, {v: 4}]}
|
69
|
+
# ]
|
70
|
+
# }
|
71
|
+
|
72
|
+
# compare_dataTable excepted, dataTable
|
73
|
+
# end
|
74
|
+
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require "test_helper"
|
2
|
-
require "rorschart/
|
2
|
+
require "rorschart/data/rorschart_data"
|
3
3
|
|
4
4
|
module Rorschart
|
5
5
|
|
6
|
-
class
|
6
|
+
class TestRorschartData < Minitest::Unit::TestCase
|
7
7
|
|
8
8
|
def test_flatten_data
|
9
9
|
|
@@ -16,8 +16,8 @@ module Rorschart
|
|
16
16
|
|
17
17
|
# When
|
18
18
|
|
19
|
-
|
20
|
-
flat =
|
19
|
+
rorschart_data = RorschartData.new(nil)
|
20
|
+
flat = rorschart_data.send(:flatten_array_hash, data)
|
21
21
|
|
22
22
|
# flat = flatten_array_hash(data)
|
23
23
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rorschart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Pantera
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -97,17 +97,19 @@ files:
|
|
97
97
|
- app/assets/javascripts/rorschart.js
|
98
98
|
- app/assets/stylesheets/rorschart.css
|
99
99
|
- lib/rorschart.rb
|
100
|
+
- lib/rorschart/data/multiple_series.rb
|
101
|
+
- lib/rorschart/data/pivot_series.rb
|
102
|
+
- lib/rorschart/data/rorschart_data.rb
|
100
103
|
- lib/rorschart/engine.rb
|
101
104
|
- lib/rorschart/google_chart_mapper.rb
|
102
105
|
- lib/rorschart/google_chart_options.rb
|
103
106
|
- lib/rorschart/helper.rb
|
104
|
-
- lib/rorschart/multiple_series.rb
|
105
|
-
- lib/rorschart/pivot_data.rb
|
106
107
|
- lib/rorschart/rails.rb
|
107
108
|
- lib/rorschart/version.rb
|
108
109
|
- rorschart.gemspec
|
110
|
+
- test/data/pivot_series_test.rb
|
111
|
+
- test/data/rorschart_data_test.rb
|
109
112
|
- test/google_chart_mapper_test.rb
|
110
|
-
- test/pivot_data_test.rb
|
111
113
|
- test/test_helper.rb
|
112
114
|
homepage: https://github.com/epantera/rorschart
|
113
115
|
licenses:
|
@@ -134,6 +136,7 @@ signing_key:
|
|
134
136
|
specification_version: 4
|
135
137
|
summary: Beautiful Google Charts from Rails data structures
|
136
138
|
test_files:
|
139
|
+
- test/data/pivot_series_test.rb
|
140
|
+
- test/data/rorschart_data_test.rb
|
137
141
|
- test/google_chart_mapper_test.rb
|
138
|
-
- test/pivot_data_test.rb
|
139
142
|
- test/test_helper.rb
|