googlecharts 1.6.8 → 1.6.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.
- checksums.yaml +7 -0
- data/.gitignore +4 -1
- data/.travis.yml +8 -0
- data/Gemfile +10 -0
- data/History.txt +6 -0
- data/README.markdown +6 -1
- data/Rakefile +12 -1
- data/googlecharts.gemspec +3 -3
- data/lib/gchart.rb +41 -20
- data/lib/gchart/aliases.rb +0 -1
- data/lib/gchart/version.rb +1 -1
- data/spec/gchart_spec.rb +218 -212
- data/spec/theme_spec.rb +8 -8
- metadata +24 -44
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 94b69525f188994f1689d2ba5014ca625662eee0
|
4
|
+
data.tar.gz: 856ca0857d23d0daf84a4bdbf9705a66963ff1ef
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 81edf88de45d3c7ef7dcd3fb2b23ab969e37617c51b6437f12d8a200ef6f7b510fc3e05fa436639b74aae004208d6b5406d3268abcdf7c2755f3e45e77f4b940
|
7
|
+
data.tar.gz: cda6cd7a28b7fdbe91f609fecd606c24acef7f4f355aa88feb6c4971a7fd0d5f888a08ae23b7f362931a41cfd8742c05e8fa4efe17b7e8139aacffffe1eb41e4
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/History.txt
CHANGED
data/README.markdown
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## Googlecharts
|
2
|
+
|
3
|
+
[](https://travis-ci.org/mattetti/googlecharts)
|
4
|
+
|
1
5
|
The goal of this Gem is to make the creation of Google Charts a simple and easy task.
|
2
6
|
|
3
7
|
require 'googlecharts'
|
@@ -291,6 +295,7 @@ Multi Lines Chart Sample :
|
|
291
295
|
|
292
296
|
chart = Gchart.new( :type => 'line',
|
293
297
|
:title => "example title",
|
298
|
+
:theme => :keynote,
|
294
299
|
:data => [[17, 17, 11, 8, 2],[10, 20, 15, 5, 7],[2, 3, 7, 9, 12]],
|
295
300
|
:line_colors => 'e0440e,e62ae5,287eec',
|
296
301
|
:legend => ['courbe 1','courbe 2','courbe 3'],
|
@@ -313,4 +318,4 @@ try yourself
|
|
313
318
|
"http://chart.apis.google.com/chart?chs=300x200&chdl=matt|patrick&chd=s:AAANUIv,JENCN9y&chtt=SDRuby+Fu+level&chf=bg,lg,0,76A4FB,0,ffffff,1&cht=bvs&chco=ff0000,00ff00"
|
314
319
|
|
315
320
|
Gchart.pie(:data => [20,10,15,5,50], :title => 'SDRuby Fu level', :size => '400x200', :labels => ['matt', 'rob', 'patrick', 'ryan', 'jordan'])
|
316
|
-
http://chart.apis.google.com/chart?cht=p&chs=400x200&chd=s:YMSG9&chtt=SDRuby+Fu+level&chl=matt|rob|patrick|ryan|jordan
|
321
|
+
http://chart.apis.google.com/chart?cht=p&chs=400x200&chd=s:YMSG9&chtt=SDRuby+Fu+level&chl=matt|rob|patrick|ryan|jordan
|
data/Rakefile
CHANGED
@@ -1 +1,12 @@
|
|
1
|
-
require '
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
|
3
|
+
desc 'Default: run specs.'
|
4
|
+
task :default => :spec
|
5
|
+
|
6
|
+
desc "Run specs"
|
7
|
+
RSpec::Core::RakeTask.new do |task|
|
8
|
+
task.pattern = "**/spec/*_spec.rb"
|
9
|
+
task.rspec_opts = []
|
10
|
+
task.rspec_opts << '--color'
|
11
|
+
task.rspec_opts << '-f documentation'
|
12
|
+
end
|
data/googlecharts.gemspec
CHANGED
@@ -6,11 +6,11 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = %q{googlecharts}
|
7
7
|
s.version = GchartInfo::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["Matt Aimonetti", "Andrey Deryabin"]
|
10
|
-
s.date = %q{
|
9
|
+
s.authors = ["Matt Aimonetti", "Andrey Deryabin", "Pedro Pimentel"]
|
10
|
+
s.date = %q{2014-12-15}
|
11
11
|
s.summary = %q{Generate charts using Google API & Ruby}
|
12
12
|
s.description = %q{Generate charts using Google API & Ruby}
|
13
|
-
s.email = %q{mattaimonetti@gmail.com deriabin@gmail.com}
|
13
|
+
s.email = %q{mattaimonetti@gmail.com deriabin@gmail.com zukunft@gmail.com}
|
14
14
|
s.homepage = %q{http://googlecharts.rubyforge.org/}
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
data/lib/gchart.rb
CHANGED
@@ -38,14 +38,14 @@ class Gchart
|
|
38
38
|
'chart.png'
|
39
39
|
end
|
40
40
|
|
41
|
-
attr_accessor :title, :type, :width, :height, :curved, :horizontal, :grouped, :legend, :legend_position, :labels, :data, :encoding, :bar_colors,
|
42
|
-
:title_color, :title_size, :title_alignment, :custom, :axis_with_labels, :axis_labels, :bar_width_and_spacing, :id, :alt, :klass,
|
41
|
+
attr_accessor :title, :type, :width, :height, :curved, :horizontal, :grouped, :overlapped, :legend, :legend_position, :labels, :data, :encoding, :bar_colors,
|
42
|
+
:title_color, :title_size, :title_alignment, :custom, :axis_with_labels, :custom_axis_with_labels, :axis_labels, :bar_width_and_spacing, :id, :alt, :klass,
|
43
43
|
:range_markers, :geographical_area, :map_colors, :country_codes, :axis_range, :filename, :min, :max, :colors, :usemap
|
44
44
|
|
45
45
|
attr_accessor :bg_type, :bg_color, :bg_angle, :chart_type, :chart_color, :chart_angle, :axis_range, :thickness, :new_markers, :grid_lines, :use_ssl
|
46
46
|
|
47
47
|
attr_accessor :min_value, :max_value
|
48
|
-
|
48
|
+
|
49
49
|
types.each do |type|
|
50
50
|
instance_eval <<-DYNCLASSMETH
|
51
51
|
def #{type}(options = {})
|
@@ -73,13 +73,21 @@ class Gchart
|
|
73
73
|
end
|
74
74
|
|
75
75
|
def initialize(options={})
|
76
|
+
# Allow Gchart to take a theme too
|
77
|
+
@theme = options[:theme]
|
78
|
+
options = @theme ? Chart::Theme.load(@theme).to_options.merge(options) : options
|
79
|
+
options.delete(:theme)
|
80
|
+
|
76
81
|
@type = options[:type] || 'line'
|
77
82
|
@data = []
|
78
83
|
@width = 300
|
79
84
|
@height = 200
|
80
85
|
@curved = false
|
81
86
|
@horizontal = false
|
87
|
+
|
82
88
|
@grouped = false
|
89
|
+
@overlapped = false
|
90
|
+
|
83
91
|
@use_ssl = false
|
84
92
|
@encoding = 'simple'
|
85
93
|
# @max_value = 'auto'
|
@@ -106,11 +114,11 @@ class Gchart
|
|
106
114
|
def size=(size='300x200')
|
107
115
|
@width, @height = size.split("x").map { |dimension| dimension.to_i }
|
108
116
|
end
|
109
|
-
|
117
|
+
|
110
118
|
def size
|
111
119
|
"#{width}x#{height}"
|
112
120
|
end
|
113
|
-
|
121
|
+
|
114
122
|
def dimensions
|
115
123
|
# TODO: maybe others?
|
116
124
|
[:line_xy, :scatter].include?(type) ? 2 : 1
|
@@ -125,9 +133,14 @@ class Gchart
|
|
125
133
|
end
|
126
134
|
end
|
127
135
|
|
128
|
-
|
129
|
-
|
130
|
-
|
136
|
+
def bar_presentation
|
137
|
+
if @overlapped
|
138
|
+
'o'
|
139
|
+
elsif @grouped
|
140
|
+
'g'
|
141
|
+
else
|
142
|
+
's'
|
143
|
+
end
|
131
144
|
end
|
132
145
|
|
133
146
|
def bg=(options)
|
@@ -149,7 +162,7 @@ class Gchart
|
|
149
162
|
@chart_angle = options[:angle]
|
150
163
|
end
|
151
164
|
end
|
152
|
-
|
165
|
+
|
153
166
|
def max_value=(max_v)
|
154
167
|
if max_v =~ /false/
|
155
168
|
@max_value = false
|
@@ -174,7 +187,7 @@ class Gchart
|
|
174
187
|
ds.each_with_index do |mds, mds_index|
|
175
188
|
mds[:min_value] ||= min_value
|
176
189
|
mds[:max_value] ||= max_value
|
177
|
-
|
190
|
+
|
178
191
|
if mds_index == 0 && type.to_s == 'bar'
|
179
192
|
# TODO: unless you specify a zero line (using chp or chds),
|
180
193
|
# the min_value of a bar chart is always 0.
|
@@ -235,7 +248,7 @@ class Gchart
|
|
235
248
|
@dataset
|
236
249
|
end
|
237
250
|
end
|
238
|
-
|
251
|
+
|
239
252
|
# Sets of data to handle multiple sets
|
240
253
|
def datasets
|
241
254
|
datasets = []
|
@@ -248,7 +261,7 @@ class Gchart
|
|
248
261
|
end
|
249
262
|
datasets
|
250
263
|
end
|
251
|
-
|
264
|
+
|
252
265
|
def self.jstize(string)
|
253
266
|
# See http://github.com/mattetti/googlecharts/issues#issue/27
|
254
267
|
#URI.escape( string ).gsub("%7C", "|")
|
@@ -313,7 +326,7 @@ class Gchart
|
|
313
326
|
# The title size cannot be set without specifying a color.
|
314
327
|
# A dark key will be used for the title color if no color is specified
|
315
328
|
def set_title
|
316
|
-
title_params = "chtt=#{title}"
|
329
|
+
title_params = "chtt=#{title}".gsub(/\|/,"\n")
|
317
330
|
unless (title_color.nil? && title_size.nil? && title_alignment.nil?)
|
318
331
|
title_params << "&chts=" + (color, size, alignment = (title_color || '454545'), title_size, (title_alignment.to_s[0,1] || 'c')).compact.join(',')
|
319
332
|
end
|
@@ -460,6 +473,11 @@ class Gchart
|
|
460
473
|
"chxt=#{axis_with_labels}"
|
461
474
|
end
|
462
475
|
|
476
|
+
def set_custom_axis_with_labels
|
477
|
+
@custom_axis_with_labels = custom_axis_with_labels.join(',') if @custom_axis_with_labels.is_a?(Array)
|
478
|
+
"chxp=#{custom_axis_with_labels}"
|
479
|
+
end
|
480
|
+
|
463
481
|
def set_axis_labels
|
464
482
|
if axis_labels.is_a?(Array)
|
465
483
|
if RUBY_VERSION.to_f < 1.9
|
@@ -519,7 +537,7 @@ class Gchart
|
|
519
537
|
when 'radar'
|
520
538
|
"r" + (curved? ? 's' : '')
|
521
539
|
when 'bar'
|
522
|
-
"b" + (horizontal? ? "h" : "v") +
|
540
|
+
"b" + (horizontal? ? "h" : "v") + bar_presentation
|
523
541
|
end
|
524
542
|
end
|
525
543
|
|
@@ -530,7 +548,7 @@ class Gchart
|
|
530
548
|
when 'stripes' then 'ls'
|
531
549
|
end
|
532
550
|
end
|
533
|
-
|
551
|
+
|
534
552
|
def number_visible
|
535
553
|
n = 0
|
536
554
|
dataset.each do |mds|
|
@@ -543,7 +561,7 @@ class Gchart
|
|
543
561
|
end
|
544
562
|
""
|
545
563
|
end
|
546
|
-
|
564
|
+
|
547
565
|
# Turns input into an array of axis hashes, dependent on the chart type
|
548
566
|
def convert_dataset(ds)
|
549
567
|
if dimensions == 2
|
@@ -563,7 +581,7 @@ class Gchart
|
|
563
581
|
end
|
564
582
|
ds
|
565
583
|
end
|
566
|
-
|
584
|
+
|
567
585
|
# just an alias
|
568
586
|
def axis_set
|
569
587
|
dataset
|
@@ -577,7 +595,7 @@ class Gchart
|
|
577
595
|
value.nil? ? "_" : value
|
578
596
|
end
|
579
597
|
end
|
580
|
-
|
598
|
+
|
581
599
|
def convert_to_extended_value(number)
|
582
600
|
if number.nil?
|
583
601
|
'__'
|
@@ -586,7 +604,7 @@ class Gchart
|
|
586
604
|
value.nil? ? "__" : value
|
587
605
|
end
|
588
606
|
end
|
589
|
-
|
607
|
+
|
590
608
|
def encode_scaled_dataset(chars, nil_char)
|
591
609
|
dsets = []
|
592
610
|
dataset.each do |ds|
|
@@ -655,6 +673,7 @@ class Gchart
|
|
655
673
|
def query_builder(options="")
|
656
674
|
query_params = instance_variables.sort.map do |var|
|
657
675
|
case var.to_s
|
676
|
+
|
658
677
|
when '@data'
|
659
678
|
set_data unless data == []
|
660
679
|
# Set the graph size
|
@@ -673,7 +692,7 @@ class Gchart
|
|
673
692
|
when '@thickness'
|
674
693
|
set_line_thickness
|
675
694
|
when '@new_markers'
|
676
|
-
|
695
|
+
set_line_markers
|
677
696
|
when '@bg_color'
|
678
697
|
set_colors
|
679
698
|
when '@chart_color'
|
@@ -690,6 +709,8 @@ class Gchart
|
|
690
709
|
set_range_markers
|
691
710
|
when '@grid_lines'
|
692
711
|
set_grid_lines
|
712
|
+
when '@custom_axis_with_labels'
|
713
|
+
set_custom_axis_with_labels
|
693
714
|
when '@geographical_area'
|
694
715
|
set_geographical_area
|
695
716
|
when '@country_codes'
|
data/lib/gchart/aliases.rb
CHANGED
data/lib/gchart/version.rb
CHANGED
data/spec/gchart_spec.rb
CHANGED
@@ -7,11 +7,16 @@ Chart::Theme.add_theme_file("#{File.dirname(__FILE__)}/fixtures/test_theme.yml")
|
|
7
7
|
# http://rspec.rubyforge.org/
|
8
8
|
describe "The Gchart class" do
|
9
9
|
it "should show supported_types on error" do
|
10
|
-
Gchart.supported_types.
|
10
|
+
expect(Gchart.supported_types).to match(/line/)
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should return supported types" do
|
14
|
-
Gchart.types.include
|
14
|
+
expect(Gchart.types).to include('line')
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should support theme option" do
|
18
|
+
chart = Gchart.new(:type => 'line',:theme => :test)
|
19
|
+
expect(chart.send('url')).to include('chco=6886B4,FDD84E')
|
15
20
|
end
|
16
21
|
end
|
17
22
|
|
@@ -21,121 +26,122 @@ describe "generating a default Gchart" do
|
|
21
26
|
@chart = Gchart.line
|
22
27
|
end
|
23
28
|
|
29
|
+
it "should create a line break when a pipe character is encountered" do
|
30
|
+
@chart = Gchart.line(:title => "title|subtitle")
|
31
|
+
expect(@chart).to include("chtt=title\nsubtitle")
|
32
|
+
end
|
33
|
+
|
24
34
|
it "should include the Google URL" do
|
25
|
-
@chart.include
|
35
|
+
expect(@chart).to include("http://chart.apis.google.com/chart?")
|
26
36
|
end
|
27
37
|
|
28
38
|
it "should have a default size" do
|
29
|
-
@chart.
|
39
|
+
expect(@chart).to include('chs=300x200')
|
30
40
|
end
|
31
41
|
|
32
42
|
it "should be able to have a custom size" do
|
33
|
-
Gchart.line(:size => '400x600').include
|
34
|
-
Gchart.line(:width => 400, :height => 600).include
|
43
|
+
expect(Gchart.line(:size => '400x600')).to include('chs=400x600')
|
44
|
+
expect(Gchart.line(:width => 400, :height => 600)).to include('chs=400x600')
|
35
45
|
end
|
36
46
|
|
37
47
|
it "should have query parameters in predictable order" do
|
38
|
-
Gchart.line(:axis_with_labels => 'x,y,r', :size => '400x600').
|
48
|
+
expect(Gchart.line(:axis_with_labels => 'x,y,r', :size => '400x600')).to match(/chxt=.+cht=.+chs=/)
|
39
49
|
end
|
40
50
|
|
41
51
|
it "should have a type" do
|
42
|
-
@chart.include
|
52
|
+
expect(@chart).to include('cht=lc')
|
43
53
|
end
|
44
54
|
|
45
55
|
it 'should use theme defaults if theme is set' do
|
46
|
-
Gchart.line(:theme=>:test).
|
47
|
-
|
48
|
-
Gchart.line(:theme=>:test).should include(Gchart.jstize('chf=c,s,FFFFFF|bg,s,FFFFFF'))
|
49
|
-
else
|
50
|
-
Gchart.line(:theme=>:test).should include(Gchart.jstize('chf=bg,s,FFFFFF|c,s,FFFFFF'))
|
51
|
-
end
|
56
|
+
expect(Gchart.line(:theme=>:test)).to include('chco=6886B4,FDD84E')
|
57
|
+
expect(Gchart.line(:theme=>:test)).to match(/chf=(c,s,FFFFFF\|bg,s,FFFFFF|bg,s,FFFFFF\|c,s,FFFFFF)/)
|
52
58
|
end
|
53
59
|
|
54
60
|
it "should use the simple encoding by default with auto max value" do
|
55
61
|
# 9 is the max value in simple encoding, 26 being our max value the 2nd encoded value should be 9
|
56
|
-
Gchart.line(:data => [0, 26]).
|
57
|
-
Gchart.line(:data => [0, 26], :max_value => 26, :axis_with_labels => 'y').
|
62
|
+
expect(Gchart.line(:data => [0, 26])).to include('chd=s:A9')
|
63
|
+
expect(Gchart.line(:data => [0, 26], :max_value => 26, :axis_with_labels => 'y')).to include('chxr=0,0,26')
|
58
64
|
end
|
59
65
|
|
60
66
|
it "should support simple encoding with and without max_value" do
|
61
|
-
Gchart.line(:data => [0, 26], :max_value => 26).
|
62
|
-
Gchart.line(:data => [0, 26], :max_value => false).
|
67
|
+
expect(Gchart.line(:data => [0, 26], :max_value => 26)).to include('chd=s:A9')
|
68
|
+
expect(Gchart.line(:data => [0, 26], :max_value => false)).to include('chd=s:Aa')
|
63
69
|
end
|
64
70
|
|
65
71
|
it "should support the extended encoding and encode properly" do
|
66
|
-
Gchart.line(:data => [0, 10], :encoding => 'extended', :max_value => false).include
|
67
|
-
Gchart.line(:encoding => 'extended',
|
72
|
+
expect(Gchart.line(:data => [0, 10], :encoding => 'extended', :max_value => false)).to include('chd=e:AA')
|
73
|
+
expect(Gchart.line(:encoding => 'extended',
|
68
74
|
:max_value => false,
|
69
75
|
:data => [[0,25,26,51,52,61,62,63], [64,89,90,115,4084]]
|
70
|
-
).include
|
76
|
+
)).to include('chd=e:AAAZAaAzA0A9A-A.,BABZBaBz.0')
|
71
77
|
end
|
72
78
|
|
73
79
|
it "should auto set the max value for extended encoding" do
|
74
|
-
Gchart.line(:data => [0, 25], :encoding => 'extended', :max_value => false).
|
80
|
+
expect(Gchart.line(:data => [0, 25], :encoding => 'extended', :max_value => false)).to include('chd=e:AAAZ')
|
75
81
|
# Extended encoding max value is '..'
|
76
|
-
Gchart.line(:data => [0, 25], :encoding => 'extended').include
|
82
|
+
expect(Gchart.line(:data => [0, 25], :encoding => 'extended')).to include('chd=e:AA..')
|
77
83
|
end
|
78
84
|
|
79
85
|
it "should be able to have data with text encoding" do
|
80
|
-
Gchart.line(:data => [10, 5.2, 4, 45, 78], :encoding => 'text').
|
86
|
+
expect(Gchart.line(:data => [10, 5.2, 4, 45, 78], :encoding => 'text')).to include('chd=t:10,5.2,4,45,78')
|
81
87
|
end
|
82
88
|
|
83
89
|
it "should be able to have missing data points with text encoding" do
|
84
|
-
Gchart.line(:data => [10, 5.2, nil, 45, 78], :encoding => 'text').
|
90
|
+
expect(Gchart.line(:data => [10, 5.2, nil, 45, 78], :encoding => 'text')).to include('chd=t:10,5.2,_,45,78')
|
85
91
|
end
|
86
92
|
|
87
93
|
it "should handle max and min values with text encoding" do
|
88
|
-
Gchart.line(:data => [10, 5.2, 4, 45, 78], :encoding => 'text').
|
94
|
+
expect(Gchart.line(:data => [10, 5.2, 4, 45, 78], :encoding => 'text')).to include('chds=0,78')
|
89
95
|
end
|
90
96
|
|
91
97
|
it "should automatically handle negative values with proper max/min limits when using text encoding" do
|
92
|
-
Gchart.line(:data => [-10, 5.2, 4, 45, 78], :encoding => 'text').
|
98
|
+
expect(Gchart.line(:data => [-10, 5.2, 4, 45, 78], :encoding => 'text')).to include('chds=-10,78')
|
93
99
|
end
|
94
100
|
|
95
101
|
it "should handle negative values with manual max/min limits when using text encoding" do
|
96
|
-
Gchart.line(:data => [-10, 5.2, 4, 45, 78], :encoding => 'text', :min_value => -20, :max_value => 100).include
|
102
|
+
expect(Gchart.line(:data => [-10, 5.2, 4, 45, 78], :encoding => 'text', :min_value => -20, :max_value => 100)).to include('chds=-20,100')
|
97
103
|
end
|
98
104
|
|
99
105
|
it "should set the proper axis values when using text encoding and negative values" do
|
100
|
-
Gchart.bar( :data => [[-10], [100]],
|
106
|
+
expect(Gchart.bar( :data => [[-10], [100]],
|
101
107
|
:encoding => 'text',
|
102
108
|
:horizontal => true,
|
103
109
|
:min_value => -20,
|
104
110
|
:max_value => 100,
|
105
111
|
:axis_with_labels => 'x',
|
106
|
-
:bar_colors => ['FD9A3B', '4BC7DC']).
|
112
|
+
:bar_colors => ['FD9A3B', '4BC7DC'])).to include("chxr=0,-20,100")
|
107
113
|
end
|
108
114
|
|
109
115
|
it "should be able to have multiple set of data with text encoding" do
|
110
|
-
Gchart.line(:data => [[10, 5.2, 4, 45, 78], [20, 40, 70, 15, 99]], :encoding => 'text').include
|
116
|
+
expect(Gchart.line(:data => [[10, 5.2, 4, 45, 78], [20, 40, 70, 15, 99]], :encoding => 'text')).to include(Gchart.jstize('chd=t:10,5.2,4,45,78|20,40,70,15,99'))
|
111
117
|
end
|
112
118
|
|
113
119
|
it "should be able to receive a custom param" do
|
114
|
-
Gchart.line(:custom => 'ceci_est_une_pipe').include
|
120
|
+
expect(Gchart.line(:custom => 'ceci_est_une_pipe')).to include('ceci_est_une_pipe')
|
115
121
|
end
|
116
122
|
|
117
123
|
it "should be able to set label axis" do
|
118
|
-
Gchart.line(:axis_with_labels => 'x,y,r').include
|
119
|
-
Gchart.line(:axis_with_labels => ['x','y','r']).include
|
124
|
+
expect(Gchart.line(:axis_with_labels => 'x,y,r')).to include('chxt=x,y,r')
|
125
|
+
expect(Gchart.line(:axis_with_labels => ['x','y','r'])).to include('chxt=x,y,r')
|
120
126
|
end
|
121
127
|
|
122
128
|
it "should be able to have axis labels" do
|
123
|
-
Gchart.line(:axis_labels => ['Jan|July|Jan|July|Jan', '0|100', 'A|B|C', '2005|2006|2007']).include
|
124
|
-
Gchart.line(:axis_labels => ['Jan|July|Jan|July|Jan']).include
|
125
|
-
Gchart.line(:axis_labels => [['Jan','July','Jan','July','Jan']]).include
|
126
|
-
Gchart.line(:axis_labels => [['Jan','July','Jan','July','Jan'], ['0','100'], ['A','B','C'], ['2005','2006','2007']]).include
|
129
|
+
expect(Gchart.line(:axis_labels => ['Jan|July|Jan|July|Jan', '0|100', 'A|B|C', '2005|2006|2007'])).to include(Gchart.jstize('chxl=0:|Jan|July|Jan|July|Jan|1:|0|100|2:|A|B|C|3:|2005|2006|2007'))
|
130
|
+
expect(Gchart.line(:axis_labels => ['Jan|July|Jan|July|Jan'])).to include(Gchart.jstize('chxl=0:|Jan|July|Jan|July|Jan'))
|
131
|
+
expect(Gchart.line(:axis_labels => [['Jan','July','Jan','July','Jan']])).to include(Gchart.jstize('chxl=0:|Jan|July|Jan|July|Jan'))
|
132
|
+
expect(Gchart.line(:axis_labels => [['Jan','July','Jan','July','Jan'], ['0','100'], ['A','B','C'], ['2005','2006','2007']])).to include(Gchart.jstize('chxl=0:|Jan|July|Jan|July|Jan|1:|0|100|2:|A|B|C|3:|2005|2006|2007'))
|
127
133
|
end
|
128
|
-
|
134
|
+
|
129
135
|
def labeled_line(options = {})
|
130
136
|
Gchart.line({:data => @data, :axis_with_labels => 'x,y'}.merge(options))
|
131
137
|
end
|
132
138
|
|
133
139
|
it "should display ranges properly" do
|
134
140
|
@data = [85,107,123,131,155,172,173,189,203,222,217,233,250,239,256,267,247,261,275,295,288,305,322,307,325,347,331,346,363,382,343,359,383,352,374,393,358,379,396,416,377,398,419,380,409,426,453,432,452,465,436,460,480,440,457,474,501,457,489,507,347,373,413,402,424,448,475,488,513,475,507,530,440,476,500,518,481,512,531,367,396,423,387,415,446,478,442,469,492,463,489,508,463,491,518,549,503,526,547,493,530,549,493,520,541,564,510,535,564,492,512,537,502,530,548,491,514,538,568,524,548,568,512,533,552,577,520,545,570,516,536,555,514,536,566,521,553,579,604,541,569,595,551,581,602,549,576,606,631,589,615,650,597,624,646,672,605,626,654,584,608,631,574,597,622,559,591,614,644,580,603,629,584,615,631,558,591,618,641,314,356,395,397,429,450,421,454,477,507,458,490,560,593]
|
135
|
-
labeled_line(:axis_labels => [((1..24).to_a << 1)]).
|
136
|
-
|
141
|
+
expect(labeled_line(:axis_labels => [((1..24).to_a << 1)])).
|
142
|
+
to include('chxr=0,85,672')
|
137
143
|
end
|
138
|
-
|
144
|
+
|
139
145
|
def labeled_bar(options = {})
|
140
146
|
Gchart.bar({:data => @data,
|
141
147
|
:axis_with_labels => 'x,y',
|
@@ -146,117 +152,115 @@ describe "generating a default Gchart" do
|
|
146
152
|
|
147
153
|
it "should force the y range properly" do
|
148
154
|
@data = [1,1,1,1,1,1,1,1,6,2,1,1]
|
149
|
-
labeled_bar(
|
155
|
+
expect(labeled_bar(
|
150
156
|
:axis_range => [[0,0],[0,16]]
|
151
|
-
).
|
152
|
-
labeled_bar(
|
157
|
+
)).to include('chxr=0,0,0|1,0,16')
|
158
|
+
expect(labeled_bar(
|
153
159
|
:max_value => 16,
|
154
160
|
:axis_range => [[0,0],[0,16]]
|
155
|
-
).
|
161
|
+
)).to include('chxr=0,0,16|1,0,16')
|
156
162
|
|
157
163
|
# nil means ignore axis
|
158
|
-
labeled_bar(
|
164
|
+
expect(labeled_bar(
|
159
165
|
:axis_range => [nil,[0,16]]
|
160
|
-
).
|
166
|
+
)).to include('chxr=1,0,16')
|
161
167
|
|
162
168
|
# empty array means take defaults
|
163
|
-
labeled_bar(
|
169
|
+
expect(labeled_bar(
|
164
170
|
:max_value => 16,
|
165
171
|
:axis_range => [[],[0,16]]
|
166
|
-
).
|
167
|
-
labeled_bar(
|
172
|
+
)).to include('chxr=0,0,16|1,0,16')
|
173
|
+
expect(labeled_bar(
|
168
174
|
:axis_range => [[],[0,16]]
|
169
|
-
).
|
175
|
+
)).to include('chxr=0,0|1,0,16')
|
170
176
|
|
171
|
-
Gchart.line(
|
177
|
+
expect(Gchart.line(
|
172
178
|
:data => [0,20, 40, 60, 140, 230, 60],
|
173
|
-
:axis_with_labels => 'y').
|
179
|
+
:axis_with_labels => 'y')).to include("chxr=0,0,230")
|
174
180
|
end
|
175
|
-
|
181
|
+
|
176
182
|
it "should take in consideration the max value when creating a range" do
|
177
183
|
data = [85,107,123,131,155,172,173,189,203,222,217,233,250,239,256,267,247,261,275,295,288,305,322,307,325,347,331,346,363,382,343,359,383,352,374,393,358,379,396,416,377,398,419,380,409,426,453,432,452,465,436,460,480,440,457,474,501,457,489,507,347,373,413,402,424,448,475,488,513,475,507,530,440,476,500,518,481,512,531,367,396,423,387,415,446,478,442,469,492,463,489,508,463,491,518,549,503,526,547,493,530,549,493,520,541,564,510,535,564,492,512,537,502,530,548,491,514,538,568,524,548,568,512,533,552,577,520,545,570,516,536,555,514,536,566,521,553,579,604,541,569,595,551,581,602,549,576,606,631,589,615,650,597,624,646,672,605,626,654,584,608,631,574,597,622,559,591,614,644,580,603,629,584,615,631,558,591,618,641,314,356,395,397,429,450,421,454,477,507,458,490,560,593]
|
178
184
|
url = Gchart.line(:data => data, :axis_with_labels => 'x,y', :axis_labels => [((1..24).to_a << 1)], :max_value => 700)
|
179
|
-
url.
|
185
|
+
expect(url).to include('chxr=0,85,700')
|
180
186
|
end
|
181
|
-
|
187
|
+
|
182
188
|
it 'should generate different labels and legend' do
|
183
|
-
Gchart.pie(:legend => %w(1 2 3), :labels=>%w(one two three)).
|
189
|
+
expect(Gchart.pie(:legend => %w(1 2 3), :labels=>%w(one two three))).to(include('chdl=1|2|3') && include('chl=one|two|three'))
|
184
190
|
end
|
185
|
-
|
186
191
|
end
|
187
192
|
|
188
193
|
describe "generating different type of charts" do
|
189
194
|
|
190
195
|
it "should be able to generate a line chart" do
|
191
|
-
Gchart.line.
|
192
|
-
Gchart.line.include
|
196
|
+
expect(Gchart.line).to be_an_instance_of(String)
|
197
|
+
expect(Gchart.line).to include('cht=lc')
|
193
198
|
end
|
194
199
|
|
195
200
|
it "should be able to generate a sparkline chart" do
|
196
|
-
Gchart.sparkline.
|
197
|
-
Gchart.sparkline.include
|
201
|
+
expect(Gchart.sparkline).to be_an_instance_of(String)
|
202
|
+
expect(Gchart.sparkline).to include('cht=ls')
|
198
203
|
end
|
199
204
|
|
200
205
|
it "should be able to generate a line xy chart" do
|
201
|
-
Gchart.line_xy.
|
202
|
-
Gchart.line_xy.include
|
206
|
+
expect(Gchart.line_xy).to be_an_instance_of(String)
|
207
|
+
expect(Gchart.line_xy).to include('cht=lxy')
|
203
208
|
end
|
204
209
|
|
205
210
|
it "should be able to generate a scatter chart" do
|
206
|
-
Gchart.scatter.
|
207
|
-
Gchart.scatter.include
|
211
|
+
expect(Gchart.scatter).to be_an_instance_of(String)
|
212
|
+
expect(Gchart.scatter).to include('cht=s')
|
208
213
|
end
|
209
214
|
|
210
215
|
it "should be able to generate a bar chart" do
|
211
|
-
Gchart.bar.
|
212
|
-
Gchart.bar.include
|
216
|
+
expect(Gchart.bar).to be_an_instance_of(String)
|
217
|
+
expect(Gchart.bar).to include('cht=bvs')
|
213
218
|
end
|
214
219
|
|
215
220
|
it "should be able to generate a Venn diagram" do
|
216
|
-
Gchart.venn.
|
217
|
-
Gchart.venn.include
|
221
|
+
expect(Gchart.venn).to be_an_instance_of(String)
|
222
|
+
expect(Gchart.venn).to include('cht=v')
|
218
223
|
end
|
219
224
|
|
220
225
|
it "should be able to generate a Pie Chart" do
|
221
|
-
Gchart.pie.
|
222
|
-
Gchart.pie.include
|
226
|
+
expect(Gchart.pie).to be_an_instance_of(String)
|
227
|
+
expect(Gchart.pie).to include('cht=p')
|
223
228
|
end
|
224
229
|
|
225
230
|
it "should be able to generate a Google-O-Meter" do
|
226
|
-
Gchart.meter.
|
227
|
-
Gchart.meter.include
|
231
|
+
expect(Gchart.meter).to be_an_instance_of(String)
|
232
|
+
expect(Gchart.meter).to include('cht=gom')
|
228
233
|
end
|
229
234
|
|
230
235
|
it "should be able to generate a map chart" do
|
231
|
-
Gchart.map.
|
232
|
-
Gchart.map.include
|
236
|
+
expect(Gchart.map).to be_an_instance_of(String)
|
237
|
+
expect(Gchart.map).to include('cht=t')
|
233
238
|
end
|
234
239
|
|
235
240
|
it "should not support other types" do
|
236
241
|
msg = "sexy is not a supported chart format. Please use one of the following: #{Gchart.supported_types}."
|
237
|
-
|
242
|
+
expect{Gchart.sexy}.to raise_error(NoMethodError)
|
238
243
|
end
|
239
|
-
|
240
244
|
end
|
241
245
|
|
242
246
|
|
243
247
|
describe "range markers" do
|
244
248
|
|
245
249
|
it "should be able to generate given a hash of range-marker options" do
|
246
|
-
Gchart.line(:range_markers => {:start_position => 0.59, :stop_position => 0.61, :color => 'ff0000'}).include
|
250
|
+
expect(Gchart.line(:range_markers => {:start_position => 0.59, :stop_position => 0.61, :color => 'ff0000'})).to include('chm=r,ff0000,0,0.59,0.61')
|
247
251
|
end
|
248
252
|
|
249
253
|
it "should be able to generate given an array of range-marker hash options" do
|
250
|
-
Gchart.line(:range_markers => [
|
254
|
+
expect(Gchart.line(:range_markers => [
|
251
255
|
{:start_position => 0.59, :stop_position => 0.61, :color => 'ff0000'},
|
252
256
|
{:start_position => 0, :stop_position => 0.6, :color => '666666'},
|
253
257
|
{:color => 'cccccc', :start_position => 0.6, :stop_position => 1}
|
254
|
-
]).include
|
258
|
+
])).to include(Gchart.jstize('r,ff0000,0,0.59,0.61|r,666666,0,0,0.6|r,cccccc,0,0.6,1'))
|
255
259
|
end
|
256
260
|
|
257
261
|
it "should allow a :overlaid? to be set" do
|
258
|
-
Gchart.line(:range_markers => {:start_position => 0.59, :stop_position => 0.61, :color => 'ffffff', :overlaid? => true}).include
|
259
|
-
Gchart.line(:range_markers => {:start_position => 0.59, :stop_position => 0.61, :color => 'ffffff', :overlaid? => false}).include
|
262
|
+
expect(Gchart.line(:range_markers => {:start_position => 0.59, :stop_position => 0.61, :color => 'ffffff', :overlaid? => true})).to include('chm=r,ffffff,0,0.59,0.61,1')
|
263
|
+
expect(Gchart.line(:range_markers => {:start_position => 0.59, :stop_position => 0.61, :color => 'ffffff', :overlaid? => false})).to include('chm=r,ffffff,0,0.59,0.61')
|
260
264
|
end
|
261
265
|
|
262
266
|
describe "when setting the orientation option" do
|
@@ -265,75 +269,76 @@ describe "range markers" do
|
|
265
269
|
end
|
266
270
|
|
267
271
|
it "to vertical (R) if given a valid option" do
|
268
|
-
Gchart.line(:range_markers => @options.merge(:orientation => 'v')).include
|
269
|
-
Gchart.line(:range_markers => @options.merge(:orientation => 'V')).include
|
270
|
-
Gchart.line(:range_markers => @options.merge(:orientation => 'R')).include
|
271
|
-
Gchart.line(:range_markers => @options.merge(:orientation => 'vertical')).include
|
272
|
-
Gchart.line(:range_markers => @options.merge(:orientation => 'Vertical')).include
|
272
|
+
expect(Gchart.line(:range_markers => @options.merge(:orientation => 'v'))).to include('chm=R')
|
273
|
+
expect(Gchart.line(:range_markers => @options.merge(:orientation => 'V'))).to include('chm=R')
|
274
|
+
expect(Gchart.line(:range_markers => @options.merge(:orientation => 'R'))).to include('chm=R')
|
275
|
+
expect(Gchart.line(:range_markers => @options.merge(:orientation => 'vertical'))).to include('chm=R')
|
276
|
+
expect(Gchart.line(:range_markers => @options.merge(:orientation => 'Vertical'))).to include('chm=R')
|
273
277
|
end
|
274
278
|
|
275
279
|
it "to horizontal (r) if given a valid option (actually anything other than the vertical options)" do
|
276
|
-
Gchart.line(:range_markers => @options.merge(:orientation => 'horizontal')).include
|
277
|
-
Gchart.line(:range_markers => @options.merge(:orientation => 'h')).include
|
278
|
-
Gchart.line(:range_markers => @options.merge(:orientation => 'etc')).include
|
280
|
+
expect(Gchart.line(:range_markers => @options.merge(:orientation => 'horizontal'))).to include('chm=r')
|
281
|
+
expect(Gchart.line(:range_markers => @options.merge(:orientation => 'h'))).to include('chm=r')
|
282
|
+
expect(Gchart.line(:range_markers => @options.merge(:orientation => 'etc'))).to include('chm=r')
|
279
283
|
end
|
280
284
|
|
281
285
|
it "if left blank defaults to horizontal (r)" do
|
282
|
-
Gchart.line(:range_markers => @options).include
|
286
|
+
expect(Gchart.line(:range_markers => @options)).to include('chm=r')
|
283
287
|
end
|
284
288
|
end
|
285
|
-
|
286
289
|
end
|
287
290
|
|
288
291
|
|
289
292
|
describe "a bar graph" do
|
290
293
|
|
291
294
|
it "should have a default vertical orientation" do
|
292
|
-
Gchart.bar.include
|
295
|
+
expect(Gchart.bar).to include('cht=bvs')
|
293
296
|
end
|
294
297
|
|
295
298
|
it "should be able to have a different orientation" do
|
296
|
-
Gchart.bar(:orientation => 'vertical').include
|
297
|
-
Gchart.bar(:orientation => 'v').include
|
298
|
-
Gchart.bar(:orientation => 'h').include
|
299
|
-
Gchart.bar(:orientation => 'horizontal').include
|
300
|
-
Gchart.bar(:horizontal => false).include
|
299
|
+
expect(Gchart.bar(:orientation => 'vertical')).to include('cht=bvs')
|
300
|
+
expect(Gchart.bar(:orientation => 'v')).to include('cht=bvs')
|
301
|
+
expect(Gchart.bar(:orientation => 'h')).to include('cht=bhs')
|
302
|
+
expect(Gchart.bar(:orientation => 'horizontal')).to include('cht=bhs')
|
303
|
+
expect(Gchart.bar(:horizontal => false)).to include('cht=bvs')
|
301
304
|
end
|
302
305
|
|
303
306
|
it "should be set to be stacked by default" do
|
304
|
-
Gchart.bar.include
|
307
|
+
expect(Gchart.bar).to include('cht=bvs')
|
305
308
|
end
|
306
309
|
|
307
|
-
it "should be able to stacked or
|
308
|
-
Gchart.bar(:stacked => true).include
|
309
|
-
Gchart.bar(:stacked => false).include
|
310
|
-
Gchart.bar(:grouped => true).include
|
311
|
-
Gchart.bar(:grouped => false).include
|
310
|
+
it "should be able to stacked, grouped or overlapped" do
|
311
|
+
expect(Gchart.bar(:stacked => true)).to include('cht=bvs')
|
312
|
+
expect(Gchart.bar(:stacked => false)).to include('cht=bvs')
|
313
|
+
expect(Gchart.bar(:grouped => true)).to include('cht=bvg')
|
314
|
+
expect(Gchart.bar(:grouped => false)).to include('cht=bvs')
|
315
|
+
expect(Gchart.bar(:overlapped => true)).to include('cht=bvo')
|
316
|
+
expect(Gchart.bar(:overlapped => false)).to include('cht=bvs')
|
312
317
|
end
|
313
318
|
|
314
319
|
it "should be able to have different bar colors" do
|
315
|
-
Gchart.bar(:bar_colors => 'efefef,00ffff').include
|
316
|
-
Gchart.bar(:bar_colors => 'efefef,00ffff').include
|
320
|
+
expect(Gchart.bar(:bar_colors => 'efefef,00ffff')).to include('chco=')
|
321
|
+
expect(Gchart.bar(:bar_colors => 'efefef,00ffff')).to include('chco=efefef,00ffff')
|
317
322
|
# alias
|
318
|
-
Gchart.bar(:bar_color => 'efefef').include
|
323
|
+
expect(Gchart.bar(:bar_color => 'efefef')).to include('chco=efefef')
|
319
324
|
end
|
320
325
|
|
321
326
|
it "should be able to have different bar colors when using an array of colors" do
|
322
|
-
Gchart.bar(:bar_colors => ['efefef','00ffff']).include
|
327
|
+
expect(Gchart.bar(:bar_colors => ['efefef','00ffff'])).to include('chco=efefef,00ffff')
|
323
328
|
end
|
324
329
|
|
325
330
|
it 'should be able to accept a string of width and spacing options' do
|
326
|
-
Gchart.bar(:bar_width_and_spacing => '25,6').include
|
331
|
+
expect(Gchart.bar(:bar_width_and_spacing => '25,6')).to include('chbh=25,6')
|
327
332
|
end
|
328
333
|
|
329
334
|
it 'should be able to accept a single fixnum width and spacing option to set the bar width' do
|
330
|
-
Gchart.bar(:bar_width_and_spacing => 25).include
|
335
|
+
expect(Gchart.bar(:bar_width_and_spacing => 25)).to include('chbh=25')
|
331
336
|
end
|
332
337
|
|
333
338
|
it 'should be able to accept an array of width and spacing options' do
|
334
|
-
Gchart.bar(:bar_width_and_spacing => [25,6,12]).include
|
335
|
-
Gchart.bar(:bar_width_and_spacing => [25,6]).include
|
336
|
-
Gchart.bar(:bar_width_and_spacing => [25]).include
|
339
|
+
expect(Gchart.bar(:bar_width_and_spacing => [25,6,12])).to include('chbh=25,6,12')
|
340
|
+
expect(Gchart.bar(:bar_width_and_spacing => [25,6])).to include('chbh=25,6')
|
341
|
+
expect(Gchart.bar(:bar_width_and_spacing => [25])).to include('chbh=25')
|
337
342
|
end
|
338
343
|
|
339
344
|
describe "with a hash of width and spacing options" do
|
@@ -345,19 +350,36 @@ describe "a bar graph" do
|
|
345
350
|
end
|
346
351
|
|
347
352
|
it 'should be able to have a custom bar width' do
|
348
|
-
Gchart.bar(:bar_width_and_spacing => {:width => 19}).include
|
353
|
+
expect(Gchart.bar(:bar_width_and_spacing => {:width => 19})).to include("chbh=19,#{@default_spacing},#{@default_group_spacing}")
|
349
354
|
end
|
350
355
|
|
351
356
|
it 'should be able to have custom spacing' do
|
352
|
-
Gchart.bar(:bar_width_and_spacing => {:spacing => 19}).include
|
357
|
+
expect(Gchart.bar(:bar_width_and_spacing => {:spacing => 19})).to include("chbh=#{@default_width},19,#{@default_group_spacing}")
|
353
358
|
end
|
354
359
|
|
355
360
|
it 'should be able to have custom group spacing' do
|
356
|
-
Gchart.bar(:bar_width_and_spacing => {:group_spacing => 19}).include
|
361
|
+
expect(Gchart.bar(:bar_width_and_spacing => {:group_spacing => 19})).to include("chbh=#{@default_width},#{@default_spacing},19")
|
357
362
|
end
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
describe "a radar chart" do
|
367
|
+
|
368
|
+
before(:each) do
|
369
|
+
@chart = Gchart.radar(:title => 'Chart Title')
|
370
|
+
end
|
358
371
|
|
372
|
+
it "should be able have a chart title" do
|
373
|
+
expect(@chart).to include("chtt=Chart+Title")
|
359
374
|
end
|
360
375
|
|
376
|
+
it "should allow axis labels positions to be used" do
|
377
|
+
expect(Gchart.radar(:custom_axis_with_labels => '0,0,50,100')).to include('chxp=0,0,50,100')
|
378
|
+
end
|
379
|
+
|
380
|
+
it "should allow array of axis labels positions to be used " do
|
381
|
+
expect(Gchart.radar(:custom_axis_with_labels => ['0', '0', '50', '100'])).to include('chxp=0,0,50,100')
|
382
|
+
end
|
361
383
|
end
|
362
384
|
|
363
385
|
describe "a line chart" do
|
@@ -369,80 +391,73 @@ describe "a line chart" do
|
|
369
391
|
end
|
370
392
|
|
371
393
|
it 'should be able have a chart title' do
|
372
|
-
@chart.include
|
394
|
+
expect(@chart).to include("chtt=Chart+Title")
|
373
395
|
end
|
374
396
|
|
375
397
|
it "should be able to a custom color, size and alignment for title" do
|
376
|
-
Gchart.line(:title => @title, :title_color => 'FF0000').include
|
377
|
-
Gchart.line(:title => @title, :title_size => '20').include
|
378
|
-
Gchart.line(:title => @title, :title_size => '20', :title_alignment => :left).include
|
398
|
+
expect(Gchart.line(:title => @title, :title_color => 'FF0000')).to include('chts=FF0000')
|
399
|
+
expect(Gchart.line(:title => @title, :title_size => '20')).to include('chts=454545,20')
|
400
|
+
expect(Gchart.line(:title => @title, :title_size => '20', :title_alignment => :left)).to include('chts=454545,20,l')
|
379
401
|
end
|
380
402
|
|
381
403
|
it "should be able to have multiple legends" do
|
382
|
-
@chart.include
|
404
|
+
expect(@chart).to include(Gchart.jstize("chdl=first+data+set+label|n+data+set+label"))
|
383
405
|
end
|
384
406
|
|
385
407
|
it "should escape text values in url" do
|
386
408
|
title = 'Chart & Title'
|
387
409
|
legend = ['first data & set label', 'n data set label']
|
388
410
|
chart = Gchart.line(:title => title, :legend => legend)
|
389
|
-
chart.include
|
411
|
+
expect(chart).to include(Gchart.jstize("chdl=first+data+%26+set+label|n+data+set+label"))
|
390
412
|
end
|
391
413
|
|
392
414
|
it "should be able to have one legend" do
|
393
415
|
chart = Gchart.line(:legend => 'legend label')
|
394
|
-
chart.include
|
416
|
+
expect(chart).to include("chdl=legend+label")
|
395
417
|
end
|
396
|
-
|
418
|
+
|
397
419
|
it "should be able to set the position of the legend" do
|
398
420
|
title = 'Chart & Title'
|
399
421
|
legend = ['first data & set label', 'n data set label']
|
400
|
-
|
422
|
+
|
401
423
|
chart = Gchart.line(:title => title, :legend => legend, :legend_position => :bottom_vertical)
|
402
|
-
chart.include
|
403
|
-
|
424
|
+
expect(chart).to include("chdlp=bv")
|
425
|
+
|
404
426
|
chart = Gchart.line(:title => title, :legend => legend, :legend_position => 'r')
|
405
|
-
chart.include
|
427
|
+
expect(chart).to include("chdlp=r")
|
406
428
|
end
|
407
429
|
|
408
430
|
it "should be able to set the background fill" do
|
409
|
-
Gchart.line(:bg => 'efefef').
|
410
|
-
Gchart.line(:bg => {:color => 'efefef', :type => 'solid'}).
|
431
|
+
expect(Gchart.line(:bg => 'efefef')).to include("chf=bg,s,efefef")
|
432
|
+
expect(Gchart.line(:bg => {:color => 'efefef', :type => 'solid'})).to include("chf=bg,s,efefef")
|
411
433
|
|
412
|
-
Gchart.line(:bg => {:color => 'efefef', :type => 'gradient'}).
|
413
|
-
Gchart.line(:bg => {:color => 'efefef,0,ffffff,1', :type => 'gradient'}).
|
414
|
-
Gchart.line(:bg => {:color => 'efefef', :type => 'gradient', :angle => 90}).
|
434
|
+
expect(Gchart.line(:bg => {:color => 'efefef', :type => 'gradient'})).to include("chf=bg,lg,0,efefef,0,ffffff,1")
|
435
|
+
expect(Gchart.line(:bg => {:color => 'efefef,0,ffffff,1', :type => 'gradient'})).to include("chf=bg,lg,0,efefef,0,ffffff,1")
|
436
|
+
expect(Gchart.line(:bg => {:color => 'efefef', :type => 'gradient', :angle => 90})).to include("chf=bg,lg,90,efefef,0,ffffff,1")
|
415
437
|
|
416
|
-
Gchart.line(:bg => {:color => 'efefef', :type => 'stripes'}).
|
438
|
+
expect(Gchart.line(:bg => {:color => 'efefef', :type => 'stripes'})).to include("chf=bg,ls,90,efefef,0.2,ffffff,0.2")
|
417
439
|
end
|
418
440
|
|
419
441
|
it "should be able to set a graph fill" do
|
420
|
-
Gchart.line(:graph_bg => 'efefef').
|
421
|
-
Gchart.line(:graph_bg => {:color => 'efefef', :type => 'solid'}).include
|
422
|
-
Gchart.line(:graph_bg => {:color => 'efefef', :type => 'gradient'}).include
|
423
|
-
Gchart.line(:graph_bg => {:color => 'efefef,0,ffffff,1', :type => 'gradient'}).include
|
424
|
-
Gchart.line(:graph_bg => {:color => 'efefef', :type => 'gradient', :angle => 90}).include
|
442
|
+
expect(Gchart.line(:graph_bg => 'efefef')).to include("chf=c,s,efefef")
|
443
|
+
expect(Gchart.line(:graph_bg => {:color => 'efefef', :type => 'solid'})).to include("chf=c,s,efefef")
|
444
|
+
expect(Gchart.line(:graph_bg => {:color => 'efefef', :type => 'gradient'})).to include("chf=c,lg,0,efefef,0,ffffff,1")
|
445
|
+
expect(Gchart.line(:graph_bg => {:color => 'efefef,0,ffffff,1', :type => 'gradient'})).to include("chf=c,lg,0,efefef,0,ffffff,1")
|
446
|
+
expect(Gchart.line(:graph_bg => {:color => 'efefef', :type => 'gradient', :angle => 90})).to include("chf=c,lg,90,efefef,0,ffffff,1")
|
425
447
|
end
|
426
448
|
|
427
449
|
it "should be able to set both a graph and a background fill" do
|
428
|
-
Gchart.line(:bg => 'efefef', :graph_bg => '76A4FB').
|
429
|
-
Gchart.line(:bg => 'efefef', :graph_bg => '76A4FB').include?("c,s,76A4FB").should be_true
|
430
|
-
if RUBY_VERSION.to_f < 1.9
|
431
|
-
Gchart.line(:bg => 'efefef', :graph_bg => '76A4FB').include?(Gchart.jstize("chf=c,s,76A4FB|bg,s,efefef")).should be_true
|
432
|
-
else
|
433
|
-
Gchart.line(:bg => 'efefef', :graph_bg => '76A4FB').include?(Gchart.jstize("chf=bg,s,efefef|c,s,76A4FB")).should be_true
|
434
|
-
end
|
450
|
+
expect(Gchart.line(:bg => 'efefef', :graph_bg => '76A4FB')).to match /chf=(bg,s,efefef\|c,s,76A4FB|c,s,76A4FB\|bg,s,efefef)/
|
435
451
|
end
|
436
452
|
|
437
453
|
it "should be able to have different line colors" do
|
438
|
-
Gchart.line(:line_colors => 'efefef|00ffff').include
|
439
|
-
Gchart.line(:line_color => 'efefef|00ffff').include
|
454
|
+
expect(Gchart.line(:line_colors => 'efefef|00ffff')).to include(Gchart.jstize('chco=efefef|00ffff'))
|
455
|
+
expect(Gchart.line(:line_color => 'efefef|00ffff')).to include(Gchart.jstize('chco=efefef|00ffff'))
|
440
456
|
end
|
441
457
|
|
442
458
|
it "should be able to render a graph where all the data values are 0" do
|
443
|
-
Gchart.line(:data => [0, 0, 0]).
|
459
|
+
expect(Gchart.line(:data => [0, 0, 0])).to include("chd=s:AAA")
|
444
460
|
end
|
445
|
-
|
446
461
|
end
|
447
462
|
|
448
463
|
describe "a sparkline chart" do
|
@@ -456,61 +471,54 @@ describe "a sparkline chart" do
|
|
456
471
|
end
|
457
472
|
|
458
473
|
it "should create a sparkline" do
|
459
|
-
@chart.include
|
474
|
+
expect(@chart).to include('cht=ls')
|
460
475
|
end
|
461
476
|
|
462
477
|
it 'should be able have a chart title' do
|
463
|
-
@chart.include
|
478
|
+
expect(@chart).to include("chtt=Chart+Title")
|
464
479
|
end
|
465
480
|
|
466
481
|
it "should be able to a custom color and size title" do
|
467
|
-
Gchart.sparkline(:title => @title, :title_color => 'FF0000').include
|
468
|
-
Gchart.sparkline(:title => @title, :title_size => '20').include
|
482
|
+
expect(Gchart.sparkline(:title => @title, :title_color => 'FF0000')).to include('chts=FF0000')
|
483
|
+
expect(Gchart.sparkline(:title => @title, :title_size => '20')).to include('chts=454545,20')
|
469
484
|
end
|
470
485
|
|
471
486
|
it "should be able to have multiple legends" do
|
472
|
-
@chart.include
|
487
|
+
expect(@chart).to include(Gchart.jstize("chdl=first+data+set+label|n+data+set+label"))
|
473
488
|
end
|
474
489
|
|
475
490
|
it "should be able to have one legend" do
|
476
491
|
chart = Gchart.sparkline(:legend => 'legend label')
|
477
|
-
chart.include
|
492
|
+
expect(chart).to include("chdl=legend+label")
|
478
493
|
end
|
479
494
|
|
480
495
|
it "should be able to set the background fill" do
|
481
|
-
Gchart.sparkline(:bg => 'efefef').include
|
482
|
-
Gchart.sparkline(:bg => {:color => 'efefef', :type => 'solid'}).include
|
496
|
+
expect(Gchart.sparkline(:bg => 'efefef')).to include("chf=bg,s,efefef")
|
497
|
+
expect(Gchart.sparkline(:bg => {:color => 'efefef', :type => 'solid'})).to include("chf=bg,s,efefef")
|
483
498
|
|
484
|
-
Gchart.sparkline(:bg => {:color => 'efefef', :type => 'gradient'}).include
|
485
|
-
Gchart.sparkline(:bg => {:color => 'efefef,0,ffffff,1', :type => 'gradient'}).include
|
486
|
-
Gchart.sparkline(:bg => {:color => 'efefef', :type => 'gradient', :angle => 90}).include
|
499
|
+
expect(Gchart.sparkline(:bg => {:color => 'efefef', :type => 'gradient'})).to include("chf=bg,lg,0,efefef,0,ffffff,1")
|
500
|
+
expect(Gchart.sparkline(:bg => {:color => 'efefef,0,ffffff,1', :type => 'gradient'})).to include("chf=bg,lg,0,efefef,0,ffffff,1")
|
501
|
+
expect(Gchart.sparkline(:bg => {:color => 'efefef', :type => 'gradient', :angle => 90})).to include("chf=bg,lg,90,efefef,0,ffffff,1")
|
487
502
|
|
488
|
-
Gchart.sparkline(:bg => {:color => 'efefef', :type => 'stripes'}).include
|
503
|
+
expect(Gchart.sparkline(:bg => {:color => 'efefef', :type => 'stripes'})).to include("chf=bg,ls,90,efefef,0.2,ffffff,0.2")
|
489
504
|
end
|
490
505
|
|
491
506
|
it "should be able to set a graph fill" do
|
492
|
-
Gchart.sparkline(:graph_bg => 'efefef').include
|
493
|
-
Gchart.sparkline(:graph_bg => {:color => 'efefef', :type => 'solid'}).include
|
494
|
-
Gchart.sparkline(:graph_bg => {:color => 'efefef', :type => 'gradient'}).include
|
495
|
-
Gchart.sparkline(:graph_bg => {:color => 'efefef,0,ffffff,1', :type => 'gradient'}).include
|
496
|
-
Gchart.sparkline(:graph_bg => {:color => 'efefef', :type => 'gradient', :angle => 90}).include
|
507
|
+
expect(Gchart.sparkline(:graph_bg => 'efefef')).to include("chf=c,s,efefef")
|
508
|
+
expect(Gchart.sparkline(:graph_bg => {:color => 'efefef', :type => 'solid'})).to include("chf=c,s,efefef")
|
509
|
+
expect(Gchart.sparkline(:graph_bg => {:color => 'efefef', :type => 'gradient'})).to include("chf=c,lg,0,efefef,0,ffffff,1")
|
510
|
+
expect(Gchart.sparkline(:graph_bg => {:color => 'efefef,0,ffffff,1', :type => 'gradient'})).to include("chf=c,lg,0,efefef,0,ffffff,1")
|
511
|
+
expect(Gchart.sparkline(:graph_bg => {:color => 'efefef', :type => 'gradient', :angle => 90})).to include("chf=c,lg,90,efefef,0,ffffff,1")
|
497
512
|
end
|
498
513
|
|
499
514
|
it "should be able to set both a graph and a background fill" do
|
500
|
-
Gchart.sparkline(:bg => 'efefef', :graph_bg => '76A4FB').
|
501
|
-
Gchart.sparkline(:bg => 'efefef', :graph_bg => '76A4FB').include?("c,s,76A4FB").should be_true
|
502
|
-
if RUBY_VERSION.to_f < 1.9
|
503
|
-
Gchart.sparkline(:bg => 'efefef', :graph_bg => '76A4FB').include?(Gchart.jstize("chf=c,s,76A4FB|bg,s,efefef")).should be_true
|
504
|
-
else
|
505
|
-
Gchart.sparkline(:bg => 'efefef', :graph_bg => '76A4FB').include?(Gchart.jstize("chf=bg,s,efefef|c,s,76A4FB")).should be_true
|
506
|
-
end
|
515
|
+
expect(Gchart.sparkline(:bg => 'efefef', :graph_bg => '76A4FB')).to match(/chf=(bg,s,efefef\|c,s,76A4FB|c,s,76A4FB\|bg,s,efefef)/)
|
507
516
|
end
|
508
517
|
|
509
518
|
it "should be able to have different line colors" do
|
510
|
-
Gchart.sparkline(:line_colors => 'efefef|00ffff').include
|
511
|
-
Gchart.sparkline(:line_color => 'efefef|00ffff').include
|
519
|
+
expect(Gchart.sparkline(:line_colors => 'efefef|00ffff')).to include(Gchart.jstize('chco=efefef|00ffff'))
|
520
|
+
expect(Gchart.sparkline(:line_color => 'efefef|00ffff')).to include(Gchart.jstize('chco=efefef|00ffff'))
|
512
521
|
end
|
513
|
-
|
514
522
|
end
|
515
523
|
|
516
524
|
describe "a 3d pie chart" do
|
@@ -524,13 +532,12 @@ describe "a 3d pie chart" do
|
|
524
532
|
end
|
525
533
|
|
526
534
|
it "should create a pie" do
|
527
|
-
@chart.include
|
535
|
+
expect(@chart).to include('cht=p')
|
528
536
|
end
|
529
537
|
|
530
538
|
it "should be able to be in 3d" do
|
531
|
-
Gchart.pie_3d(:title => @title, :legend => @legend, :data => @data).include
|
539
|
+
expect(Gchart.pie_3d(:title => @title, :legend => @legend, :data => @data)).to include('cht=p3')
|
532
540
|
end
|
533
|
-
|
534
541
|
end
|
535
542
|
|
536
543
|
describe "a google-o-meter" do
|
@@ -543,19 +550,18 @@ describe "a google-o-meter" do
|
|
543
550
|
end
|
544
551
|
|
545
552
|
it "should create a meter" do
|
546
|
-
@chart.include
|
553
|
+
expect(@chart).to include('cht=gom')
|
547
554
|
end
|
548
555
|
|
549
556
|
it "should be able to set a solid background fill" do
|
550
|
-
Gchart.meter(:bg => 'efefef').include
|
551
|
-
Gchart.meter(:bg => {:color => 'efefef', :type => 'solid'}).include
|
557
|
+
expect(Gchart.meter(:bg => 'efefef')).to include("chf=bg,s,efefef")
|
558
|
+
expect(Gchart.meter(:bg => {:color => 'efefef', :type => 'solid'})).to include("chf=bg,s,efefef")
|
552
559
|
end
|
553
560
|
|
554
561
|
it "should be able to set labels by using the legend or labesl accessor" do
|
555
|
-
Gchart.meter(:title => @title, :labels => @legend, :data => @data).
|
556
|
-
Gchart.meter(:title => @title, :labels => @legend, :data => @data).
|
562
|
+
expect(Gchart.meter(:title => @title, :labels => @legend, :data => @data)).to include("chl=#{@jstized_legend}")
|
563
|
+
expect(Gchart.meter(:title => @title, :labels => @legend, :data => @data)).to eq(Gchart.meter(:title => @title, :legend => @legend, :data => @data))
|
557
564
|
end
|
558
|
-
|
559
565
|
end
|
560
566
|
|
561
567
|
describe "a map chart" do
|
@@ -571,81 +577,80 @@ describe "a map chart" do
|
|
571
577
|
end
|
572
578
|
|
573
579
|
it "should create a map" do
|
574
|
-
@chart.include
|
580
|
+
expect(@chart).to include('cht=t')
|
575
581
|
end
|
576
582
|
|
577
583
|
it "should set the geographical area" do
|
578
|
-
@chart.include
|
584
|
+
expect(@chart).to include('chtm=usa')
|
579
585
|
end
|
580
586
|
|
581
587
|
it "should set the map colors" do
|
582
|
-
@chart.include
|
588
|
+
expect(@chart).to include('chco=FFFFFF,FF0000,FFFF00,00FF00')
|
583
589
|
end
|
584
590
|
|
585
591
|
it "should set the country/state codes" do
|
586
|
-
@chart.include
|
592
|
+
expect(@chart).to include('chld=MTWYIDSD')
|
587
593
|
end
|
588
594
|
|
589
595
|
it "should set the chart data" do
|
590
|
-
@chart.include
|
596
|
+
expect(@chart).to include('chd=t:0,100,50,32')
|
591
597
|
end
|
592
|
-
|
593
598
|
end
|
594
599
|
|
595
600
|
describe 'exporting a chart' do
|
596
601
|
|
597
602
|
it "should be available in the url format by default" do
|
598
|
-
Gchart.line(:data => [0, 26], :format => 'url').
|
603
|
+
expect(Gchart.line(:data => [0, 26], :format => 'url')).to eq(Gchart.line(:data => [0, 26]))
|
599
604
|
end
|
600
605
|
|
601
606
|
it "should be available as an image tag" do
|
602
|
-
Gchart.line(:data => [0, 26], :format => 'image_tag').
|
607
|
+
expect(Gchart.line(:data => [0, 26], :format => 'image_tag')).to match(/<img src=(.*) width="300" height="200" alt="Google Chart" \/>/)
|
603
608
|
end
|
604
609
|
|
605
610
|
it "should be available as an image tag using img_tag alias" do
|
606
|
-
Gchart.line(:data => [0, 26], :format => 'img_tag').
|
611
|
+
expect(Gchart.line(:data => [0, 26], :format => 'img_tag')).to match(/<img src=(.*) width="300" height="200" alt="Google Chart" \/>/)
|
607
612
|
end
|
608
613
|
|
609
614
|
it "should be available as an image tag using custom dimensions" do
|
610
|
-
Gchart.line(:data => [0, 26], :format => 'image_tag', :size => '400x400').
|
615
|
+
expect(Gchart.line(:data => [0, 26], :format => 'image_tag', :size => '400x400')).to match(/<img src=(.*) width="400" height="400" alt="Google Chart" \/>/)
|
611
616
|
end
|
612
617
|
|
613
618
|
it "should be available as an image tag using custom alt text" do
|
614
|
-
Gchart.line(:data => [0, 26], :format => 'image_tag', :alt => 'Sexy chart').
|
619
|
+
expect(Gchart.line(:data => [0, 26], :format => 'image_tag', :alt => 'Sexy chart')).to match(/<img src=(.*) width="300" height="200" alt="Sexy chart" \/>/)
|
615
620
|
end
|
616
621
|
|
617
622
|
it "should be available as an image tag using custom title text" do
|
618
|
-
Gchart.line(:data => [0, 26], :format => 'image_tag', :title => 'Sexy chart').
|
623
|
+
expect(Gchart.line(:data => [0, 26], :format => 'image_tag', :title => 'Sexy chart')).to match(/<img src=(.*) width="300" height="200" alt="Google Chart" title="Sexy chart" \/>/)
|
619
624
|
end
|
620
625
|
|
621
626
|
it "should be available as an image tag using custom css id selector" do
|
622
|
-
Gchart.line(:data => [0, 26], :format => 'image_tag', :id => 'chart').
|
627
|
+
expect(Gchart.line(:data => [0, 26], :format => 'image_tag', :id => 'chart')).to match(/<img id="chart" src=(.*) width="300" height="200" alt="Google Chart" \/>/)
|
623
628
|
end
|
624
629
|
|
625
630
|
it "should be available as an image tag using custom css class selector" do
|
626
|
-
Gchart.line(:data => [0, 26], :format => 'image_tag', :class => 'chart').
|
631
|
+
expect(Gchart.line(:data => [0, 26], :format => 'image_tag', :class => 'chart')).to match(/<img class="chart" src=(.*) width="300" height="200" alt="Google Chart" \/>/)
|
627
632
|
end
|
628
633
|
|
629
634
|
it "should use ampersands to separate key/value pairs in URLs by default" do
|
630
|
-
Gchart.line(:data => [0, 26]).
|
631
|
-
Gchart.line(:data => [0, 26]).
|
635
|
+
expect(Gchart.line(:data => [0, 26])).to include "&"
|
636
|
+
expect(Gchart.line(:data => [0, 26])).not_to include "&"
|
632
637
|
end
|
633
638
|
|
634
639
|
it "should escape ampersands in URLs when used as an image tag" do
|
635
|
-
Gchart.line(:data => [0, 26], :format => 'image_tag', :class => 'chart').
|
640
|
+
expect(Gchart.line(:data => [0, 26], :format => 'image_tag', :class => 'chart')).to satisfy {|chart| expect(chart).to include "&" }
|
636
641
|
end
|
637
642
|
|
638
643
|
it "should be available as a file" do
|
639
644
|
File.delete('chart.png') if File.exist?('chart.png')
|
640
645
|
Gchart.line(:data => [0, 26], :format => 'file')
|
641
|
-
File.exist?('chart.png').
|
646
|
+
expect(File.exist?('chart.png')).to be
|
642
647
|
File.delete('chart.png') if File.exist?('chart.png')
|
643
648
|
end
|
644
649
|
|
645
650
|
it "should be available as a file using a custom file name" do
|
646
651
|
File.delete('custom_file_name.png') if File.exist?('custom_file_name.png')
|
647
652
|
Gchart.line(:data => [0, 26], :format => 'file', :filename => 'custom_file_name.png')
|
648
|
-
File.exist?('custom_file_name.png').
|
653
|
+
expect(File.exist?('custom_file_name.png')).to be
|
649
654
|
File.delete('custom_file_name.png') if File.exist?('custom_file_name.png')
|
650
655
|
end
|
651
656
|
|
@@ -658,21 +663,22 @@ describe 'exporting a chart' do
|
|
658
663
|
:format => "file",
|
659
664
|
:filename => "foo.png"
|
660
665
|
)
|
661
|
-
File.exist?('foo.png').
|
666
|
+
expect(File.exist?('foo.png')).to be
|
662
667
|
File.delete('foo.png') if File.exist?('foo.png')
|
663
668
|
end
|
664
|
-
|
665
669
|
end
|
666
670
|
|
667
671
|
describe 'SSL support' do
|
668
672
|
it 'should change url if is presented' do
|
669
|
-
Gchart.line(:use_ssl => true).
|
673
|
+
expect(Gchart.line(:use_ssl => true)).to include('https://chart.googleapis.com/chart?')
|
670
674
|
end
|
671
|
-
|
675
|
+
|
672
676
|
it "should be available as a file" do
|
677
|
+
pending "unexpected error under Travis CI (should be fixed using http://martinottenwaelter.fr/2010/12/ruby19-and-the-ssl-error/)"
|
673
678
|
File.delete('chart.png') if File.exist?('chart.png')
|
674
679
|
Gchart.line(:data => [0, 26], :format => 'file', :use_ssl => true)
|
675
|
-
File.exist?('chart.png').
|
680
|
+
expect(File.exist?('chart.png')).to be_true
|
676
681
|
File.delete('chart.png') if File.exist?('chart.png')
|
677
682
|
end
|
678
683
|
end
|
684
|
+
|