rubyvis 0.1.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.
Files changed (46) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +3 -0
  3. data/Manifest.txt +44 -0
  4. data/README.txt +64 -0
  5. data/Rakefile +16 -0
  6. data/examples/crimea-line.rb +64 -0
  7. data/examples/first.rb +17 -0
  8. data/examples/second.rb +14 -0
  9. data/lib/rubyvis.rb +43 -0
  10. data/lib/rubyvis/color/color.rb +241 -0
  11. data/lib/rubyvis/color/colors.rb +40 -0
  12. data/lib/rubyvis/color/ramp.rb +0 -0
  13. data/lib/rubyvis/format.rb +19 -0
  14. data/lib/rubyvis/format/date.rb +18 -0
  15. data/lib/rubyvis/format/number.rb +31 -0
  16. data/lib/rubyvis/internals.rb +215 -0
  17. data/lib/rubyvis/javascript_behaviour.rb +64 -0
  18. data/lib/rubyvis/label.rb +0 -0
  19. data/lib/rubyvis/mark.rb +528 -0
  20. data/lib/rubyvis/mark/anchor.rb +22 -0
  21. data/lib/rubyvis/mark/area.rb +34 -0
  22. data/lib/rubyvis/mark/bar.rb +23 -0
  23. data/lib/rubyvis/mark/label.rb +17 -0
  24. data/lib/rubyvis/mark/line.rb +14 -0
  25. data/lib/rubyvis/mark/panel.rb +87 -0
  26. data/lib/rubyvis/mark/rule.rb +28 -0
  27. data/lib/rubyvis/scale.rb +34 -0
  28. data/lib/rubyvis/scale/linear.rb +5 -0
  29. data/lib/rubyvis/scale/ordinal.rb +52 -0
  30. data/lib/rubyvis/scale/quantitative.rb +263 -0
  31. data/lib/rubyvis/scene/svg_bar.rb +31 -0
  32. data/lib/rubyvis/scene/svg_label.rb +51 -0
  33. data/lib/rubyvis/scene/svg_panel.rb +117 -0
  34. data/lib/rubyvis/scene/svg_rule.rb +29 -0
  35. data/lib/rubyvis/scene/svg_scene.rb +118 -0
  36. data/lib/rubyvis/sceneelement.rb +44 -0
  37. data/lib/rubyvis/transform.rb +25 -0
  38. data/spec/internal_spec.rb +146 -0
  39. data/spec/javascript_behaviour_spec.rb +64 -0
  40. data/spec/panel_spec.rb +8 -0
  41. data/spec/scale_linear_spec.rb +121 -0
  42. data/spec/scale_spec.rb +8 -0
  43. data/spec/spec.opts +3 -0
  44. data/spec/spec_helper.rb +27 -0
  45. metadata +160 -0
  46. metadata.gz.sig +2 -0
@@ -0,0 +1,64 @@
1
+ require File.dirname(__FILE__)+"/spec_helper.rb"
2
+ describe "Javascript compatibility" do
3
+ it "extends Proc with js_apply and js_call" do
4
+ f=lambda {|a,b| a+b}
5
+ f.should respond_to(:js_apply)
6
+ f.should respond_to(:js_call)
7
+ end
8
+ it "lambdas should respond correctly to js_call with same numbers of arguments and parameters" do
9
+ o=OpenStruct.new :x=>15
10
+ f=lambda {|m1,m2| "#{m1}-#{m2}-#{self.x}"}
11
+ f.js_call(o,"a","b").should=="a-b-15"
12
+ end
13
+ it "lambdas should respond correctly to js_call without arguments" do
14
+ o=OpenStruct.new :x=>15
15
+ f=lambda { self.x.to_s}
16
+ f.js_call(o).should=="15"
17
+ end
18
+ it "lambdas should respond correctly to js_call with different number or arguments" do
19
+ o=OpenStruct.new :x=>15
20
+ f=lambda {|a,b,c| [a,b,c]}
21
+ f.js_call(o,1).should==[1,nil,nil]
22
+ f.js_call(o,1,2,3,4).should==[1,2,3]
23
+ end
24
+ context "js_call using lambda with variable arguments" do
25
+ before do
26
+ @o=OpenStruct.new :x=>15
27
+ @f=lambda {|a,b,*c| {:a=>a, :b=>b, :c=>c}}
28
+ end
29
+ it "should work without 0 parameters" do
30
+ @f.js_call(@o).should=={:a=>nil, :b=>nil, :c=>[]}
31
+ end
32
+ it "should work with required parameter and 0 optional" do
33
+ @f.js_call(@o,1,2).should=={:a=>1, :b=>2, :c=>[]}
34
+ end
35
+ it "should work with required and optional parameters" do
36
+ @f.js_call(@o,1,2,3,4).should=={:a=>1, :b=>2, :c=>[3,4]}
37
+ end
38
+ end
39
+ it "lambdas should respond correctly to js_apply" do
40
+ o=OpenStruct.new :x=>15
41
+ f=lambda {|m1,m2| "#{m1}-#{m2}-#{self.x}"}
42
+ f.js_apply(o, ["a","b"]).should=="a-b-15"
43
+ end
44
+ it "lambdas should respond correctly to js_apply with empty arguments" do
45
+ o=OpenStruct.new :x=>15
46
+ f=lambda { "#{self.x}"}
47
+ f.js_apply(o, []).should=="15"
48
+ f.js_apply(o, [1]).should=="15"
49
+
50
+ end
51
+
52
+ it "lambdas should respond correctly to js_call with fewer parameters" do
53
+ o=OpenStruct.new :x=>15
54
+ f=lambda {|a,b,c| [a,b,c]}
55
+ f.js_apply(o,[1]).should==[1,nil,nil]
56
+ end
57
+ it "lambdas should respond correctly to js_call with more parameters" do
58
+ o=OpenStruct.new :x=>15
59
+ f=lambda {|a,b,c| [a,b,c]}
60
+ f.js_apply(o,[1,2,3,4]).should==[1,2,3]
61
+ end
62
+
63
+
64
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__)+"/spec_helper.rb"
2
+ describe Rubyvis::Panel do
3
+ it "should be created as Javascript" do
4
+ w,h=200,100
5
+ vis = Rubyvis.Panel.new.width(w).height(h).margin(19.5).right(40)
6
+ end
7
+
8
+ end
@@ -0,0 +1,121 @@
1
+ require File.dirname(__FILE__)+"/spec_helper.rb"
2
+ describe Rubyvis::Scale::Linear do
3
+ if Rubyvis::JohnsonLoader.available?
4
+ context "direct protovis API comparison" do
5
+ before(:all) do
6
+ @rt= Rubyvis::JohnsonLoader.new().runtime
7
+ end
8
+ before do
9
+ @h=280
10
+ @h_dom=1000
11
+ @y = Rubyvis.Scale.linear(0, @h_dom).range(0,@h)
12
+ @rt[:h_dom] = @h_dom
13
+ @rt[:h] = @h
14
+ @y_js=@rt.evaluate("y=pv.Scale.linear(0, h_dom).range(0,h)")
15
+ @v1,@v2,@v3=rand(),rand()+3,rand()+5
16
+ @rt[:v1]=@v1
17
+ @rt[:v2]=@v2
18
+ @rt[:v3]=@v3
19
+
20
+ end
21
+ it "domain() implemented equally" do
22
+ @y.domain(@v1)
23
+ @rt.evaluate("y.domain(v1)")
24
+ @y.domain.should==@rt.evaluate("y.domain()").to_a
25
+ @y.domain(@v1,@v2,@v3)
26
+ @rt.evaluate("y.domain(v1,v2,v3)")
27
+ @y.domain.should==@rt.evaluate("y.domain()").to_a
28
+ end
29
+ it "scale() implemented equally for complex domain" do
30
+ @y.domain(@v1,@v2,@v3)
31
+ @rt.evaluate("y.domain(v1,v2,v3)")
32
+ @y.scale(@v1+1).should==@rt.evaluate("y(v1+1)")
33
+ @y.scale(@v2+1).should==@rt.evaluate("y(v2+1)")
34
+ @y.scale(@v3+1).should==@rt.evaluate("y(v3+1)")
35
+ end
36
+ it "invert() implemented equally" do
37
+ @y.domain(@v1,@v2,@v3)
38
+ @rt.evaluate("y.domain(v1,v2,v3)")
39
+ @y.invert(@v1+1).should==@rt.evaluate("y.invert(v1+1)")
40
+ @y.invert(@v2+1).should==@rt.evaluate("y.invert(v2+1)")
41
+ @y.invert(@v3+1).should==@rt.evaluate("y.invert(v3+1)")
42
+ end
43
+ it "ticks() implemented equally for numbers" do
44
+ @y.ticks.should==@rt.evaluate("y.ticks()").to_a
45
+ (5..20).each {|i|
46
+ @rt[:i]=i
47
+ @y.ticks(i).should==@rt.evaluate("y.ticks(i)").to_a
48
+ }
49
+ end
50
+ it "nice() implemented equally" do
51
+ @y.domain(@v1,@v2)
52
+ @rt.evaluate("y.domain(v1,v2)")
53
+ @y.nice
54
+ @rt.evaluate("y.nice()")
55
+ @y.domain.should==@rt.evaluate("y.domain()").to_a
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+ it "should be created as Javascript" do
62
+ h=280
63
+ y = Rubyvis.Scale.linear(0, 1500)
64
+ end
65
+
66
+ before do
67
+ @h=280
68
+ @h_dom=1000
69
+ @y = Rubyvis.Scale.linear(0, @h_dom).range(0,@h)
70
+ end
71
+ it "y should be a Scale" do
72
+ @y.should be_a(Rubyvis::Scale::Linear)
73
+ end
74
+ it "should set domain with dates" do
75
+ pending("Should accept dates as domain values")
76
+ data= [
77
+ { :date=> Date.today, :wounds=> 0, :other=> 110, :disease=> 110 },
78
+ { :date=> Date.new, :wounds=> 2, :other=> 130, :disease=> 110 }
79
+
80
+ ]
81
+ x=Rubyvis.Scale.linear(data, lambda {|d| d[:date]})
82
+
83
+ end
84
+ it "should respond to domain" do
85
+ @y.domain.should==[0, 1000]
86
+ @y.domain(1)
87
+ @y.domain.should==[1,1]
88
+ @y.domain(1,100,300)
89
+ @y.domain.should==[1,100,300]
90
+ end
91
+ it "should respond to range" do
92
+ @y.range.should==[0, 280]
93
+ @y.range(1)
94
+ @y.range.should==[1,1]
95
+ @y.range(1,100,300)
96
+ @y.range.should==[1,100,300]
97
+ end
98
+ it "should returns correct scale" do
99
+ @y.scale(@h_dom).should==280
100
+ @y[@h_dom].should==280
101
+ val=20
102
+ @y.scale(val).should be_close(val.quo(@h_dom)*@h.to_f, 0.001)
103
+ end
104
+ it "should returns correct invert" do
105
+ @y.invert(100).should be_close(357.1428, 0.001)
106
+ @y.invert(200).should be_close(714.2857, 0.001)
107
+ end
108
+ it "should returns correct ticks" do
109
+ @y.ticks.should==[0,100,200,300,400,500,600,700,800,900,1000]
110
+ @y.ticks(13).should==[0,100,200,300,400,500,600,700,800,900,1000]
111
+ @y.ticks(5).should==[0,200,400,600,800,1000]
112
+
113
+ end
114
+ it "should returns correct tick_format"
115
+ it "should nice nicely" do
116
+ @y.domain([0.20147987687960267, 0.996679553296417])
117
+ @y.nice
118
+ @y.domain().should==[0.2,1]
119
+
120
+ end
121
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__)+"/spec_helper.rb"
2
+ describe Rubyvis::Scale do
3
+ it "should return a correct numeric interpolator" do
4
+ i=Rubyvis::Scale.interpolator(0,20)
5
+ i[10].should==200
6
+ i[20].should==400
7
+ end
8
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ -f s
3
+ -b
@@ -0,0 +1,27 @@
1
+ $:.unshift(File.dirname(__FILE__)+"/../lib")
2
+ require 'spec'
3
+ require 'spec/autorun'
4
+ require 'rubyvis'
5
+ require 'pp'
6
+ $PROTOVIS_DIR=File.dirname(__FILE__)+"/../vendor/protovis/src"
7
+ module Rubyvis
8
+ class JohnsonLoader
9
+ begin
10
+ require 'johnson'
11
+ def self.available?
12
+ true
13
+ end
14
+ rescue LoadError
15
+ def self.available?
16
+ false
17
+ end
18
+ end
19
+ attr_accessor :runtime
20
+ def initialize(*files)
21
+ files=["/pv.js","/pv-internals.js", "/data/Arrays.js","/data/Numbers.js", "/data/Scale.js", "/data/QuantitativeScale.js", "/data/LinearScale.js","/color/Color.js","/color/Colors.js","/text/Format.js", "/text/DateFormat.js","/text/NumberFormat.js","/text/TimeFormat.js"]+files
22
+ files.uniq!
23
+ files=files.map {|v| $PROTOVIS_DIR+v}
24
+ @runtime = Johnson.load(*files)
25
+ end
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubyvis
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Claudio Bustos
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain:
16
+ - |
17
+ -----BEGIN CERTIFICATE-----
18
+ MIIDMjCCAhqgAwIBAgIBADANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhjbGJ1
19
+ c3RvczEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
20
+ MB4XDTEwMDMyOTIxMzg1NVoXDTExMDMyOTIxMzg1NVowPzERMA8GA1UEAwwIY2xi
21
+ dXN0b3MxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
22
+ bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf8JVMGqE7m5kYb+PNN
23
+ neZv2pcXV5fQCi6xkyG8bi2/SIFy/LyxuvLzEeOxBeaz1Be93bayIUquOIqw3dyw
24
+ /KXWa31FxuNuvAm6CN8fyeRYX/ou4cw3OIUUnIvB7RMNIu4wbgeM6htV/QEsNLrv
25
+ at1/mh9JpqawPrcjIOVMj4BIp67vmzJCaUf+S/H2uYtSO09F+YQE3tv85TPeRmqU
26
+ yjyXyTc/oJiw1cXskUL8UtMWZmrwNLHXuZWWIMzkjiz3UNdhJr/t5ROk8S2WPznl
27
+ 0bMy/PMIlAbqWolRn1zl2VFJ3TaXScbqImY8Wf4g62b/1ZSUlGrtnLNsCYXrWiso
28
+ UPUCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFGu9
29
+ rrJ1H64qRmNNu3Jj/Qjvh0u5MA0GCSqGSIb3DQEBBQUAA4IBAQCV0Unka5isrhZk
30
+ GjqSDqY/6hF+G2pbFcbWUpjmC8NWtAxeC+7NGV3ljd0e1SLfoyBj4gnFtFmY8qX4
31
+ K02tgSZM0eDV8TpgFpWXzK6LzHvoanuahHLZEtk/+Z885lFene+nHadkem1n9iAB
32
+ cs96JO9/JfFyuXM27wFAwmfHCmJfPF09R4VvGHRAvb8MGzSVgk2i06OJTqkBTwvv
33
+ JHJdoyw3+8bw9RJ+jLaNoQ+xu+1pQdS2bb3m7xjZpufml/m8zFCtjYM/7qgkKR8z
34
+ /ZZt8lCiKfFArppRrZayE2FVsps4X6WwBdrKTMZ0CKSXTRctbEj1BAZ67eoTvBBt
35
+ rpP0jjs0
36
+ -----END CERTIFICATE-----
37
+
38
+ date: 2010-09-30 00:00:00 -04:00
39
+ default_executable:
40
+ dependencies:
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubyforge
43
+ prerelease: false
44
+ requirement: &id001 !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ segments:
49
+ - 2
50
+ - 0
51
+ - 4
52
+ version: 2.0.4
53
+ type: :development
54
+ version_requirements: *id001
55
+ - !ruby/object:Gem::Dependency
56
+ name: hoe
57
+ prerelease: false
58
+ requirement: &id002 !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ segments:
63
+ - 2
64
+ - 6
65
+ - 2
66
+ version: 2.6.2
67
+ type: :development
68
+ version_requirements: *id002
69
+ description: Ruby version of Protovis, a great visualization toolkit
70
+ email:
71
+ - clbustos_at_gmail.com
72
+ executables: []
73
+
74
+ extensions: []
75
+
76
+ extra_rdoc_files:
77
+ - History.txt
78
+ - Manifest.txt
79
+ - README.txt
80
+ files:
81
+ - History.txt
82
+ - Manifest.txt
83
+ - README.txt
84
+ - Rakefile
85
+ - examples/crimea-line.rb
86
+ - examples/first.rb
87
+ - examples/second.rb
88
+ - lib/rubyvis.rb
89
+ - lib/rubyvis/color/color.rb
90
+ - lib/rubyvis/color/colors.rb
91
+ - lib/rubyvis/color/ramp.rb
92
+ - lib/rubyvis/format.rb
93
+ - lib/rubyvis/format/date.rb
94
+ - lib/rubyvis/format/number.rb
95
+ - lib/rubyvis/internals.rb
96
+ - lib/rubyvis/javascript_behaviour.rb
97
+ - lib/rubyvis/label.rb
98
+ - lib/rubyvis/mark.rb
99
+ - lib/rubyvis/mark/anchor.rb
100
+ - lib/rubyvis/mark/area.rb
101
+ - lib/rubyvis/mark/bar.rb
102
+ - lib/rubyvis/mark/label.rb
103
+ - lib/rubyvis/mark/line.rb
104
+ - lib/rubyvis/mark/panel.rb
105
+ - lib/rubyvis/mark/rule.rb
106
+ - lib/rubyvis/scale.rb
107
+ - lib/rubyvis/scale/linear.rb
108
+ - lib/rubyvis/scale/ordinal.rb
109
+ - lib/rubyvis/scale/quantitative.rb
110
+ - lib/rubyvis/scene/svg_bar.rb
111
+ - lib/rubyvis/scene/svg_label.rb
112
+ - lib/rubyvis/scene/svg_panel.rb
113
+ - lib/rubyvis/scene/svg_rule.rb
114
+ - lib/rubyvis/scene/svg_scene.rb
115
+ - lib/rubyvis/sceneelement.rb
116
+ - lib/rubyvis/transform.rb
117
+ - spec/internal_spec.rb
118
+ - spec/javascript_behaviour_spec.rb
119
+ - spec/panel_spec.rb
120
+ - spec/scale_linear_spec.rb
121
+ - spec/scale_spec.rb
122
+ - spec/spec.opts
123
+ - spec/spec_helper.rb
124
+ has_rdoc: true
125
+ homepage: http://github.com/clbustos/rubyvis
126
+ licenses: []
127
+
128
+ post_install_message:
129
+ rdoc_options:
130
+ - --main
131
+ - README.txt
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ segments:
139
+ - 0
140
+ version: "0"
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ segments:
146
+ - 0
147
+ version: "0"
148
+ requirements: []
149
+
150
+ rubyforge_project: rubyvis
151
+ rubygems_version: 1.3.6
152
+ signing_key:
153
+ specification_version: 3
154
+ summary: Ruby version of Protovis, a great visualization toolkit
155
+ test_files:
156
+ - spec/internal_spec.rb
157
+ - spec/panel_spec.rb
158
+ - spec/scale_spec.rb
159
+ - spec/scale_linear_spec.rb
160
+ - spec/javascript_behaviour_spec.rb
metadata.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ �l����p~���7Jʂk��v�����&��j}�L�M��qHa�'
2
+ ӿ���G+��uG#֜%l,��G��=1?X���/���6N<�=���(=t;��IJ`n��gx ����� ���X�q�O