jparker-ruby-googlechart 0.5.0

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/History.txt ADDED
@@ -0,0 +1,6 @@
1
+ == 0.0.1 2008-05-14
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
5
+ * Bar chart support
6
+ * Line chart support
data/Manifest.txt ADDED
@@ -0,0 +1,52 @@
1
+ History.txt
2
+ License.txt
3
+ Manifest.txt
4
+ PostInstall.txt
5
+ README.txt
6
+ Rakefile
7
+ TODO.txt
8
+ config/hoe.rb
9
+ config/requirements.rb
10
+ lib/google_chart.rb
11
+ lib/google_chart/axes.rb
12
+ lib/google_chart/bar.rb
13
+ lib/google_chart/bar_styles.rb
14
+ lib/google_chart/base.rb
15
+ lib/google_chart/colors.rb
16
+ lib/google_chart/data.rb
17
+ lib/google_chart/grid_lines.rb
18
+ lib/google_chart/legends.rb
19
+ lib/google_chart/line.rb
20
+ lib/google_chart/line_styles.rb
21
+ lib/google_chart/range_markers.rb
22
+ lib/google_chart/sizes.rb
23
+ lib/google_chart/titles.rb
24
+ ruby-googlechart.gemspec
25
+ script/console
26
+ script/destroy
27
+ script/generate
28
+ script/txt2html
29
+ setup.rb
30
+ tasks/deployment.rake
31
+ tasks/environment.rake
32
+ tasks/website.rake
33
+ test/google_chart/test_axes.rb
34
+ test/google_chart/test_bar.rb
35
+ test/google_chart/test_bar_styles.rb
36
+ test/google_chart/test_base.rb
37
+ test/google_chart/test_colors.rb
38
+ test/google_chart/test_data.rb
39
+ test/google_chart/test_grid_lines.rb
40
+ test/google_chart/test_legends.rb
41
+ test/google_chart/test_line.rb
42
+ test/google_chart/test_line_styles.rb
43
+ test/google_chart/test_range_markers.rb
44
+ test/google_chart/test_sizes.rb
45
+ test/google_chart/test_titles.rb
46
+ test/test_google_chart.rb
47
+ test/test_helper.rb
48
+ website/index.html
49
+ website/index.txt
50
+ website/javascripts/rounded_corners_lite.inc.js
51
+ website/stylesheets/screen.css
52
+ website/template.html.erb
data/README.txt ADDED
@@ -0,0 +1,65 @@
1
+ = ruby-googlechart
2
+
3
+ * http://github.com/jparker/ruby-googlechart
4
+
5
+ == DESCRIPTION:
6
+
7
+ ruby-googlechart is a ruby library which provides object-oriented
8
+ access to the Google Charts API.
9
+
10
+ This library has largely been done as an exercise. These other ruby
11
+ libraries are more mature and may be better suited to your needs:
12
+
13
+ * http://googlecharts.rubyforge.org/
14
+ * http://code.google.com/p/gchartrb/
15
+
16
+ == FEATURES/PROBLEMS:
17
+
18
+ * Limited support for Line and Bar charts
19
+
20
+ == SYNOPSIS:
21
+
22
+ url = GoogleChart.Line(:data => [1, nil, 2, 8, 1])
23
+
24
+ url = GoogleChart.Line do |c|
25
+ c.type = :line
26
+ c.size = '800x375'
27
+ c.data = [335, 285, 240, 220, 160, 175, 200, 205]
28
+ c.scale = 0..400
29
+ c.encoding = :extended
30
+ c.title = 'Chart Title'
31
+ end
32
+
33
+ == REQUIREMENTS:
34
+
35
+ * newgem >= 1.0.3
36
+ * hoe >= 1.8.0
37
+
38
+ == INSTALL:
39
+
40
+ * sudo gem install jparker-ruby-googlechart -s http://gems.github.com/
41
+
42
+ == LICENSE:
43
+
44
+ (The MIT License)
45
+
46
+ Copyright (c) 2008 John Parker
47
+
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of this software and associated documentation files (the
50
+ 'Software'), to deal in the Software without restriction, including
51
+ without limitation the rights to use, copy, modify, merge, publish,
52
+ distribute, sublicense, and/or sell copies of the Software, and to
53
+ permit persons to whom the Software is furnished to do so, subject to
54
+ the following conditions:
55
+
56
+ The above copyright notice and this permission notice shall be
57
+ included in all copies or substantial portions of the Software.
58
+
59
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
60
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
61
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
62
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
63
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
64
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
65
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,25 @@
1
+ %w[rubygems rake rake/clean fileutils newgem rubigen].each { |f| require f }
2
+ require File.dirname(__FILE__) + '/lib/google_chart'
3
+
4
+ # Generate all the Rake tasks
5
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
6
+ $hoe = Hoe.new('ruby-googlechart', GoogleChart::VERSION) do |p|
7
+ p.developer('John Parker', 'jparker@urgetopunt.com')
8
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
9
+ p.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
10
+ p.rubyforge_name = p.name # TODO this is default value
11
+ # p.extra_deps = [
12
+ # ['activesupport','>= 2.0.2'],
13
+ # ]
14
+ p.extra_dev_deps = [
15
+ ['newgem', ">= #{::Newgem::VERSION}"]
16
+ ]
17
+
18
+ p.clean_globs |= %w[**/.DS_Store tmp *.log]
19
+ path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
20
+ p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
21
+ p.rsync_args = '-av --delete --ignore-errors'
22
+ end
23
+
24
+ require 'newgem/tasks' # load /tasks/*.rake
25
+
@@ -0,0 +1,40 @@
1
+ # <URL:http://code.google.com/apis/chart/#multiple_axes_labels>
2
+ module GoogleChart
3
+ module Axes
4
+ def self.included(klass)
5
+ klass.register!(:axes)
6
+ end
7
+
8
+ # TODO: Add support for axis label positions/styles, support for multiple label sets per axis
9
+
10
+ def axes
11
+ unless @axes.nil? || @axes.empty?
12
+ [
13
+ 'chxt=' + @axes.join(','),
14
+ @axis_labels.empty? ? nil : 'chxl=' + @axis_labels.join('|'),
15
+ @axis_ranges.empty? ? nil : 'chxr=' + @axis_ranges.join('|')
16
+ ].compact.join('&')
17
+ end
18
+ end
19
+
20
+ def axes=(axes)
21
+ idx = 0
22
+ @axes, @axis_labels, @axis_ranges = [], [], []
23
+ [:x, :y, :r, :t].each do |axis|
24
+ case axes[axis]
25
+ when Array
26
+ @axis_labels << ("#{idx}:|" + axes[axis].collect {|l| CGI::escape(l) }.join('|'))
27
+ @axes << axis
28
+ idx += 1
29
+ when Range
30
+ @axis_ranges << ("#{idx},#{axes[axis].first},#{axes[axis].last}")
31
+ @axes << axis
32
+ idx += 1
33
+ when true
34
+ @axes << axis
35
+ idx += 1
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,27 @@
1
+ module GoogleChart
2
+ class Bar < Base
3
+ include Axes
4
+ include BarStyles
5
+ include Colors
6
+ include Data
7
+ include GridLines
8
+ include Legends
9
+ include RangeMarkers
10
+ include Sizes
11
+ include Titles
12
+
13
+ attr_writer :horizontal, :grouped
14
+
15
+ def chart_type
16
+ 'cht=b' + (horizontal? ? 'h' : 'v') + (grouped? ? 'g' : 's')
17
+ end
18
+
19
+ def horizontal?
20
+ @horizontal
21
+ end
22
+
23
+ def grouped?
24
+ @grouped
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ # <URL:http://code.google.com/apis/chart/#bar_width>
2
+ module GoogleChart
3
+ module BarStyles
4
+ def self.included(klass)
5
+ klass.register!(:style)
6
+ end
7
+
8
+ attr_writer :width
9
+
10
+ def style
11
+ "chbh=#{[@width, *@spacing].compact.join(',')}" if @width
12
+ end
13
+
14
+ # Spacing can be given as a single number for space between bars within a
15
+ # group or as an array of numbers with the first element as the space
16
+ # between bars within a group and the second element as the space between
17
+ # groups. If not provided, the default spacing between groups is 8 pixels.
18
+ #
19
+ # TODO: Should we raise an error if bar spacing is greater than group
20
+ # spacing? This would visually group bars from different groups.
21
+ def spacing=(spacing)
22
+ @spacing = [spacing].flatten
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,42 @@
1
+ module GoogleChart
2
+ class Base
3
+ @@base_url = 'http://chart.apis.google.com/chart'
4
+
5
+ def initialize(options = {})
6
+ options.each {|key, value| send("#{key}=", value) }
7
+ yield self if block_given?
8
+ end
9
+
10
+ def self.inherited(klass)
11
+ klass.class_eval do
12
+ class_variable_set(:@@parameters, [])
13
+ register!(:chart_type)
14
+ end
15
+ end
16
+
17
+ def self.register!(*parameters)
18
+ parameters.each do |parameter|
19
+ registry.push(parameter) unless registered?(parameter)
20
+ end
21
+ end
22
+
23
+ def self.registered?(parameter)
24
+ registry.include?(parameter)
25
+ end
26
+
27
+ def self.registry
28
+ class_variable_get :@@parameters
29
+ end
30
+
31
+ # Collect all of the registered chart parameters and join them together
32
+ # to form the URL for the chart to be generated.
33
+ def to_url
34
+ "#{@@base_url}?#{query_string}"
35
+ end
36
+
37
+ private
38
+ def query_string
39
+ self.class.registry.map {|m| send(m) }.compact.join('&')
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,14 @@
1
+ # <URL:http://code.google.com/apis/chart/#line_bar_pie_colors>
2
+ module GoogleChart
3
+ module Colors
4
+ def self.included(klass)
5
+ klass.register!(:color)
6
+ end
7
+
8
+ attr_writer :color
9
+
10
+ def color
11
+ 'chco=' + [@color].flatten.join(',') if @color
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,91 @@
1
+ # <URL:http://code.google.com/apis/chart/#chart_data>
2
+ module GoogleChart
3
+ module Data
4
+ def self.included(klass)
5
+ klass.register!(:data)
6
+ end
7
+
8
+ attr_writer :encoding, :scale
9
+
10
+ @@simple_encoding = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a
11
+ @@extended_alphabet = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a + %w[- .]
12
+ @@extended_encoding = @@extended_alphabet.collect {|a|
13
+ @@extended_alphabet.collect {|b| a + b }
14
+ }.flatten
15
+
16
+ def data
17
+ 'chd=' + send(:"#{encoding}_encode", @data) if @data
18
+ end
19
+
20
+ def data=(data)
21
+ @data = data.any? {|e| e.is_a?(Array) } ? data : [data]
22
+ end
23
+
24
+ private
25
+ def encoding
26
+ @encoding || :simple
27
+ end
28
+
29
+ def scale?
30
+ @scale
31
+ end
32
+
33
+ def scale_set(set, range)
34
+ if scale?
35
+ min, max = set.min, set.max
36
+ if min < 0
37
+ set.collect! {|n| n - min }
38
+ max -= min
39
+ end
40
+ set.collect {|n| (n * range).to_f / max if n }
41
+ else
42
+ set
43
+ end
44
+ end
45
+
46
+ def simple_encode(data)
47
+ 's:' + data.collect {|set|
48
+ scale_set(set, @@simple_encoding.size - 1).collect {|n|
49
+ case
50
+ when n.nil? then '_'
51
+ when n <= 0 then @@simple_encoding[0]
52
+ when n >= @@simple_encoding.size then @@simple_encoding[-1]
53
+ else @@simple_encoding[n.round]
54
+ end
55
+ }.join
56
+ }.join(',')
57
+ end
58
+
59
+ def extended_encode(data)
60
+ 'e:' + data.collect {|set|
61
+ scale_set(set, @@extended_encoding.size - 1).collect {|n|
62
+ case
63
+ when n.nil? then '__'
64
+ when n <= 0 then @@extended_encoding[0]
65
+ when n >= @@extended_encoding.size then @@extended_encoding[-1]
66
+ else @@extended_encoding[n.round]
67
+ end
68
+ }.join
69
+ }.join(',')
70
+ end
71
+
72
+ def text_encode(data)
73
+ 't:' + data.collect {|set|
74
+ scale_set(set, 100).collect {|n|
75
+ case
76
+ when n.nil? then -1
77
+ when n < 0 then 0
78
+ when n > 100 then 100
79
+ else
80
+ # More than one decimal place yields negligible resolution at the
81
+ # potentially great cost of one extra character in the URL. Avoid
82
+ # this by rounding to the nearest tenth. Further round down to an
83
+ # integer when possible to save the extra two characters (".0").
84
+ m = (n * 10).round
85
+ m / (m % 10 == 0 ? 10 : 10.0)
86
+ end
87
+ }.join(',')
88
+ }.join('|')
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,21 @@
1
+ # <URL:http://code.google.com/apis/chart/#grid>
2
+ module GoogleChart
3
+ module GridLines
4
+ def self.included(klass)
5
+ klass.register!(:grid)
6
+ end
7
+
8
+ @@grid_line_styles = { :solid => [1,0], :dash => [3,2], :dot => [1,2] }
9
+ @@default_grid_step = 0
10
+
11
+ def grid
12
+ 'chg=' + @grid if @grid
13
+ end
14
+
15
+ def grid=(grid)
16
+ grid[:x] ||= @@default_grid_step
17
+ grid[:y] ||= @@default_grid_step
18
+ @grid = [grid[:x], grid[:y], *@@grid_line_styles[grid[:style]]].compact.join(',')
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ # <URL:http://code.google.com/apis/chart/#chdl>
2
+ module GoogleChart
3
+ module Legends
4
+ def self.included(klass)
5
+ klass.register!(:legend)
6
+ end
7
+
8
+ attr_writer :legend
9
+
10
+ def legend
11
+ 'chdl=' + [@legend].flatten.collect {|l| CGI::escape(l) }.join('|') if @legend
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+ module GoogleChart
2
+ class Line < Base
3
+ @@chart_types = { :line => 'lc', :xy => 'lxy', :sparkline => 'ls' }
4
+
5
+ include Axes
6
+ include Colors
7
+ include Data
8
+ include GridLines
9
+ include Legends
10
+ include LineStyles
11
+ include RangeMarkers
12
+ include Sizes
13
+ include Titles
14
+
15
+ def chart_type
16
+ @chart_type ||= @@chart_types[:line]
17
+ 'cht=' + @chart_type if @chart_type
18
+ end
19
+
20
+ def type=(chart_type)
21
+ @chart_type = @@chart_types[chart_type]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,35 @@
1
+ # <URL:http://code.google.com/apis/chart/#line_styles>
2
+ module GoogleChart
3
+ module LineStyles
4
+ def self.included(klass)
5
+ klass.register!(:style)
6
+ end
7
+
8
+ @@line_styles = { :solid => [1,1,0], :dash => [1,3,2], :dot => [1,1,2] }
9
+ @@default_line_style = :solid
10
+ @@default_line_width = 1
11
+
12
+ def style
13
+ @style ||= []
14
+ @width ||= []
15
+
16
+ # Pad @style and @width with defaults until they are equal in length
17
+ (@style.size - @width.size).times { @width << @@default_line_width }
18
+ (@width.size - @style.size).times { @style << @@default_line_style }
19
+
20
+ unless @style.empty?
21
+ 'chls=' + (0...@style.size).collect {|i|
22
+ @@line_styles[@style[i]].collect {|n| n * @width[i] }.join(',')
23
+ }.join('|')
24
+ end
25
+ end
26
+
27
+ def style=(style)
28
+ @style = [style].flatten
29
+ end
30
+
31
+ def width=(width)
32
+ @width = [width].flatten
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ # <URL:http://code.google.com/apis/chart/#hor_line_marker>
2
+ module GoogleChart
3
+ module RangeMarkers
4
+ def self.included(klass)
5
+ klass.register!(:ranges)
6
+ end
7
+
8
+ @@range_marker_orientations = { :h => 'r', :v => 'R' }
9
+
10
+ def ranges
11
+ unless @ranges.nil? || @ranges.empty?
12
+ 'chm=' + @ranges.collect {|r|
13
+ r[0] = @@range_marker_orientations[r[0]]
14
+ r[1..-1] = ['000000cc', *r[1..-1]] if r.size == 3
15
+ # The middle parameter is required by Google Charts but ignored for range markers
16
+ r = r[0..1] + ['x'] + r[2..-1]
17
+ r.join(',')
18
+ }.join('|')
19
+ end
20
+ end
21
+
22
+ def ranges=(ranges)
23
+ @ranges = ranges.any? {|e| e.is_a?(Array) } ? ranges : [ranges]
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ # <URL:http://code.google.com/apis/chart/#chart_size>
2
+ module GoogleChart
3
+ module Sizes
4
+ def self.included(klass)
5
+ klass.register!(:size)
6
+ end
7
+
8
+ attr_writer :size
9
+
10
+ @@default_size = '600x500'
11
+
12
+ def size
13
+ 'chs=' + (@size ? @size : @@default_size)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ require 'cgi'
2
+
3
+ # <URL:http://code.google.com/apis/chart/#chtt>
4
+ module GoogleChart
5
+ module Titles
6
+ def self.included(klass)
7
+ klass.register!(:title)
8
+ end
9
+
10
+ attr_writer :title
11
+
12
+ def title
13
+ 'chtt=' + CGI::escape(@title) if @title
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'google_chart/axes'
5
+ require 'google_chart/bar_styles'
6
+ require 'google_chart/colors'
7
+ require 'google_chart/data'
8
+ require 'google_chart/grid_lines'
9
+ require 'google_chart/legends'
10
+ require 'google_chart/line_styles'
11
+ require 'google_chart/range_markers'
12
+ require 'google_chart/sizes'
13
+ require 'google_chart/titles'
14
+
15
+ require 'google_chart/base'
16
+ require 'google_chart/bar'
17
+ require 'google_chart/line'
18
+
19
+ module GoogleChart
20
+ VERSION = '0.5.0'
21
+
22
+ def self.Line(options = {}, &block)
23
+ GoogleChart::Line.new(options, &block).to_url
24
+ end
25
+
26
+ def self.Bar(options = {}, &block)
27
+ GoogleChart::Bar.new(options, &block).to_url
28
+ end
29
+ end
@@ -0,0 +1,70 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestAxes < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::Axes }
6
+ end
7
+
8
+ should 'not display axis parameter by default' do
9
+ url = @klass.new.to_url
10
+ assert_no_match(/\bchx[lrt]=/, url)
11
+ end
12
+
13
+ context 'axis types' do
14
+ should 'display bottom x-axis' do
15
+ assert_match(/\bchxt=x\b/, @klass.new(:axes => {:x => true}).to_url)
16
+ end
17
+
18
+ should 'display top x-axis' do
19
+ assert_match(/\bchxt=t\b/, @klass.new(:axes => {:t => true}).to_url)
20
+ end
21
+
22
+ should 'display left y-axis' do
23
+ assert_match(/\bchxt=y\b/, @klass.new(:axes => {:y => true}).to_url)
24
+ end
25
+
26
+ should 'display right y-axis' do
27
+ assert_match(/\bchxt=r\b/, @klass.new(:axes => {:r => true}).to_url)
28
+ end
29
+
30
+ should 'display multiple axes' do
31
+ assert_match(/\bchxt=x,y,r\b/, @klass.new(:axes => {:x => true, :y => true, :r => true}).to_url)
32
+ end
33
+ end
34
+
35
+ context 'axis labels' do
36
+ should 'dsiplay enumerated axis labels' do
37
+ assert_match(/\bchxt=x&chxl=0:\|foo\|bar\|baz\b/, @klass.new(:axes => {:x => %w[foo bar baz]}).to_url)
38
+ end
39
+
40
+ should 'display enumerated axis labels for multiple axes' do
41
+ assert_match(/\bchxt=x,y&chxl=0:\|foo\|bar\|baz\|1:\|0\|5\|10\b/, @klass.new(:axes => {:x => %w[foo bar baz], :y => %w[0 5 10]}).to_url)
42
+ end
43
+
44
+ should 'display enumerated axis labels for subset of axes' do
45
+ assert_match(/\bchxt=x,y,r&chxl=0:\|foo\|bar\|2:\|baz\|froz\b/, @klass.new(:axes => {:x => %w[foo bar], :y => true, :r => %w[baz froz]}).to_url)
46
+ end
47
+
48
+ should 'escape axis labels for url' do
49
+ assert_match(/\bchxl=0:\|foo\+bar\|baz%7Cfroz\b/, @klass.new(:axes => {:x => ['foo bar', 'baz|froz']}).to_url)
50
+ end
51
+ end
52
+
53
+ context 'axis ranges' do
54
+ should 'dsiplay axis label ranges' do
55
+ assert_match(/\bchxt=x&chxr=0,8,16/, @klass.new(:axes => {:x => 8..16}).to_url)
56
+ end
57
+
58
+ should 'display multiple axis label ranges' do
59
+ assert_match(/\bchxt=x,y&chxr=0,6,14\|1,5,23\b/, @klass.new(:axes => {:x => 6..14, :y => 5..23}).to_url)
60
+ end
61
+
62
+ should 'display axis label ranges for subset of axes' do
63
+ assert_match(/\bchxr=0,0,5\|2,0,100\b/, @klass.new(:axes => {:x => 0..5, :y => true, :r => 0..100}).to_url)
64
+ end
65
+ end
66
+
67
+ should 'display multiple types of axis labels' do
68
+ assert_match(/\bchxt=x,y,r&chxl=0:\|foo\|bar\|baz&chxr=2,5,23\b/, @klass.new(:axes => {:x => %w[foo bar baz], :y => true, :r => 5..23}).to_url)
69
+ end
70
+ end
@@ -0,0 +1,55 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestBar < Test::Unit::TestCase
4
+ should 'have a default chart type' do
5
+ assert_match(/\bcht=bvs\b/, GoogleChart::Bar.new.to_url)
6
+ end
7
+
8
+ should 'support horizontal orientation' do
9
+ assert_match(/\bcht=bhs\b/, GoogleChart::Bar.new(:horizontal => true).to_url)
10
+ end
11
+
12
+ should 'support grouped grouping' do
13
+ assert_match(/\bcht=bvg\b/, GoogleChart::Bar.new(:grouped => true).to_url)
14
+ end
15
+
16
+ should 'support horizontal orientation and grouped grouping' do
17
+ assert_match(/\bcht=bhg\b/, GoogleChart::Bar.new(:horizontal => true, :grouped => true).to_url)
18
+ end
19
+
20
+ should 'include Axes module' do
21
+ assert GoogleChart::Axes === GoogleChart::Bar.new
22
+ end
23
+
24
+ should 'include BarStyles module' do
25
+ assert GoogleChart::BarStyles === GoogleChart::Bar.new
26
+ end
27
+
28
+ should 'include Colors module' do
29
+ assert GoogleChart::Colors === GoogleChart::Bar.new
30
+ end
31
+
32
+ should 'include Data module' do
33
+ assert GoogleChart::Data === GoogleChart::Bar.new
34
+ end
35
+
36
+ should 'include GridLines module' do
37
+ assert GoogleChart::GridLines === GoogleChart::Bar.new
38
+ end
39
+
40
+ should 'include Legends module' do
41
+ assert GoogleChart::Legends === GoogleChart::Bar.new
42
+ end
43
+
44
+ should 'include RangeMarkers module' do
45
+ assert GoogleChart::RangeMarkers === GoogleChart::Bar.new
46
+ end
47
+
48
+ should 'include Sizes module' do
49
+ assert GoogleChart::Sizes === GoogleChart::Bar.new
50
+ end
51
+
52
+ should 'include Titles module' do
53
+ assert GoogleChart::Titles === GoogleChart::Bar.new
54
+ end
55
+ end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestBarStyles < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::BarStyles }
6
+ end
7
+
8
+ should 'not display bar style parameter by default' do
9
+ assert_no_match(/\bchbh=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'display with custom bar width' do
13
+ assert_match(/\bchbh=10\b/, @klass.new(:width => 10).to_url)
14
+ end
15
+
16
+ should 'display with custom bar width and spacing' do
17
+ assert_match(/\bchbh=8,6\b/, @klass.new(:width => 8, :spacing => 6).to_url)
18
+ end
19
+
20
+ should 'display with custom bar width, spacing and group spacing' do
21
+ assert_match(/\bchbh=10,4,12\b/, @klass.new(:width => 10, :spacing => [4,12]).to_url)
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestBase < Test::Unit::TestCase
4
+ should 'require descendent classes to define #chart_type method' do
5
+ klass = Class.new(GoogleChart::Base)
6
+ assert_raise(NoMethodError, /chart_type/) { klass.new.to_url }
7
+
8
+ klass.class_eval { def chart_type() end }
9
+ assert_nothing_raised { klass.new.to_url }
10
+ end
11
+
12
+ should 'allow descendent classes to maintain distinct parameter registries' do
13
+ klass = Class.new(GoogleChart::Base)
14
+ another_klass = Class.new(GoogleChart::Base)
15
+ assert_not_same(another_klass.registry, klass.registry)
16
+ end
17
+
18
+ should 'begin URLs with Google Charts base URL' do
19
+ assert_match(%r{\Ahttp://chart\.apis\.google\.com/chart\?}, Class.new(MockChart).new.to_url)
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestColors < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::Colors }
6
+ end
7
+
8
+ should 'not display color parameter by default' do
9
+ assert_no_match(/\bchco=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'display single color parameter' do
13
+ assert_match(/\bchco=ff0000\b/, @klass.new(:color => 'ff0000').to_url)
14
+ end
15
+
16
+ should 'display multiple color parameters' do
17
+ assert_match(/\bchco=ff0000,00ff00,0000ff\b/, @klass.new(:color => %w[ff0000 00ff00 0000ff]).to_url)
18
+ end
19
+
20
+ should 'convert 3-digit colors to 6-digit colors'
21
+ end
@@ -0,0 +1,81 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestData < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::Data }
6
+ end
7
+
8
+ should 'use simple encoding by default' do
9
+ assert_match(/\bchd=s:AB89\b/, @klass.new(:data => [0,1,60,61]).to_url)
10
+ end
11
+
12
+ context 'simple encoding' do
13
+ should 'encode single dataset' do
14
+ assert_match(/\bchd=s:Af9\b/, @klass.new(:data => [0, 31, 61], :encoding => :simple).to_url)
15
+ end
16
+
17
+ should 'encode multiple datasets' do
18
+ assert_match(/\bchd=s:JP,YH\b/, @klass.new(:data => [[9, 15], [24, 7]], :encoding => :simple).to_url)
19
+ end
20
+
21
+ should 'encode missing data' do
22
+ assert_match(/\bchd=s:y_h\b/, @klass.new(:data => [50, nil, 33], :encoding => :simple).to_url)
23
+ end
24
+
25
+ should 'encode floating point data' do
26
+ assert_match(/\bchd=s:yh\b/, @klass.new(:data => [49.5, 33.4], :encoding => :simple).to_url)
27
+ end
28
+
29
+ should 'scale data based on maximum value by default'
30
+
31
+ should 'scale data using custom scale'
32
+ end
33
+
34
+ context 'extended encoding' do
35
+ should 'encode single dataset' do
36
+ assert_match(/\bchd=e:AA\.\.gA\b/, @klass.new(:data => [0, 4095, 2048], :encoding => :extended).to_url)
37
+ end
38
+
39
+ should 'encode multiple datasets' do
40
+ assert_match(/\bchd=e:jpyh,JPYH\b/, @klass.new(:data => [[2281, 3233], [591, 1543]], :encoding => :extended).to_url)
41
+ end
42
+
43
+ should 'encode missing data' do
44
+ assert_match(/\bchd=e:jp__yh\b/, @klass.new(:data => [2281, nil, 3233], :encoding => :extended).to_url)
45
+ end
46
+
47
+ should 'encode floating point data' do
48
+ assert_match(/\bchd=e:jpyh\b/, @klass.new(:data => [2281.4, 3232.5], :encoding => :extended).to_url)
49
+ end
50
+
51
+ should 'scale data based on maximum value by default'
52
+
53
+ should 'scale data using custom scale'
54
+ end
55
+
56
+ context 'text encoding' do
57
+ should 'encode single dataset' do
58
+ assert_match(/\bchd=t:6,14,5.2\b/, @klass.new(:data => [6, 14, 5.23], :encoding => :text).to_url)
59
+ end
60
+
61
+ should 'encode multiple datasets' do
62
+ assert_match(/\bchd=t:6,14\|5,23\b/, @klass.new(:data => [[6, 14], [5, 23]], :encoding => :text).to_url)
63
+ end
64
+
65
+ should 'encode missing data' do
66
+ assert_match(/\bchd=t:6,-1,14\b/, @klass.new(:data => [6, nil, 14], :encoding => :text).to_url)
67
+ end
68
+
69
+ should 'round floating point data to nearest 10th' do
70
+ assert_match(/\bchd=t:6.1,8.2\b/, @klass.new(:data => [6.14, 8.16], :encoding => :text).to_url)
71
+ end
72
+
73
+ should 'round floating point data to nearest integer when possible' do
74
+ assert_match(/\bchd=t:6,14\b/, @klass.new(:data => [5.95, 14.04], :encoding => :text).to_url)
75
+ end
76
+
77
+ should 'scale data based on maximum value by default'
78
+
79
+ should 'scale data using custom scale'
80
+ end
81
+ end
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestGridLines < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::GridLines }
6
+ end
7
+
8
+ should 'not display grid lines by default' do
9
+ assert_no_match(/\bchg=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'display vertical grid lines' do
13
+ assert_match(/\bchg=5,0\b/, @klass.new(:grid => {:x => 5}).to_url)
14
+ end
15
+
16
+ should 'display horizontal grid lines' do
17
+ assert_match(/\bchg=0,5\b/, @klass.new(:grid => {:y => 5}).to_url)
18
+ end
19
+
20
+ should 'display horizontal and vertical grid lines' do
21
+ assert_match(/\bchg=6,14\b/, @klass.new(:grid => {:x => 6, :y => 14}).to_url)
22
+ end
23
+
24
+ should 'display solid grid lines' do
25
+ assert_match(/\bchg=8,16,1,0\b/, @klass.new(:grid => {:x => 8, :y => 16, :style => :solid}).to_url)
26
+ end
27
+
28
+ should 'display dashed grid lines' do
29
+ assert_match(/\bchg=8,16,3,2\b/, @klass.new(:grid => {:x => 8, :y => 16, :style => :dash}).to_url)
30
+ end
31
+
32
+ should 'display dotted grid lines' do
33
+ assert_match(/\bchg=8,16,1,2\b/, @klass.new(:grid => {:x => 8, :y => 16, :style => :dot}).to_url)
34
+ end
35
+ end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestLegends < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::Legends }
6
+ end
7
+
8
+ should 'not display legend by default' do
9
+ assert_no_match(/\bchdl=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'display legend for single dataset' do
13
+ assert_match(/\bchdl=Foo\b/, @klass.new(:legend => 'Foo').to_url)
14
+ end
15
+
16
+ should 'display legend for multiple datasets' do
17
+ assert_match(/\bchdl=Foo\|Bar\|Baz\b/, @klass.new(:legend => %w[Foo Bar Baz]).to_url)
18
+ end
19
+
20
+ should 'escape legend text for url' do
21
+ assert_match(/\bchdl=Foo\+Bar%7CBaz\b/, @klass.new(:legend => 'Foo Bar|Baz').to_url)
22
+ end
23
+ end
@@ -0,0 +1,55 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestLine < Test::Unit::TestCase
4
+ should 'have a default chart type' do
5
+ assert_match(/\bcht=lc\b/, GoogleChart::Line.new.to_url)
6
+ end
7
+
8
+ should 'support xy chart type' do
9
+ assert_match(/\bcht=lxy\b/, GoogleChart::Line.new(:type => :xy).to_url)
10
+ end
11
+
12
+ should 'support sparkline chart type' do
13
+ assert_match(/\bcht=ls\b/, GoogleChart::Line.new(:type => :sparkline).to_url)
14
+ end
15
+
16
+ should 'support line as chart type' do
17
+ assert_match(/\bcht=lc\b/, GoogleChart::Line.new(:type => :line).to_url)
18
+ end
19
+
20
+ should 'include Axes module' do
21
+ assert GoogleChart::Axes === GoogleChart::Line.new
22
+ end
23
+
24
+ should 'include Colors module' do
25
+ assert GoogleChart::Colors === GoogleChart::Line.new
26
+ end
27
+
28
+ should 'include Data module' do
29
+ assert GoogleChart::Data === GoogleChart::Line.new
30
+ end
31
+
32
+ should 'include GridLines module' do
33
+ assert GoogleChart::GridLines === GoogleChart::Line.new
34
+ end
35
+
36
+ should 'include Legends module' do
37
+ assert GoogleChart::Legends === GoogleChart::Line.new
38
+ end
39
+
40
+ should 'include LineStyles module' do
41
+ assert GoogleChart::LineStyles === GoogleChart::Line.new
42
+ end
43
+
44
+ should 'include RangeMarkers module' do
45
+ assert GoogleChart::RangeMarkers === GoogleChart::Line.new
46
+ end
47
+
48
+ should 'include Sizes module' do
49
+ assert GoogleChart::Sizes === GoogleChart::Line.new
50
+ end
51
+
52
+ should 'include Titles module' do
53
+ assert GoogleChart::Titles === GoogleChart::Line.new
54
+ end
55
+ end
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestLineStyles < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::LineStyles }
6
+ end
7
+
8
+ should 'not include line styles by default' do
9
+ assert_no_match(/\bchls=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'support solid lines' do
13
+ assert_match(/\bchls=1,1,0\b/, @klass.new(:style => :solid).to_url)
14
+ end
15
+
16
+ should 'support dashed lines' do
17
+ assert_match(/\bchls=1,3,2\b/, @klass.new(:style => :dash).to_url)
18
+ end
19
+
20
+ should 'support dotted lines' do
21
+ assert_match(/\bchls=1,1,2\b/, @klass.new(:style => :dot).to_url)
22
+ end
23
+
24
+ should 'support multiple line styles' do
25
+ assert_match(/\bchls=1,3,2\|1,1,2\|1,1,0\b/, @klass.new(:style => [:dash, :dot, :solid]).to_url)
26
+ end
27
+
28
+ should 'support custom line width' do
29
+ assert_match(/\bchls=2,2,0\b/, @klass.new(:width => 2).to_url)
30
+ end
31
+
32
+ should 'support named line style with custom width' do
33
+ assert_match(/\bchls=2,6,4\b/, @klass.new(:style => :dash, :width => 2).to_url)
34
+ end
35
+
36
+ should 'support multiple line styles and multiple custom widths' do
37
+ assert_match(/\bchls=2,2,4\|3,9,6\b/, @klass.new(:style => [:dot, :dash], :width => [2, 3]).to_url)
38
+ end
39
+
40
+ should 'use default line width if there are more styles than widths' do
41
+ assert_match(/\bchls=2,2,4\|1,3,2\|1,1,0\b/, @klass.new(:style => [:dot, :dash, :solid], :width => 2).to_url)
42
+ end
43
+
44
+ should 'use default line style if there are more widths than styles' do
45
+ assert_match(/\bchls=2,2,4\|3,3,0\|2,2,0\b/, @klass.new(:style => :dot, :width => [2, 3, 2]).to_url)
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestRangeMarkers < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::RangeMarkers }
6
+ end
7
+
8
+ should 'not have range markers by default' do
9
+ assert_no_match(/\bchm=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'display horizontal range markers' do
13
+ assert_match(/\bchm=r,000000cc,x,0.45,0.55\b/, @klass.new(:ranges => [:h, 0.45, 0.55]).to_url)
14
+ end
15
+
16
+ should 'display vertical range markers' do
17
+ assert_match(/\bchm=R,000000cc,x,0.45,0.55\b/, @klass.new(:ranges => [:v, 0.45, 0.55]).to_url)
18
+ end
19
+
20
+ should 'display multiple range markers' do
21
+ assert_match(/\bchm=r,000000cc,x,0.1,0.2\|R,000000cc,x,0.3,0.4\b/, @klass.new(:ranges => [[:h, 0.1, 0.2], [:v, 0.3, 0.4]]).to_url)
22
+ end
23
+
24
+ should 'display range markers with custom colors' do
25
+ assert_match(/\bchm=r,abcdef,x,0.4,0.6\b/, @klass.new(:ranges => [:h, 'abcdef', 0.4, 0.6]).to_url)
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestSizes < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::Sizes }
6
+ end
7
+
8
+ should 'have a default size' do
9
+ assert_match(/\bchs=600x500\b/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'accept custom size' do
13
+ assert_match(/\bchs=800x375\b/, @klass.new(:size => '800x375').to_url)
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class TestTitles < Test::Unit::TestCase
4
+ def setup
5
+ @klass = Class.new(MockChart).class_eval { include GoogleChart::Titles }
6
+ end
7
+
8
+ should 'not have a title by default' do
9
+ assert_no_match(/\bchtt=/, @klass.new.to_url)
10
+ end
11
+
12
+ should 'url-encode title' do
13
+ assert_match(/\bchtt=foo\+bar\b/, @klass.new(:title => 'foo bar').to_url)
14
+ end
15
+ end
@@ -0,0 +1,97 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestGoogleChart < Test::Unit::TestCase
4
+ context '#Line' do
5
+ context 'with hash parameters' do
6
+ setup do
7
+ @url = GoogleChart.Line(:size => '1000x300', :data => [[35, 41], [50, 33]])
8
+ end
9
+
10
+ should 'return Google Chart URL' do
11
+ assert_match(%r{\Ahttp://chart\.apis\.google\.com/chart\?}, @url)
12
+ end
13
+
14
+ should 'include chart type parameter' do
15
+ assert_match(/\bcht=lc\b/, @url)
16
+ end
17
+
18
+ should 'include chart size parameter' do
19
+ assert_match(/\bchs=1000x300\b/, @url)
20
+ end
21
+
22
+ should 'include chart data parameter' do
23
+ assert_match(/\bchd=s:jp,yh\b/, @url)
24
+ end
25
+ end
26
+
27
+ context 'with block parameters' do
28
+ setup do
29
+ @url = GoogleChart.Line do |c|
30
+ c.size = '800x375'
31
+ c.data = [[35, 41], [50, 33]]
32
+ end
33
+ end
34
+
35
+ should 'return Google Chart URL' do
36
+ assert_match(%r{\Ahttp://chart\.apis\.google\.com/chart\?}, @url)
37
+ end
38
+
39
+ should 'include chart type parameter' do
40
+ assert_match(/\bcht=lc\b/, @url)
41
+ end
42
+
43
+ should 'include chart size parameter' do
44
+ assert_match(/\bchs=800x375\b/, @url)
45
+ end
46
+
47
+ should 'include chart data parameter' do
48
+ assert_match(/\bchd=s:jp,yh\b/, @url)
49
+ end
50
+ end
51
+ end
52
+
53
+ context '#Bar' do
54
+ context 'with hash parameters' do
55
+ setup do
56
+ @url = GoogleChart.Bar(:size => '1000x300', :data => [[35, 41], [50, 33]])
57
+ end
58
+
59
+ should 'return Google Chart URL' do
60
+ assert_match(%r{\Ahttp://chart\.apis\.google\.com/chart\?}, @url)
61
+ end
62
+
63
+ should 'include chart type parameter' do
64
+ assert_match(/\bcht=bvs\b/, @url)
65
+ end
66
+
67
+ should 'include chart size parameter' do
68
+ assert_match(/\bchs=1000x300\b/, @url)
69
+ end
70
+ end
71
+
72
+ context 'with block parameters' do
73
+ setup do
74
+ @url = GoogleChart.Bar do |c|
75
+ c.size = '800x375'
76
+ c.data = [[35, 41], [50, 33]]
77
+ end
78
+ end
79
+
80
+ should 'return Google Chart URL' do
81
+ assert_match(%r{\Ahttp://chart\.apis\.google\.com/chart\?}, @url)
82
+ end
83
+
84
+ should 'include chart type parameter' do
85
+ assert_match(/\bcht=bvs\b/, @url)
86
+ end
87
+
88
+ should 'include chart size parameter' do
89
+ assert_match(/\bchs=800x375\b/, @url)
90
+ end
91
+
92
+ should 'include chart data parameter' do
93
+ assert_match(/\bchd=s:jp,yh\b/, @url)
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,11 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require 'shoulda'
4
+ require 'redgreen' unless ENV['TM_MODE']
5
+ require File.dirname(__FILE__) + '/../lib/google_chart'
6
+
7
+ class MockChart < GoogleChart::Base
8
+ def chart_type
9
+ 'cht=mock'
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jparker-ruby-googlechart
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - John Parker
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-11-11 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: newgem
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.3
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: hoe
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 1.8.0
32
+ version:
33
+ - !ruby/object:Gem::Dependency
34
+ name: thoughtbot-shoulda
35
+ version_requirement:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.0.0
41
+ version:
42
+ description: ruby-googlechart is a ruby library which provides object-oriented access to the Google Charts API
43
+ email: jparker@urgetopunt.com
44
+ executables: []
45
+
46
+ extensions: []
47
+
48
+ extra_rdoc_files:
49
+ - History.txt
50
+ - Manifest.txt
51
+ - README.txt
52
+ files:
53
+ - History.txt
54
+ - Manifest.txt
55
+ - Rakefile
56
+ - README.txt
57
+ - lib/google_chart.rb
58
+ - lib/google_chart/axes.rb
59
+ - lib/google_chart/bar.rb
60
+ - lib/google_chart/bar_styles.rb
61
+ - lib/google_chart/base.rb
62
+ - lib/google_chart/colors.rb
63
+ - lib/google_chart/data.rb
64
+ - lib/google_chart/grid_lines.rb
65
+ - lib/google_chart/legends.rb
66
+ - lib/google_chart/line.rb
67
+ - lib/google_chart/line_styles.rb
68
+ - lib/google_chart/range_markers.rb
69
+ - lib/google_chart/sizes.rb
70
+ - lib/google_chart/titles.rb
71
+ has_rdoc: false
72
+ homepage: http://github.com/jparker/ruby-googlechart
73
+ post_install_message:
74
+ rdoc_options:
75
+ - --main
76
+ - README.txt
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: "0"
84
+ version:
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: "0"
90
+ version:
91
+ requirements: []
92
+
93
+ rubyforge_project:
94
+ rubygems_version: 1.2.0
95
+ signing_key:
96
+ specification_version: 2
97
+ summary: Ruby wrapper for the Google Charts API
98
+ test_files:
99
+ - test/test_helper.rb
100
+ - test/test_google_chart.rb
101
+ - test/google_chart/test_axes.rb
102
+ - test/google_chart/test_bar.rb
103
+ - test/google_chart/test_bar_styles.rb
104
+ - test/google_chart/test_base.rb
105
+ - test/google_chart/test_colors.rb
106
+ - test/google_chart/test_data.rb
107
+ - test/google_chart/test_grid_lines.rb
108
+ - test/google_chart/test_legends.rb
109
+ - test/google_chart/test_line.rb
110
+ - test/google_chart/test_line_styles.rb
111
+ - test/google_chart/test_range_markers.rb
112
+ - test/google_chart/test_sizes.rb
113
+ - test/google_chart/test_titles.rb