googlecharts 1.3.4 → 1.3.6

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
@@ -1,4 +1,2 @@
1
- {�(
2
- �����?������~^��k�
3
- �H��с7���j����J� �1)F��XC��ږ����c̘<9a�9�p�t5K�p �5��`�сb II�3��F鐫ﶫ_ ��bl&`=�; ����I#�3Zd�@�sx�ޭa��^#'�z�2O������1��̀�>�s��|�
4
- �bw���\"Lڇ�j <���K��ynv�9d`~��G��Y�
1
+ Е{.���Z��M4G�����ZZ$6<���V!Bt�Ye�=)�!xV�_-0��������N3�D� ^L0�S� ~����@�^ ���@/���� ��G;�_8��_PN��H�%q��asR���:���7��/гn�^����'�"����B>y��(G�������S��n.>��{9�����V`%^��F h/�m~Z,�`
2
+ �O�D��>stt̥t+
data/History.txt CHANGED
@@ -1,3 +1,11 @@
1
+ == 1.3.6
2
+ * support nil values. The Google Charts API specifies that a single underscore (_) can be used to omit a value from a line chart with 'simple' data encoding, and a double underscore (__) can do the same for a chart with 'extended' data encoding. (Matt Moyer)
3
+ * allow a label to appear on a google-o-meter via the :legend option. (hallettj)
4
+
5
+ == 1.3.5
6
+ * added code to properly escape image tag URLs (mokolabs)
7
+ * added themes support + 4 default themes (keynote, thirty7signals, pastel, greyscale) chart.line(:theme=>:keynote) (jakehow)
8
+
1
9
  == 1.3.4
2
10
  * updated documentation and cleaned it up (mokolabs)
3
11
  * added support for custom class, id and alt tags when using the image_tag format (i.e Gchart.line(:data => [0, 26], :format => 'image_tag')) (mokolabs)
data/Manifest.txt CHANGED
@@ -7,9 +7,11 @@ config/hoe.rb
7
7
  config/requirements.rb
8
8
  lib/gchart.rb
9
9
  lib/gchart/aliases.rb
10
+ lib/gchart/theme.rb
10
11
  lib/gchart/version.rb
11
12
  setup.rb
12
13
  spec/gchart_spec.rb
14
+ spec/theme_spec.rb
13
15
  spec/spec.opts
14
16
  spec/spec_helper.rb
15
17
  tasks/environment.rake
data/lib/gchart.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  $:.unshift File.dirname(__FILE__)
2
2
  require 'gchart/version'
3
+ require 'gchart/theme'
3
4
  require "open-uri"
4
5
  require "uri"
5
6
 
@@ -19,6 +20,9 @@ class Gchart
19
20
 
20
21
  # Support for Gchart.line(:title => 'my title', :size => '400x600')
21
22
  def self.method_missing(m, options={})
23
+ # Start with theme defaults if a theme is set
24
+ theme = options[:theme]
25
+ options = theme ? Chart::Theme.load(theme).to_options.merge(options) : options
22
26
  # Extract the format and optional filename, then clean the hash
23
27
  format = options[:format] || 'url'
24
28
  @@file_name = options[:filename] unless options[:filename].nil?
@@ -130,7 +134,7 @@ class Gchart
130
134
  image = "<img"
131
135
  image += " id=\"#{@id}\"" if @id
132
136
  image += " class=\"#{@class}\"" if @class
133
- image += " src=\"#{query_builder}\""
137
+ image += " src=\"#{query_builder(:html)}\""
134
138
  image += " width=\"#{@width}\""
135
139
  image += " height=\"#{@height}\""
136
140
  image += " alt=\"#{@alt}\""
@@ -231,7 +235,7 @@ class Gchart
231
235
  # or
232
236
  # Gchart.line(:legend => ['first label', 'last label'])
233
237
  def set_legend
234
- return set_labels if @type == :pie || @type == :pie_3d
238
+ return set_labels if @type == :pie || @type == :pie_3d || @type == :meter
235
239
 
236
240
  if @legend.is_a?(Array)
237
241
  "chdl=#{@legend.map{|label| "#{label}"}.join('|')}"
@@ -321,12 +325,12 @@ class Gchart
321
325
  # to about 300 pixels. Simple encoding is suitable for all other types of chart regardless of size.
322
326
  def simple_encoding(dataset=[])
323
327
  dataset = prepare_dataset(dataset)
324
- @max_value = dataset.map{|ds| ds.max}.max if @max_value == 'auto'
328
+ @max_value = dataset.compact.map{|ds| ds.compact.max}.max if @max_value == 'auto'
325
329
 
326
330
  if @max_value == false || @max_value == 'false' || @max_value == :false || @max_value == 0
327
- "s:" + dataset.map { |ds| ds.map { |number| convert_to_simple_value(number) }.join }.join(',')
331
+ "s:" + dataset.map { |ds| ds.map { |number| number.nil? ? '_' : convert_to_simple_value(number) }.join }.join(',')
328
332
  else
329
- "s:" + dataset.map { |ds| ds.map { |number| convert_to_simple_value( (@@simple_chars.size - 1) * number / @max_value) }.join }.join(',')
333
+ "s:" + dataset.map { |ds| ds.map { |number| number.nil? ? '_' : convert_to_simple_value( (@@simple_chars.size - 1) * number / @max_value) }.join }.join(',')
330
334
  end
331
335
 
332
336
  end
@@ -357,18 +361,18 @@ class Gchart
357
361
  def extended_encoding(dataset=[])
358
362
 
359
363
  dataset = prepare_dataset(dataset)
360
- @max_value = dataset.map{|ds| ds.max}.max if @max_value == 'auto'
364
+ @max_value = dataset.compact.map{|ds| ds.compact.max}.max if @max_value == 'auto'
361
365
 
362
366
  if @max_value == false || @max_value == 'false' || @max_value == :false
363
- "e:" + dataset.map { |ds| ds.map { |number| convert_to_extended_value(number)}.join }.join(',')
367
+ "e:" + dataset.map { |ds| ds.map { |number| number.nil? ? '__' : convert_to_extended_value(number)}.join }.join(',')
364
368
  else
365
- "e:" + dataset.map { |ds| ds.map { |number| convert_to_extended_value( (@@ext_pairs.size - 1) * number / @max_value) }.join }.join(',')
369
+ "e:" + dataset.map { |ds| ds.map { |number| number.nil? ? '__' : convert_to_extended_value( (@@ext_pairs.size - 1) * number / @max_value) }.join }.join(',')
366
370
  end
367
371
 
368
372
  end
369
373
 
370
374
 
371
- def query_builder
375
+ def query_builder(options="")
372
376
  query_params = instance_variables.map do |var|
373
377
  case var
374
378
  # Set the graph size
@@ -399,7 +403,15 @@ class Gchart
399
403
  end
400
404
  end.compact
401
405
 
402
- jstize(@@url + query_params.join('&'))
406
+ # Use ampersand as default delimiter
407
+ unless options == :html
408
+ delimiter = '&'
409
+ # Escape ampersand for html image tags
410
+ else
411
+ delimiter = '&amp;'
412
+ end
413
+
414
+ jstize(@@url + query_params.join(delimiter))
403
415
  end
404
416
 
405
- end
417
+ end
@@ -0,0 +1,46 @@
1
+ require 'yaml'
2
+
3
+ module Chart
4
+ class Theme
5
+ class ThemeNotFound < RuntimeError; end
6
+
7
+ @@theme_files = ["#{File.dirname(__FILE__)}/../themes.yml"]
8
+
9
+ attr_accessor :colors
10
+ attr_accessor :bar_colors
11
+ attr_accessor :background
12
+ attr_accessor :chart_background
13
+
14
+ def self.load(theme_name)
15
+ theme = new(theme_name)
16
+ end
17
+
18
+ def self.theme_files
19
+ @@theme_files
20
+ end
21
+
22
+ # Allows you to specify paths for custom theme files in YAML format
23
+ def self.add_theme_file(file)
24
+ @@theme_files << file
25
+ end
26
+
27
+ def initialize(theme_name)
28
+ themes = {}
29
+ @@theme_files.each {|f| themes.update YAML::load(File.open(f))}
30
+ theme = themes[theme_name]
31
+ if theme
32
+ self.colors = theme[:colors]
33
+ self.bar_colors = theme[:bar_colors]
34
+ self.background = theme[:background]
35
+ self.chart_background = theme[:chart_background]
36
+ self
37
+ else
38
+ raise(ThemeNotFound, "Could not locate the #{theme_name} theme ...")
39
+ end
40
+ end
41
+
42
+ def to_options
43
+ {:background => background, :chart_background => chart_background, :bar_colors => bar_colors.join(',')}
44
+ end
45
+ end
46
+ end
@@ -2,7 +2,7 @@ module GchartInfo #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
4
  MINOR = 3
5
- TINY = 4
5
+ TINY = 6
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/spec/gchart_spec.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
  require File.dirname(__FILE__) + '/../lib/gchart'
3
3
 
4
+ Chart::Theme.add_theme_file("#{File.dirname(__FILE__)}/fixtures/test_theme.yml")
5
+
4
6
  # Time to add your specs!
5
7
  # http://rspec.rubyforge.org/
6
8
  describe "generating a default Gchart" do
@@ -26,6 +28,11 @@ describe "generating a default Gchart" do
26
28
  @chart.include?('cht=lc').should be_true
27
29
  end
28
30
 
31
+ it 'should use theme defaults if theme is set' do
32
+ Gchart.line(:theme=>:test).include?('chco=6886B4,FDD84E').should be_true
33
+ Gchart.line(:theme=>:test).include?(Gchart.jstize('chf=c,s,FFFFFF|bg,s,FFFFFF')).should be_true
34
+ end
35
+
29
36
  it "should use the simple encoding by default with auto max value" do
30
37
  # 9 is the max value in simple encoding, 26 being our max value the 2nd encoded value should be 9
31
38
  Gchart.line(:data => [0, 26]).include?('chd=s:A9').should be_true
@@ -404,6 +411,15 @@ describe 'exporting a chart' do
404
411
  it "should be available as an image tag using custom css class selector" do
405
412
  Gchart.line(:data => [0, 26], :format => 'image_tag', :class => 'chart').should match(/<img class="chart" src=(.*) width="300" height="200" alt="Google Chart" \/>/)
406
413
  end
414
+
415
+ it "should use ampersands to separate key/value pairs in URLs by default" do
416
+ Gchart.line(:data => [0, 26]).should satisfy {|chart| chart.include? "&" }
417
+ Gchart.line(:data => [0, 26]).should_not satisfy {|chart| chart.include? "&amp;" }
418
+ end
419
+
420
+ it "should escape ampersands in URLs when used as an image tag" do
421
+ Gchart.line(:data => [0, 26], :format => 'image_tag', :class => 'chart').should satisfy {|chart| chart.include? "&amp;" }
422
+ end
407
423
 
408
424
  it "should be available as a file" do
409
425
  File.delete('chart.png') if File.exist?('chart.png')
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+ require File.dirname(__FILE__) + '/../lib/gchart'
3
+
4
+ describe "generating a default Gchart" do
5
+ it 'should be able to add additional theme files' do
6
+ Chart::Theme.theme_files.should_not include("#{File.dirname(__FILE__)}/fixtures/another_test_theme.yml")
7
+ Chart::Theme.add_theme_file("#{File.dirname(__FILE__)}/fixtures/another_test_theme.yml")
8
+ Chart::Theme.theme_files.should include("#{File.dirname(__FILE__)}/fixtures/another_test_theme.yml")
9
+ end
10
+
11
+ it 'should be able to load themes from the additional theme files' do
12
+ lambda { Chart::Theme.load(:test_two) }.should_not raise_error
13
+ end
14
+
15
+ it 'should raise ThemeNotFound if theme does not exist' do
16
+ lambda { Chart::Theme.load(:nonexistent) }.should raise_error(Chart::Theme::ThemeNotFound, "Could not locate the nonexistent theme ...")
17
+ end
18
+
19
+ it 'should set colors array' do
20
+ Chart::Theme.load(:keynote).colors.should eql(["6886B4", "FDD84E", "72AE6E", "D1695E", "8A6EAF", "EFAA43", "FFFFFF", "000000"])
21
+ end
22
+
23
+ it 'should set bar colors array' do
24
+ Chart::Theme.load(:keynote).bar_colors.should eql(["6886B4", "FDD84E", "72AE6E", "D1695E", "8A6EAF", "EFAA43"])
25
+ end
26
+
27
+ it 'should set background' do
28
+ Chart::Theme.load(:keynote).background.should eql("000000")
29
+ end
30
+
31
+ it 'should set chart background' do
32
+ Chart::Theme.load(:keynote).chart_background.should eql("FFFFFF")
33
+ end
34
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: googlecharts
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Aimonetti
@@ -30,10 +30,19 @@ cert_chain:
30
30
  ZR7qHIpykzr3ezcNiWtBWw==
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2008-06-26 00:00:00 -07:00
33
+ date: 2008-10-04 00:00:00 -07:00
34
34
  default_executable:
35
- dependencies: []
36
-
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: hoe
38
+ type: :development
39
+ version_requirement:
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 1.7.0
45
+ version:
37
46
  description: description of gem
38
47
  email: mattaimonetti@gmail.com
39
48
  executables: []
@@ -55,9 +64,11 @@ files:
55
64
  - config/requirements.rb
56
65
  - lib/gchart.rb
57
66
  - lib/gchart/aliases.rb
67
+ - lib/gchart/theme.rb
58
68
  - lib/gchart/version.rb
59
69
  - setup.rb
60
70
  - spec/gchart_spec.rb
71
+ - spec/theme_spec.rb
61
72
  - spec/spec.opts
62
73
  - spec/spec_helper.rb
63
74
  - tasks/environment.rake
metadata.gz.sig CHANGED
Binary file