garru-g_viz 0.0.1 → 0.0.2

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/CHANGELOG CHANGED
@@ -1 +1,2 @@
1
+ v0.0.2 this version is usable. Introduced graph.add_(graph_name) semantic sugar.
1
2
  v0.0.1 making this a gem
data/Manifest CHANGED
@@ -1,6 +1,8 @@
1
1
  CHANGELOG
2
2
  lib/g_viz/g_viz.rb
3
+ lib/g_viz/graph.rb
3
4
  lib/g_viz/templates/visualization.erb
5
+ lib/g_viz.rb
4
6
  Manifest
5
7
  Rakefile
6
8
  README
data/g_viz.gemspec CHANGED
@@ -2,15 +2,15 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{g_viz}
5
- s.version = "0.0.1"
5
+ s.version = "0.0.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Gary Tsang"]
9
9
  s.date = %q{2009-05-04}
10
10
  s.description = %q{Ruby Scribe Client. Package and Wrapper for generated ruby interfaces}
11
11
  s.email = %q{}
12
- s.extra_rdoc_files = ["CHANGELOG", "lib/g_viz/g_viz.rb", "lib/g_viz/templates/visualization.erb", "README"]
13
- s.files = ["CHANGELOG", "lib/g_viz/g_viz.rb", "lib/g_viz/templates/visualization.erb", "Manifest", "Rakefile", "README", "spec/g_viz/fixtures/annotated_timeline.rb", "spec/g_viz/g_viz_spec.rb", "spec/g_viz/templates/rendered_annotated_timeline.html", "spec/test_helper.rb", "g_viz.gemspec"]
12
+ s.extra_rdoc_files = ["CHANGELOG", "lib/g_viz/g_viz.rb", "lib/g_viz/graph.rb", "lib/g_viz/templates/visualization.erb", "lib/g_viz.rb", "README"]
13
+ s.files = ["CHANGELOG", "lib/g_viz/g_viz.rb", "lib/g_viz/graph.rb", "lib/g_viz/templates/visualization.erb", "lib/g_viz.rb", "Manifest", "Rakefile", "README", "spec/g_viz/fixtures/annotated_timeline.rb", "spec/g_viz/g_viz_spec.rb", "spec/g_viz/templates/rendered_annotated_timeline.html", "spec/test_helper.rb", "g_viz.gemspec"]
14
14
  s.has_rdoc = true
15
15
  s.homepage = %q{http://github.com/garru/GViz}
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "G_viz", "--main", "README"]
data/lib/g_viz/g_viz.rb CHANGED
@@ -1,148 +1,37 @@
1
- require 'set'
2
- require 'date'
3
- require 'erb'
4
- require 'json'
5
- class GViz
6
- @@viz_package_names = Set.new
7
- @@config = {}
8
- @@graphs = []
9
- @@template_name = File.join(File.dirname(__FILE__), 'templates', 'visualization.erb')
10
- class << self
11
-
12
- # <script type='text/javascript' src='http://www.google.com/jsapi<%= @api_key %>'></script>
13
- # <script type='text/javascript'>
14
- # google.load('visualization', '1', {'packages':[<%= @@viz_package_names.map{|p|p.downcase}.join(',') %>]});
15
- # google.setOnLoadCallback(drawChart);
16
- # function drawChart() {
17
- # <% @graphs.each do |graph| %>
18
- # var <%= graph.data_name%> = new google.visualization.DataTable();
19
- #
20
- # <% graph.columns.each do |column| %>
21
- # <%= graph.data_name%>.addColumn('<%= column[0] %>', '<%= column[1] %>')
22
- # <% end %>
23
- #
24
- # <%= graph.data_name%>.addRows(<%= graph.size %>)
25
- #
26
- # <% graph.rows.each_with_index do |row, i| %>
27
- # <% row.each_with_index do |value, j| %>
28
- # <%= graph.data_name%>.setValue(<%= i %>, <%= j %>, value)
29
- # <% end %>
30
- # <% end %>
31
- # <% end %>
32
- # var chart_<%= graph.data_name%> = new google.visualization.<%=graph.chart_type%>(document.getElementById('<%=graph.chart_id%>'));
33
- # chart.draw(data, <%=graph.options%>);
34
- # }
35
- # </script>
36
-
1
+ require File.join(File.dirname(__FILE__), 'graph')
2
+
3
+ module GViz
4
+ class Base
5
+
6
+ def initialize(config = {})
7
+ @viz_package_names = Set.new
8
+ @config = config
9
+ @graphs = []
10
+ @template_name = File.join(File.dirname(__FILE__), 'templates', 'visualization.erb')
11
+ end
12
+
37
13
  def output
38
14
  b = binding
39
- rhtml = ERB.new(IO.read(@@template_name), 0, "-")
15
+ rhtml = ERB.new(IO.read(@template_name), 0, "-")
40
16
  @output = rhtml.result(b)
41
17
  return @output
42
18
  end
43
19
 
44
20
  def add_graph(type, data, mapping, options= {})
45
- @@viz_package_names.add(type)
46
- new_graph = new(type, data, mapping, @@graphs.size, options)
47
- @@graphs << new_graph
21
+ @viz_package_names.add(type)
22
+ new_graph = GViz::Graph.new(type, data, mapping, @graphs.size, options)
23
+ @graphs << new_graph
48
24
  return new_graph.chart_id
49
25
  end
50
-
51
- def google_data_type(value)
52
- if value.is_a?(Numeric)
53
- data_type = 'numeric'
54
- elsif value.is_a?(Date)
55
- data_type = 'date'
56
- elsif value.is_a?(DateTime) || value.is_a?(Time)
57
- data_type = 'datetime'
58
- elsif value.respond_to?(:to_s)
59
- if !value.match(/[^0-9.]/)
60
- data_type = 'numeric'
61
- else
62
- if (a = Date._parse(value)).size >= 3
63
- if a.size >= 5
64
- data_type = 'datetime'
65
- else
66
- data_type = 'date'
67
- end
68
- else
69
- data_type = 'string'
70
- end
71
- end
72
- end
73
- data_type
74
- end
75
-
76
- def ruby_to_js(type, value)
77
- return nil if value.nil?
78
- if type == 'string'
79
- value = "'#{value}'"
80
- elsif type == 'date'
81
- temp_d = Date.parse(value.to_s)
82
- value = "new Date(#{temp_d.year}, #{temp_d.month - 1}, #{temp_d.day})"
83
- elsif type == 'datetime'
84
- temp_d DateTime.parse(value.to_s)
85
- value = "new Date(#{temp_d.year}, #{temp_d.month - 1}, #{temp_d.day}, #{temp_d.hour}, #{temp_d.min}, #{temp_d.sec})"
86
- end
87
- return value
88
- end
89
- end
90
-
91
- attr_reader :type, :options
92
-
93
- def initialize(type, data, map, id = 0, options = {})
94
- @type = type
95
- @map = map
96
- @data = data
97
- @data_type = {}
98
- @options = options
99
- @id = id
100
- import_data_types
101
- end
102
-
103
- def import_data_types
104
- not_all_data_types_found = true
105
- find_data_types = @map.dup
106
-
107
- @data.each do |x|
108
- break if find_data_types.size == 0
109
- find_data_types.each do |k, v|
110
- if x.key?(k)
111
- @data_type[k] = self.class.google_data_type(x[k])
112
- find_data_types.delete([k,v])
113
- end
114
- end
115
- end
116
26
 
117
- # if there is no data that responds to a mapped value, remove that mapping
118
- @map -= find_data_types
119
-
120
- end
121
-
122
-
123
- def columns
124
- data = @map.map do |k, v|
125
- [@data_type[k], v]
126
- end
127
- end
128
-
129
- def size
130
- @data.size
131
- end
132
-
133
- def rows
134
- @data.map do |value|
135
- @map.map do |k, v|
136
- self.class.ruby_to_js(@data_type[k], value[k])
27
+ def method_missing(name, *args)
28
+ puts name
29
+ if name.to_s.match(/add_/)
30
+ type = name.to_s.gsub(/add_/){""}.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
31
+ return add_graph(type, *args)
32
+ else
33
+ raise NoMethodError.new("Undefined method #{name} for #{self.inspect}")
137
34
  end
138
35
  end
139
36
  end
140
-
141
- def chart_id
142
- return @type.downcase + @id.to_s
143
- end
144
-
145
- def data_name
146
- "data_#{@id}"
147
- end
148
37
  end
@@ -0,0 +1,101 @@
1
+ module GViz
2
+ class Graph
3
+ attr_reader :type, :options
4
+
5
+ def initialize(type, data, map, id = 0, options = {})
6
+ @type = type
7
+ @map = map
8
+ @data = data
9
+ @data_type = {}
10
+ @options = options
11
+ @id = id
12
+ import_data_types
13
+ end
14
+
15
+ def import_data_types
16
+ not_all_data_types_found = true
17
+ find_data_types = @map.dup
18
+
19
+ @data.each do |x|
20
+ break if find_data_types.size == 0
21
+ find_data_types.each do |k, v|
22
+ if x[k]
23
+ @data_type[k] = self.class.google_data_type(x[k])
24
+ find_data_types.delete([k,v])
25
+ end
26
+ end
27
+ end
28
+
29
+ # if there is no data that responds to a mapped value, remove that mapping
30
+ @map -= find_data_types
31
+ end
32
+
33
+ def columns
34
+ data = @map.map do |k, v|
35
+ [@data_type[k], v]
36
+ end
37
+ end
38
+
39
+ def size
40
+ @data.size
41
+ end
42
+
43
+ def rows
44
+ @data.map do |value|
45
+ @map.map do |k, v|
46
+ self.class.ruby_to_js(@data_type[k], value[k])
47
+ end
48
+ end
49
+ end
50
+
51
+ def chart_id
52
+ return @type.downcase + @id.to_s
53
+ end
54
+
55
+ def data_name
56
+ "data_#{@id}"
57
+ end
58
+
59
+ class << self
60
+ def google_data_type(value)
61
+ if value.is_a?(Numeric)
62
+ data_type = 'number'
63
+ elsif value.is_a?(Date)
64
+ data_type = 'date'
65
+ elsif value.is_a?(DateTime) || value.is_a?(Time)
66
+ data_type = 'datetime'
67
+ elsif value.respond_to?(:to_s)
68
+ if !value.match(/[^0-9.]/)
69
+ data_type = 'number'
70
+ else
71
+ if (a = Date._parse(value)).size >= 3
72
+ if a.size >= 5
73
+ data_type = 'datetime'
74
+ else
75
+ data_type = 'date'
76
+ end
77
+ else
78
+ data_type = 'string'
79
+ end
80
+ end
81
+ end
82
+ data_type
83
+ end
84
+
85
+ def ruby_to_js(type, value)
86
+ return nil if value.nil?
87
+ if type == 'string'
88
+ value = "'#{value}'"
89
+ elsif type == 'date'
90
+ temp_d = Date.parse(value.to_s)
91
+ value = "new Date(#{temp_d.year}, #{temp_d.month - 1}, #{temp_d.day})"
92
+ elsif type == 'datetime'
93
+ temp_d = DateTime.parse(value.to_s)
94
+ value = "new Date(#{temp_d.year}, #{temp_d.month - 1}, #{temp_d.day}, #{temp_d.hour}, #{temp_d.min}, #{temp_d.sec})"
95
+ end
96
+ return value
97
+ end
98
+ end
99
+
100
+ end
101
+ end
@@ -1,9 +1,9 @@
1
1
  <script type='text/javascript' src='http://www.google.com/jsapi<%= @api_key %>'></script>
2
2
  <script type='text/javascript'>
3
- google.load('visualization', '1', {'packages':[<%= @@viz_package_names.map{|p|"'" + p.downcase + "'"}.join(',') -%>]});
3
+ google.load('visualization', '1', {'packages':[<%= @viz_package_names.map{|p|"'" + p.downcase + "'"}.join(',') -%>]});
4
4
  google.setOnLoadCallback(drawChart);
5
5
  function drawChart() {
6
- <%- @@graphs.each do |graph| -%>
6
+ <%- @graphs.each do |graph| -%>
7
7
  var <%= graph.data_name%> = new google.visualization.DataTable();
8
8
  <%- graph.columns.each do |column| -%>
9
9
  <%= graph.data_name%>.addColumn('<%= column[0] %>', '<%= column[1] %>')
@@ -18,7 +18,7 @@
18
18
  end
19
19
  end -%>
20
20
  var chart_<%= graph.data_name %> = new google.visualization.<%= graph.type %>(document.getElementById('<%= graph.chart_id %>'));
21
- chart.draw(<%= graph.data_name%>, <%=graph.options.to_json%>);
21
+ chart_<%= graph.data_name %>.draw(<%= graph.data_name%>, <%=graph.options.to_json%>);
22
22
  <%- end -%>
23
23
  }
24
24
  </script>
data/lib/g_viz.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'set'
2
+ require 'date'
3
+ require 'erb'
4
+ require 'json'
5
+ require File.join([File.dirname(__FILE__), 'g_viz', 'g_viz'])
@@ -16,44 +16,38 @@ describe GViz do
16
16
  {:date => Date.parse("2008-02-05"), :sold_pencils => 41476, :sold_pens => 66467, :title1 => 'Bought Pens',:text2 => 'Bought 200k pens'},
17
17
  {:date => Date.parse("2008-02-06"), :sold_pencils => 33322, :sold_pens => 39463, :title1 => 'Bought Pens',:text2 => 'Bought 200k pens'}
18
18
  ]
19
- GViz.add_graph('AnnotatedTimeline', @data, @mapping)
20
- output = GViz.output
19
+ g = GViz::Base.new
20
+ g.add_graph('AnnotatedTimeline', @data, @mapping)
21
+ output = g.output
21
22
  puts output
22
23
  output.should == TestHelper.template('rendered_annotated_timeline')
23
24
  end
24
25
  end
25
-
26
- describe 'graph' do
27
- @games = [{:name => "Gary", :games_won => "2", :birthday => "2008-02-01"},
28
- {:name => "John", :games_won => "4", :birthday => Date.parse("2009-01-01 11:11")},
29
- {:name => "A", :games_won => "2", :birthday => "Jun 14 1982"}]
30
- GViz.add_graph('MotionGraph', @games, [[:name, "Name"], [:games_won, "# Games"]])
31
- end
32
26
  end
33
27
 
34
28
  describe 'implementation details - class methods' do
35
29
  describe 'google_data_type' do
36
30
  it "should classify ruby data types to google visualization data types" do
37
- GViz.google_data_type(Time.now).should == 'datetime'
38
- GViz.google_data_type(Date.new).should == 'date'
39
- GViz.google_data_type("June 23 1982").should == 'date'
40
- GViz.google_data_type("June 23 1982 12:23").should == 'datetime'
41
- GViz.google_data_type("12312412").should == 'numeric'
42
- GViz.google_data_type("12312412.1234").should == 'numeric'
43
- GViz.google_data_type(1234123).should == 'numeric'
44
- GViz.google_data_type(1234123.1234).should == 'numeric'
45
- GViz.google_data_type("a123124123").should == 'string'
31
+ GViz::Graph.google_data_type(Time.now).should == 'datetime'
32
+ GViz::Graph.google_data_type(Date.new).should == 'date'
33
+ GViz::Graph.google_data_type("June 23 1982").should == 'date'
34
+ GViz::Graph.google_data_type("June 23 1982 12:23").should == 'datetime'
35
+ GViz::Graph.google_data_type("12312412").should == 'numeric'
36
+ GViz::Graph.google_data_type("12312412.1234").should == 'numeric'
37
+ GViz::Graph.google_data_type(1234123).should == 'numeric'
38
+ GViz::Graph.google_data_type(1234123.1234).should == 'numeric'
39
+ GViz::Graph.google_data_type("a123124123").should == 'string'
46
40
  # should this really happen? documenting it because i need to think if this is ok.
47
- GViz.google_data_type("a12312412").should == 'date'
41
+ GViz::Graph.google_data_type("a12312412").should == 'date'
48
42
  end
49
43
  end
50
44
 
51
45
  describe 'ruby_to_js' do
52
46
  it "should return the js string representation of that data " do
53
- GViz.ruby_to_js('numeric', 12341234).should == 12341234
54
- GViz.ruby_to_js('string', 12341234).should == "'12341234'"
55
- GViz.ruby_to_js('date', "June 23 1982").should == "new Date(1982, 5, 23)"
56
- GViz.ruby_to_js('date', Date.parse("June 23 1982")).should == "new Date(1982, 5, 23)"
47
+ GViz::Graph.ruby_to_js('numeric', 12341234).should == 12341234
48
+ GViz::Graph.ruby_to_js('string', 12341234).should == "'12341234'"
49
+ GViz::Graph.ruby_to_js('date', "June 23 1982").should == "new Date(1982, 5, 23)"
50
+ GViz::Graph.ruby_to_js('date', Date.parse("June 23 1982")).should == "new Date(1982, 5, 23)"
57
51
  end
58
52
  end
59
53
  end
@@ -68,7 +62,7 @@ describe GViz do
68
62
  ["'John'", "4", "new Date(2009, 0, 1)"],
69
63
  ["'A'", "2", "new Date(1982, 5, 14)"]]
70
64
 
71
- @gviz = GViz.send(:new, 'bar', @games, [[:name, "Name"], [:games_won, "Games Won"], [:birthday, 'Birthday']])
65
+ @gviz = GViz::Graph.new('bar', @games, [[:name, "Name"], [:games_won, "Games Won"], [:birthday, 'Birthday']])
72
66
  end
73
67
 
74
68
  describe 'columns' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: garru-g_viz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gary Tsang
@@ -22,12 +22,16 @@ extensions: []
22
22
  extra_rdoc_files:
23
23
  - CHANGELOG
24
24
  - lib/g_viz/g_viz.rb
25
+ - lib/g_viz/graph.rb
25
26
  - lib/g_viz/templates/visualization.erb
27
+ - lib/g_viz.rb
26
28
  - README
27
29
  files:
28
30
  - CHANGELOG
29
31
  - lib/g_viz/g_viz.rb
32
+ - lib/g_viz/graph.rb
30
33
  - lib/g_viz/templates/visualization.erb
34
+ - lib/g_viz.rb
31
35
  - Manifest
32
36
  - Rakefile
33
37
  - README