rubyvis 0.3.6 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +16 -0
  3. data/Manifest.txt +61 -0
  4. data/README.txt +9 -7
  5. data/Rakefile +1 -1
  6. data/lib/rubyvis.rb +3 -17
  7. data/lib/rubyvis/color/color.rb +11 -13
  8. data/lib/rubyvis/flatten.rb +5 -7
  9. data/lib/rubyvis/layout/stack.rb +15 -10
  10. data/lib/rubyvis/mark.rb +10 -2
  11. data/lib/rubyvis/mark/area.rb +5 -3
  12. data/lib/rubyvis/mark/line.rb +4 -3
  13. data/lib/rubyvis/mark/panel.rb +8 -3
  14. data/lib/rubyvis/mark/rule.rb +1 -0
  15. data/lib/rubyvis/scene/svg_area.rb +17 -17
  16. data/lib/rubyvis/scene/svg_curve.rb +8 -5
  17. data/lib/rubyvis/scene/svg_line.rb +32 -29
  18. data/lib/rubyvis/scene/svg_scene.rb +3 -5
  19. data/lib/rubyvis/scene/svg_wedge.rb +4 -3
  20. data/lib/rubyvis/vector.rb +104 -0
  21. data/spec/anchor_spec.rb +29 -0
  22. data/spec/area_spec.rb +83 -0
  23. data/spec/bar_spec.rb +3 -0
  24. data/spec/color_spec.rb +13 -1
  25. data/spec/dot_spec.rb +41 -0
  26. data/spec/fixtures/anchor.html +25 -0
  27. data/spec/fixtures/anchor.svg +1 -0
  28. data/spec/fixtures/area-segmented.html +29 -0
  29. data/spec/fixtures/area_interpolation.html +66 -0
  30. data/spec/fixtures/area_interpolation.svg +1 -0
  31. data/spec/fixtures/area_segmented.svg +1 -0
  32. data/spec/fixtures/dot-anchor.html +33 -0
  33. data/spec/fixtures/dot_anchor.svg +1 -0
  34. data/spec/fixtures/layers.js +28 -0
  35. data/spec/fixtures/layout_arc.svg +1 -0
  36. data/spec/fixtures/layout_cluster.html +39 -0
  37. data/spec/fixtures/layout_cluster.svg +1 -0
  38. data/spec/fixtures/layout_cluster_left_group_2.html +39 -0
  39. data/spec/fixtures/layout_cluster_left_group_2.svg +1 -0
  40. data/spec/fixtures/layout_grid.html +34 -0
  41. data/spec/fixtures/layout_grid.svg +1 -0
  42. data/spec/fixtures/layout_horizon.svg +24 -0
  43. data/spec/fixtures/layout_indent.html +39 -0
  44. data/spec/fixtures/layout_indent.svg +1 -0
  45. data/spec/fixtures/layout_matrix.svg +1 -0
  46. data/spec/fixtures/layout_pack.html +38 -0
  47. data/spec/fixtures/layout_pack.svg +1 -0
  48. data/spec/fixtures/layout_partition_fill.html +40 -0
  49. data/spec/fixtures/layout_partition_fill.svg +32 -0
  50. data/spec/fixtures/layout_tree_orient_left.html +36 -0
  51. data/spec/fixtures/layout_tree_orient_left.svg +1 -0
  52. data/spec/fixtures/layout_tree_orient_radial_breadth_20.html +39 -0
  53. data/spec/fixtures/layout_tree_orient_radial_breadth_20.svg +1 -0
  54. data/spec/fixtures/layout_tree_orient_top.svg +1 -0
  55. data/spec/fixtures/layout_treemap.svg +1 -0
  56. data/spec/fixtures/line_interpolation.html +63 -0
  57. data/spec/fixtures/line_interpolation.svg +1 -0
  58. data/spec/fixtures/line_interpolation_segmented.html +65 -0
  59. data/spec/fixtures/line_interpolation_segmented.svg +1 -0
  60. data/spec/fixtures/protovis-r3.3.js +287 -0
  61. data/spec/fixtures/rule-anchor.html +33 -0
  62. data/spec/fixtures/rule_anchor.svg +1 -0
  63. data/spec/fixtures/stack-expand.html +41 -0
  64. data/spec/fixtures/stack-silohouette.html +41 -0
  65. data/spec/fixtures/stack-wiggle.html +41 -0
  66. data/spec/fixtures/stack_expand.svg +1 -0
  67. data/spec/fixtures/stack_silohouette.svg +1 -0
  68. data/spec/fixtures/stack_wiggle.svg +1 -0
  69. data/spec/fixtures/svgscene.html +26 -0
  70. data/spec/fixtures/wedge-anchor.html +33 -0
  71. data/spec/fixtures/wedge-donut.html +35 -0
  72. data/spec/fixtures/wedge_anchor.svg +1 -0
  73. data/spec/fixtures/wedge_donut.svg +1 -0
  74. data/spec/flatten_spec.rb +47 -0
  75. data/spec/layout_arc_spec.rb +7 -26
  76. data/spec/layout_cluster_spec.rb +52 -0
  77. data/spec/layout_grid_spec.rb +40 -0
  78. data/spec/layout_horizon_spec.rb +6 -25
  79. data/spec/layout_indent_spec.rb +53 -0
  80. data/spec/layout_matrix_spec.rb +25 -52
  81. data/spec/layout_pack_spec.rb +49 -0
  82. data/spec/layout_partition_spec.rb +45 -0
  83. data/spec/layout_stack_spec.rb +60 -0
  84. data/spec/layout_tree_spec.rb +56 -0
  85. data/spec/layout_treemap_spec.rb +41 -0
  86. data/spec/line_spec.rb +118 -0
  87. data/spec/mark_spec.rb +4 -0
  88. data/spec/panel_spec.rb +12 -1
  89. data/spec/rule_spec.rb +34 -0
  90. data/spec/spec_helper.rb +158 -3
  91. data/spec/vector_spec.rb +36 -0
  92. data/spec/wedge_spec.rb +66 -0
  93. metadata +67 -14
  94. metadata.gz.sig +0 -0
data/spec/spec_helper.rb CHANGED
@@ -16,6 +16,60 @@ require 'nokogiri'
16
16
 
17
17
  $PROTOVIS_DIR=File.dirname(__FILE__)+"/../vendor/protovis/src"
18
18
  module Rubyvis
19
+ module GeneralSpec
20
+ def fixture_svg_read(filename)
21
+ File.read(File.dirname(__FILE__)+"/fixtures/#{filename}")
22
+ end
23
+ end
24
+ module LayoutSpec
25
+ include GeneralSpec
26
+ def waves(n, m)
27
+ Rubyvis.range(n).map {|i|
28
+ Rubyvis.range(m).map {|j|
29
+ x = 20 * j / m.to_f - i / 3.0
30
+ x > 0 ? 2 * x * Math.exp(-0.5 * x) : 0
31
+ }
32
+ }
33
+ end
34
+
35
+
36
+
37
+
38
+ def net_nodes
39
+ [
40
+ OpenStruct.new({:node_value=>'A', :group=>1}),
41
+ OpenStruct.new({:node_value=>'B', :group=>1}),
42
+ OpenStruct.new({:node_value=>'C', :group=>2}),
43
+ OpenStruct.new({:node_value=>'D',:group=>2}),
44
+ OpenStruct.new({:node_value=>'E',:group=>3}),
45
+ OpenStruct.new({:node_value=>'F',:group=>3})
46
+
47
+ ]
48
+ end
49
+ def net_links
50
+ [
51
+ OpenStruct.new({:source=>0,:target=>1, :value=>1}),
52
+ OpenStruct.new({:source=>1,:target=>2, :value=>1}),
53
+ OpenStruct.new({:source=>2,:target=>3, :value=>1}),
54
+ OpenStruct.new({:source=>3,:target=>4, :value=>1}),
55
+ OpenStruct.new({:source=>4,:target=>5, :value=>1}),
56
+ OpenStruct.new({:source=>1,:target=>0, :value=>1}),
57
+ OpenStruct.new({:source=>2,:target=>1, :value=>1}),
58
+ OpenStruct.new({:source=>3,:target=>2, :value=>1}),
59
+ OpenStruct.new({:source=>4,:target=>3, :value=>1}),
60
+ OpenStruct.new({:source=>5,:target=>4, :value=>1}),
61
+ ]
62
+ end
63
+ def hier_nodes
64
+ Rubyvis.dom({:a=>1,:b=>{:ba=>2,:bb=>{:bba=>3}, :bc=>4}, :c=>5}).root("test").nodes
65
+ end
66
+ def hier_nodes_big
67
+ subtree={:a=>1,:b=>2,:c=>3,:d=>4}
68
+
69
+ Rubyvis.dom({:a=>subtree,:b=>subtree, :c=>subtree, :d=>subtree,:e=>subtree,:f=>subtree}).root("test").nodes()
70
+
71
+ end
72
+ end
19
73
  class JohnsonLoader
20
74
  begin
21
75
  require 'johnson'
@@ -43,16 +97,115 @@ RSpec::Matchers.define :have_svg_attributes do |exp|
43
97
  obs.attributes[k].value.should==v
44
98
  }
45
99
  end
100
+ failure_message_for_should do |obs|
101
+ "\n#{exp} attributes expected, but xml doesn't contains them \n#{obs.to_s}"
102
+ end
103
+ end
104
+
105
+ # Include
106
+ # * rect
107
+ # * circle
108
+ # * text
109
+ # Using attributes and content
110
+ Rspec::Matchers.define :have_same_svg_elements do |exp|
111
+ def equal_float(a,b)
112
+ a||=0
113
+ b||=0
114
+ (a.to_f-b.to_f).abs<0.0001
115
+ end
116
+ def equal_string_nil(a,b)
117
+ a||="none"
118
+ b||="none"
119
+ a.to_s==b.to_s
120
+ end
121
+ def equal_string(a,b)
122
+ a.to_s==b.to_s
123
+ end
124
+ def path_scan(path)
125
+ path.scan(/([MmCcZzLlHhVvSsQqTtAa, ])(\d+(?:\.\d+)?)/).map {|v|
126
+ v[0]="," if v[0]==" "
127
+ v[1]=v[1].to_f
128
+ v
129
+ }
130
+ end
131
+
132
+ def equal_path(a,b)
133
+ path_a=path_scan(a)
134
+ path_b=path_scan(b)
135
+ correct=true
136
+ path_a.each_with_index do |v,i|
137
+ if (v[0]!=path_b[i][0]) or (v[1]-path_b[i][1]).abs>0.001
138
+ correct=false
139
+ break
140
+ end
141
+
142
+ end
143
+ correct
144
+ end
145
+ match do |obs|
146
+ obs_xml=Nokogiri::XML(obs)
147
+ exp_xml=Nokogiri::XML(exp)
148
+ correct=true
149
+ attrs={
150
+ "circle"=>{'fill'=>:string_nil, 'fill-opacity'=>:float, 'cx'=>:float,'stroke'=>:string_nil, 'stroke-opacity'=>:string, 'cy'=>:float,'r'=>:float},
151
+ "rect"=>{"x"=>:float,"y"=>:float,"width"=>:float,"height"=>:float, 'fill'=>:string_nil, 'fill-opacity'=>:float, 'stroke'=>:string_nil, 'stroke-opacity'=>:float},
152
+ "text"=>{"x"=>:float,"dx"=>:float,"y"=>:float,"dy"=>:float},
153
+ 'path'=>{'d'=>:path, 'fill'=>:string_nil, 'fill-opacity'=>:float, 'stroke'=>:string_nil, 'stroke-opacity'=>:float, 'stroke-width'=>:float}
154
+ }
155
+
156
+ @error={:type=>"Undefined error"}
157
+ attrs.each_pair do |key,attrs|
158
+
159
+ exp_elements=exp_xml.xpath("//#{key}")
160
+ obs_elements=obs_xml.xpath("//xmlns:#{key}")
161
+ if exp_elements.size!=obs_elements.size
162
+ @error={:type=>"Different number of #{key} elements",:exp=>exp_elements.size, :obs=>obs_elements.size}
163
+ correct=false
164
+ break
165
+ end
166
+ exp_elements.each_with_index {|exp_data,i|
167
+ obs_data=obs_elements[i]
168
+
169
+ if obs_data.nil?
170
+ @error={:type=>"Missing obs", :exp=>exp_data, :i=>i}
171
+ correct=false
172
+ break
173
+ end
174
+
175
+ exp_data.content.should==obs_data.content
176
+ attrs.each do |attr,method|
177
+
178
+ eq=send("equal_#{method}",obs_data[attr],exp_data[attr])
179
+ if !eq
180
+ puts "Uneql attr: #{method}->#{attr}"
181
+
182
+ @error={:type=>"Incorrect data", :exp=>exp_data, :obs=>obs_data, :attr=>attr, :exp_attr=>exp_data[attr], :obs_attr=>obs_data[attr],:i=>i}
183
+ correct=false
184
+ break
185
+ end
186
+ end
187
+ if !correct
188
+ break
189
+ end
190
+ }
191
+ end
192
+ correct
193
+ end
194
+ failure_message_for_should do |obs|
195
+ "#{@error[:type]}: #{@error[:exp].to_s} expected, but #{@error[:obs]} retrieved, on attr #{@error[:attr]} -> #{@error[:i]} : #{@error[:exp_attr]} <> #{@error[:obs_attr]}"
196
+ end
197
+
46
198
  end
47
199
  Rspec::Matchers.define :have_same_position do |exp|
48
200
  match do |obs|
49
201
  correct=true
50
202
  attrs={
51
203
  "circle"=>['cx','cy','r'],
52
- "rect"=>["x","y","width","height"]
204
+ "rect"=>["x","y","width","height"],
205
+ "text"=>["x","dx","y","dy","transform"]
53
206
  }
54
207
  attrs[exp.name].each do |attr|
55
- if (obs[attr].to_f - exp[attr].to_f)>0.0001
208
+ if (obs[attr].to_f - exp[attr].to_f).abs>0.0001
56
209
  correct=false
57
210
  break
58
211
  end
@@ -60,6 +213,8 @@ Rspec::Matchers.define :have_same_position do |exp|
60
213
  correct
61
214
  end
62
215
  end
216
+
217
+
63
218
  RSpec::Matchers.define :have_path_data_close_to do |exp|
64
219
  def path_scan(path)
65
220
  path.scan(/([MmCcZzLlHhVvSsQqTtAa, ])(\d+(?:\.\d+)?)/).map {|v|
@@ -67,7 +222,7 @@ RSpec::Matchers.define :have_path_data_close_to do |exp|
67
222
  v[1]=v[1].to_f
68
223
  v
69
224
  }
70
- end
225
+ end
71
226
  match do |obs|
72
227
  correct=true
73
228
  obs_array=path_scan(obs.attributes["d"].value)
@@ -0,0 +1,36 @@
1
+ require File.expand_path(File.dirname(__FILE__)+"/spec_helper.rb")
2
+ describe Rubyvis::Vector do
3
+ before do
4
+ @x1,@x2,@y1,@y2=rand(10)+1,rand(10)+1,rand(10)+1,rand(10)+1
5
+ @v1=Rubyvis::Vector.new(@x1,@y1)
6
+ @v2=Rubyvis::Vector.new(@x2,@y2)
7
+ end
8
+ it "should return the same as Rubyvis.vector" do
9
+ Rubyvis.vector(@x1,@y1).should== @v1
10
+ end
11
+ it "method perp" do
12
+ @v1.perp.should==Rubyvis::Vector.new(-@y1,@x1)
13
+ end
14
+ it "method times" do
15
+ times=rand(10)+1
16
+ @v1.times(times).should==Rubyvis::Vector.new(@x1*times,@y1*times)
17
+ end
18
+ it "method length" do
19
+ l=Math.sqrt(@x1*@x1+@y1*@y1)
20
+ @v1.length.should eq l
21
+ end
22
+ it "method norm" do
23
+ l=@v1.length
24
+ @v1.norm.should==@v1.times(1/l.to_f)
25
+ end
26
+ it "method plus" do
27
+ @v1.plus(@v2).should==Rubyvis::Vector.new(@x1+@x2,@y1+@y2)
28
+ end
29
+ it "method minus" do
30
+ @v1.minus(@v2).should==Rubyvis::Vector.new(@x1-@x2,@y1-@y2)
31
+ end
32
+ it "method dot" do
33
+ @v1.dot(@v2).should==@x1*@x2+@y1*@y2
34
+ end
35
+ end
36
+
@@ -0,0 +1,66 @@
1
+ require File.expand_path(File.dirname(__FILE__)+"/spec_helper.rb")
2
+ describe Rubyvis::Wedge do
3
+ include Rubyvis::GeneralSpec
4
+ it "should have correct properties" do
5
+ props=[:angle, :antialias, :bottom, :cursor, :data, :end_angle, :events, :fill_style, :id, :inner_radius, :left, :line_width, :outer_radius, :reverse, :right, :start_angle, :stroke_style, :title, :top, :visible].inject({}) {|ac, v| ac[v]=true; ac}
6
+ Rubyvis::Wedge.properties.should==props
7
+ end
8
+ it "Rubyvis.Wedge be the same as Rubyvis::Wedge" do
9
+ Rubyvis.Wedge.should eql Rubyvis::Wedge
10
+ end
11
+ it "should render equal to protovis 'wedge-anchor.html' test" do
12
+
13
+ data = Rubyvis.range(5).map {|x| x}
14
+ w = 400
15
+ h = 400
16
+ r = w / 2.0
17
+ t = 30
18
+ a = Rubyvis::Scale.linear(0, Rubyvis.sum(data)).range(0, 2 * Math::PI);
19
+
20
+ vis = Rubyvis::Panel.new()
21
+ .width(w)
22
+ .height(h)
23
+
24
+ anchors=["outer","inner","start","center","end"]
25
+
26
+ vis.add(Rubyvis::Wedge)
27
+ .data(data)
28
+ .outer_radius(r)
29
+ .angle(a)
30
+ .anchor(lambda {anchors[self.index]}).add(pv.Label)
31
+ .text(lambda {anchors[self.index]})
32
+
33
+ vis.render();
34
+ pv_out=fixture_svg_read("wedge_anchor.svg")
35
+ vis.to_svg.should have_same_svg_elements(pv_out)
36
+
37
+ end
38
+ it "should render equal to protovis 'wedge-donut.html' test" do
39
+ data = Rubyvis.range(10).map {|x| (Math.sin(x)).abs}
40
+ w = 400
41
+ h = 400
42
+ r = w / 2.0
43
+ t = 30
44
+ a = Rubyvis.Scale.linear(0, Rubyvis.sum(data)).range(0, 2 * Math::PI)
45
+
46
+ @vis = Rubyvis::Panel.new()
47
+ .width(w)
48
+ .height(h)
49
+
50
+ @vis.add(Rubyvis::Wedge)
51
+ .data(data)
52
+ .inner_radius(r - t)
53
+ .outer_radius(r)
54
+ .angle(a)
55
+ .title(lambda {|d| d})
56
+ .anchor("outer").add(Rubyvis::Label)
57
+ .visible(lambda {|d| d>0.05})
58
+ .text_margin(t + 5)
59
+ .text(lambda {|d| "%0.2f" % d})
60
+ @vis.render();
61
+
62
+ @pv_out=fixture_svg_read("wedge_donut.svg")
63
+ @vis.to_svg.should have_same_svg_elements(@pv_out)
64
+ end
65
+
66
+ end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyvis
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
- - 3
9
- - 6
10
- version: 0.3.6
7
+ - 4
8
+ - 0
9
+ version: 0.4.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Claudio Bustos
@@ -36,7 +35,7 @@ cert_chain:
36
35
  rpP0jjs0
37
36
  -----END CERTIFICATE-----
38
37
 
39
- date: 2010-12-28 00:00:00 -03:00
38
+ date: 2011-01-03 00:00:00 -03:00
40
39
  default_executable:
41
40
  dependencies:
42
41
  - !ruby/object:Gem::Dependency
@@ -47,7 +46,6 @@ dependencies:
47
46
  requirements:
48
47
  - - ">="
49
48
  - !ruby/object:Gem::Version
50
- hash: 3
51
49
  segments:
52
50
  - 0
53
51
  version: "0"
@@ -61,7 +59,6 @@ dependencies:
61
59
  requirements:
62
60
  - - ">="
63
61
  - !ruby/object:Gem::Version
64
- hash: 3
65
62
  segments:
66
63
  - 0
67
64
  version: "0"
@@ -75,7 +72,6 @@ dependencies:
75
72
  requirements:
76
73
  - - ">="
77
74
  - !ruby/object:Gem::Version
78
- hash: 3
79
75
  segments:
80
76
  - 0
81
77
  version: "0"
@@ -89,7 +85,6 @@ dependencies:
89
85
  requirements:
90
86
  - - ">="
91
87
  - !ruby/object:Gem::Version
92
- hash: 3
93
88
  segments:
94
89
  - 2
95
90
  - 0
@@ -104,7 +99,6 @@ dependencies:
104
99
  requirements:
105
100
  - - ">="
106
101
  - !ruby/object:Gem::Version
107
- hash: 47
108
102
  segments:
109
103
  - 2
110
104
  - 8
@@ -112,7 +106,7 @@ dependencies:
112
106
  version: 2.8.0
113
107
  type: :development
114
108
  version_requirements: *id005
115
- description: Ruby port of Protovis[http://vis.stanford.edu/protovis/], a great visualization toolkit
109
+ description: Ruby port of Protovis[http://vis.stanford.edu/protovis/], a Javascript visualization toolkit.
116
110
  email:
117
111
  - clbustos_at_gmail.com
118
112
  executables: []
@@ -231,25 +225,84 @@ files:
231
225
  - lib/rubyvis/scene/svg_wedge.rb
232
226
  - lib/rubyvis/sceneelement.rb
233
227
  - lib/rubyvis/transform.rb
228
+ - lib/rubyvis/vector.rb
234
229
  - spec/anchor_spec.rb
235
230
  - spec/area_spec.rb
236
231
  - spec/bar_spec.rb
237
232
  - spec/color_spec.rb
238
233
  - spec/dom_spec.rb
234
+ - spec/dot_spec.rb
235
+ - spec/fixtures/anchor.html
236
+ - spec/fixtures/anchor.svg
237
+ - spec/fixtures/area-segmented.html
238
+ - spec/fixtures/area_interpolation.html
239
+ - spec/fixtures/area_interpolation.svg
240
+ - spec/fixtures/area_segmented.svg
241
+ - spec/fixtures/dot-anchor.html
242
+ - spec/fixtures/dot_anchor.svg
243
+ - spec/fixtures/layers.js
244
+ - spec/fixtures/layout_arc.svg
245
+ - spec/fixtures/layout_cluster.html
246
+ - spec/fixtures/layout_cluster.svg
247
+ - spec/fixtures/layout_cluster_left_group_2.html
248
+ - spec/fixtures/layout_cluster_left_group_2.svg
249
+ - spec/fixtures/layout_grid.html
250
+ - spec/fixtures/layout_grid.svg
251
+ - spec/fixtures/layout_horizon.svg
252
+ - spec/fixtures/layout_indent.html
253
+ - spec/fixtures/layout_indent.svg
254
+ - spec/fixtures/layout_matrix.svg
255
+ - spec/fixtures/layout_pack.html
256
+ - spec/fixtures/layout_pack.svg
257
+ - spec/fixtures/layout_partition_fill.html
258
+ - spec/fixtures/layout_partition_fill.svg
259
+ - spec/fixtures/layout_tree_orient_left.html
260
+ - spec/fixtures/layout_tree_orient_left.svg
261
+ - spec/fixtures/layout_tree_orient_radial_breadth_20.html
262
+ - spec/fixtures/layout_tree_orient_radial_breadth_20.svg
263
+ - spec/fixtures/layout_tree_orient_top.svg
264
+ - spec/fixtures/layout_treemap.svg
265
+ - spec/fixtures/line_interpolation.html
266
+ - spec/fixtures/line_interpolation.svg
267
+ - spec/fixtures/line_interpolation_segmented.html
268
+ - spec/fixtures/line_interpolation_segmented.svg
269
+ - spec/fixtures/protovis-r3.3.js
270
+ - spec/fixtures/rule-anchor.html
271
+ - spec/fixtures/rule_anchor.svg
272
+ - spec/fixtures/stack-expand.html
273
+ - spec/fixtures/stack-silohouette.html
274
+ - spec/fixtures/stack-wiggle.html
275
+ - spec/fixtures/stack_expand.svg
276
+ - spec/fixtures/stack_silohouette.svg
277
+ - spec/fixtures/stack_wiggle.svg
278
+ - spec/fixtures/svgscene.html
279
+ - spec/fixtures/wedge-anchor.html
280
+ - spec/fixtures/wedge-donut.html
281
+ - spec/fixtures/wedge_anchor.svg
282
+ - spec/fixtures/wedge_donut.svg
283
+ - spec/flatten_spec.rb
239
284
  - spec/histogram_spec.rb
240
285
  - spec/internal_spec.rb
241
286
  - spec/javascript_behaviour_spec.rb
242
287
  - spec/label_spec.rb
243
288
  - spec/layout_arc_spec.rb
289
+ - spec/layout_cluster_spec.rb
290
+ - spec/layout_grid_spec.rb
244
291
  - spec/layout_horizon_spec.rb
292
+ - spec/layout_indent_spec.rb
245
293
  - spec/layout_matrix_spec.rb
294
+ - spec/layout_pack_spec.rb
295
+ - spec/layout_partition_spec.rb
246
296
  - spec/layout_stack_spec.rb
297
+ - spec/layout_tree_spec.rb
298
+ - spec/layout_treemap_spec.rb
247
299
  - spec/line_spec.rb
248
300
  - spec/mark_spec.rb
249
301
  - spec/nest_spec.rb
250
302
  - spec/panel_spec.rb
251
303
  - spec/readme_spec.rb
252
304
  - spec/ruby_api_spec.rb
305
+ - spec/rule_spec.rb
253
306
  - spec/scale_linear_datetime_spec.rb
254
307
  - spec/scale_linear_spec.rb
255
308
  - spec/scale_log_spec.rb
@@ -257,6 +310,8 @@ files:
257
310
  - spec/scale_spec.rb
258
311
  - spec/spec.opts
259
312
  - spec/spec_helper.rb
313
+ - spec/vector_spec.rb
314
+ - spec/wedge_spec.rb
260
315
  - vendor/protovis/protovis-r3.3.js
261
316
  - vendor/protovis/src/behavior/Behavior.js
262
317
  - vendor/protovis/src/behavior/Drag.js
@@ -371,7 +426,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
371
426
  requirements:
372
427
  - - ">="
373
428
  - !ruby/object:Gem::Version
374
- hash: 3
375
429
  segments:
376
430
  - 0
377
431
  version: "0"
@@ -380,7 +434,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
380
434
  requirements:
381
435
  - - ">="
382
436
  - !ruby/object:Gem::Version
383
- hash: 3
384
437
  segments:
385
438
  - 0
386
439
  version: "0"
@@ -390,6 +443,6 @@ rubyforge_project: rubyvis
390
443
  rubygems_version: 1.3.7
391
444
  signing_key:
392
445
  specification_version: 3
393
- summary: Ruby port of Protovis[http://vis.stanford.edu/protovis/], a great visualization toolkit
446
+ summary: Ruby port of Protovis[http://vis.stanford.edu/protovis/], a Javascript visualization toolkit.
394
447
  test_files: []
395
448