rubyvis 0.2.0 → 0.2.1

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.
@@ -25,13 +25,12 @@ module Rubyvis
25
25
  if (!fixed)
26
26
  binds.fixed=[]
27
27
  fixed = binds.fixed
28
-
29
28
  filter=lambda {|prop|
30
29
  if prop.fixed
31
30
  fixed.push(prop)
32
- return false
31
+ false
33
32
  else
34
- return true
33
+ true
35
34
  end
36
35
  }
37
36
  # p binds.required
@@ -60,7 +60,7 @@ module Rubyvis
60
60
  # and <tt>a</tt> attributes. A {@link pv.Color} or string can also be returned,
61
61
  # though this typically results in slower performance.
62
62
 
63
- def image(f)
63
+ def dynamic_image(f)
64
64
  f,dummy=arguments
65
65
  @_image = lambda {|*args|
66
66
  c=f.js_apply(self,args)
@@ -145,7 +145,7 @@ module Rubyvis
145
145
 
146
146
  def self.defaults
147
147
  a=Rubyvis::Colors.category10()
148
- Line.new.extend(Mark.defaults).line_join('miter').line_width(1.5).stroke_style( lambda {return a.scale(self.parent.index)}).interpolate('linear').eccentricity(0).tension(0.7)
148
+ Line.new.extend(Mark.defaults).line_join('miter').line_width(1.5).stroke_style( lambda { a.scale(parent.index)}).interpolate('linear').eccentricity(0).tension(0.7)
149
149
  end
150
150
  end
151
151
  end
@@ -20,39 +20,127 @@ class Rubyvis::Mark
20
20
  end
21
21
  end
22
22
  ##
23
- # :method: area(opts,&block)
23
+ # :method: area(opts, &block)
24
24
  #
25
+ # Adds an Area mark to current mark.
26
+ # If a block is provided, the context will be defined differently if
27
+ # parameter is provided
28
+ # * Without parameter: block executed inside context of new mark
29
+ # * With paramenter: block executed inside context of current mark.
30
+ # Paramenter references new mark
31
+ #
32
+ # See Mark for examples of use
33
+
25
34
  mark_method :area, Rubyvis::Area
26
35
  ##
27
36
  # :method: bar(opts,&block)
28
37
  #
38
+ # Adds a Bar mark to current mark.
39
+ # If a block is provided, the context will be defined differently if
40
+ # parameter is provided
41
+ # * Without parameter: block executed inside context of new mark
42
+ # * With paramenter: block executed inside context of current mark.
43
+ # Paramenter references new mark
44
+ #
45
+ # See Mark for examples of use
46
+
29
47
  mark_method :bar, Rubyvis::Bar
30
48
  ##
31
49
  # :method: dot(opts,&block)
32
50
  #
51
+ # Adds a Dot mark to current mark.
52
+ # If a block is provided, the context will be defined differently if
53
+ # parameter is provided
54
+ # * Without parameter: block executed inside context of new mark
55
+ # * With paramenter: block executed inside context of current mark.
56
+ # Paramenter references new mark
57
+ #
58
+ # See Mark for examples of use
59
+
33
60
  mark_method :dot, Rubyvis::Dot
34
61
  ##
35
- # :method: _image(opts,&block)
62
+ # :method: image(opts,&block)
63
+ #
64
+ # Adds an Image mark to current mark.
65
+ # If a block is provided, the context will be defined differently if
66
+ # parameter is provided
67
+ # * Without parameter: block executed inside context of new mark
68
+ # * With paramenter: block executed inside context of current mark.
69
+ # Paramenter references new mark
70
+ #
71
+ # See Mark for examples of use
36
72
  #
37
- mark_method :_image, Rubyvis::Image
73
+ mark_method :image, Rubyvis::Image
74
+
38
75
  ##
39
76
  # :method: label(opts,&block)
40
77
  #
78
+ # Adds a Label mark to current mark.
79
+ #
80
+ # If a block is provided, the context will be defined differently if
81
+ # parameter is provided
82
+ # * Without parameter: block executed inside context of new mark
83
+ # * With paramenter: block executed inside context of current mark.
84
+ # Paramenter references new mark
85
+ #
86
+ # See Mark for examples of use
87
+
41
88
  mark_method :label, Rubyvis::Label
42
89
  ##
43
90
  # :method: line(opts,&block)
44
91
  #
92
+ # Adds a Line mark to current mark.
93
+ #
94
+ # If a block is provided, the context will be defined differently if
95
+ # parameter is provided
96
+ # * Without parameter: block executed inside context of new mark
97
+ # * With paramenter: block executed inside context of current mark.
98
+ # Paramenter references new mark
99
+ #
100
+ # See Mark for examples of use
101
+ #
45
102
  mark_method :line, Rubyvis::Line
46
103
  ##
47
104
  # :method: panel(opts,&block)
48
105
  #
106
+ # Adds a Panel mark to current mark.
107
+ #
108
+ # If a block is provided, the context will be defined differently if
109
+ # parameter is provided
110
+ # * Without parameter: block executed inside context of new mark
111
+ # * With paramenter: block executed inside context of current mark.
112
+ # Paramenter references new mark
113
+ #
114
+ # See Mark for examples of use
115
+ #
49
116
  mark_method :panel, Rubyvis::Panel
50
- ##
117
+ ##
51
118
  # :method: rule(opts,&block)
119
+ #
120
+ # Adds a Rule mark to current mark.
121
+ #
122
+ # If a block is provided, the context will be defined differently if
123
+ # parameter is provided
124
+ # * Without parameter: block executed inside context of new mark
125
+ # * With paramenter: block executed inside context of current mark.
126
+ # Paramenter references new mark
127
+ #
128
+ # See Mark for examples of use
52
129
  #
53
130
  mark_method :rule, Rubyvis::Rule
54
131
  ##
55
- # :method: wedge(opts,&block)
132
+ # :method: wedge(opts,&block)
133
+ #
134
+ # Adds a Wedge mark to current mark.
135
+ #
136
+ # If a block is provided, the context will be defined differently if
137
+ # parameter is provided
138
+ # * Without parameter: block executed inside context of new mark
139
+ # * With paramenter: block executed inside context of current mark.
140
+ # Paramenter references new mark
141
+ #
142
+ # See Mark for examples of use
143
+
56
144
  #
57
145
  mark_method :wedge, Rubyvis::Rule
58
146
  end
@@ -8,7 +8,9 @@ module Rubyvis
8
8
  "wedge"
9
9
  end
10
10
  @properties=Mark.properties.dup
11
+
11
12
  attr_accessor_dsl :start_angle, :end_angle, :angle, :inner_radius, :outer_radius, :line_width, [:stroke_style, lambda {|d| Rubyvis.color(d)}], [:fill_style, lambda {|d| Rubyvis.color(d)}]
13
+
12
14
  def self.defaults
13
15
  a=Rubyvis.Colors.category20()
14
16
  Wedge.new.extend(Mark.defaults).start_angle(lambda {s=self.sibling; s ? s.end_angle: -Math::PI.quo(2) } ).inner_radius( 0 ).line_width( 1.5 ).stroke_style( nil ).fill_style( lambda {a.scale(self.index)})
@@ -21,7 +23,8 @@ module Rubyvis
21
23
  end
22
24
 
23
25
  def anchor(name)
24
- partial=lambda {|s| s.inner_radius!=0 ? true : s.angle<2*Math.PI}
26
+ that=self
27
+ partial=lambda {|s| s.inner_radius!=0 ? true : s.angle < 2*Math::PI}
25
28
  mid_radius=lambda {|s| (s.inner_radius+s.outer_radius) / 2.0}
26
29
  mid_angle=lambda {|s| (s.start_angle+s.end_angle) / 2.0 }
27
30
 
@@ -66,9 +69,9 @@ module Rubyvis
66
69
  if (partial.call(s))
67
70
  case (self.name())
68
71
  when 'outer'
69
- return self.upright(mid_angle.call(s)) ? 'right':'left'
72
+ return that.upright(mid_angle.call(s)) ? 'right':'left'
70
73
  when 'inner'
71
- return self.upright(mid_angle.call(s)) ? 'left':'right'
74
+ return that.upright(mid_angle.call(s)) ? 'left':'right'
72
75
 
73
76
  end
74
77
  end
@@ -78,9 +81,9 @@ module Rubyvis
78
81
  if (partial.call(s))
79
82
  case (self.name())
80
83
  when 'start'
81
- return self.upright(s.start_angle) ? 'top':'bottom'
84
+ return that.upright(s.start_angle) ? 'top':'bottom'
82
85
  when 'end'
83
- return self.upright(s.end_angle) ? 'bottom':'top'
86
+ return that.upright(s.end_angle) ? 'bottom':'top'
84
87
 
85
88
  end
86
89
  end
@@ -102,24 +105,26 @@ module Rubyvis
102
105
  a=s.end_angle
103
106
  end
104
107
  end
105
- self.upright(a) ? a: (a+Math::PI)
108
+ that.upright(a) ? a: (a+Math::PI)
106
109
  })
107
110
 
108
111
  end
109
112
 
110
113
 
111
- def self.upright(angle)
114
+ def upright(angle)
112
115
  angle=angle % (2*Math::PI)
113
116
  angle=(angle<0) ? (2*Math::PI+angle) : angle
114
117
  (angle < Math::PI/2.0) or (angle>=3*Math::PI / 2.0)
115
118
 
116
119
  end
117
120
  def build_implied(s)
118
- if (s.angle.nil?)
119
- s.angle= s.end_angle-s.start_angle
121
+
122
+ if s.angle.nil?
123
+ s.angle = s.end_angle - s.start_angle
120
124
  elsif s.end_angle.nil?
121
- s.end_angle=s.start_angle+s.angle
125
+ s.end_angle = s.start_angle + s.angle
122
126
  end
127
+
123
128
  mark_build_implied(s)
124
129
  end
125
130
  end
@@ -177,6 +177,25 @@ module Rubyvis
177
177
  @r=Rubyvis.range(min+step.quo(2),max,step)
178
178
  self
179
179
  end
180
+
181
+ # Sets the range from the given continuous interval. The interval
182
+ # [<i>min</i>, <i>max</i>] is subdivided into <i>n</i> equispaced points,
183
+ # where <i>n</i> is the number of (unique) values in the domain. The first
184
+ # and last point are exactly on the edge of the range.
185
+ #
186
+ # <p>This method must be called <i>after</i> the domain is set.
187
+ #
188
+ # * @param {number} min minimum value of the output range.
189
+ # * @param {number} max maximum value of the output range.
190
+ # * @returns {pv.Scale.ordinal} <tt>this</tt>.
191
+ # * @see Ordinal.split
192
+
193
+ def split_flush(min,max)
194
+ n = self.domain().size
195
+ step = (max - min) / (n - 1).to_f
196
+ @r = (n == 1) ? [(min + max) / 2.0] : Rubyvis.range(min, max + step/2.0, step)
197
+ self
198
+ end
180
199
  def by(f)
181
200
  that=self
182
201
  lambda {|*args|
@@ -92,6 +92,7 @@ module Rubyvis
92
92
  end
93
93
  # Transform value +x+ according to domain and range
94
94
  def scale(x)
95
+ return nil if x.nil?
95
96
  x=x.to_f
96
97
  j=Rubyvis.search(@d, x)
97
98
  j=-j-2 if (j<0)
@@ -105,9 +105,9 @@ module Rubyvis
105
105
  return e
106
106
  end
107
107
 
108
- #/** @private Returns the path segment for the specified points. */
108
+ # Returns the path segment for the specified points. */
109
109
 
110
- def self.path_segment(s1, s2)
110
+ def self.path_segment(s1, s2)
111
111
  l = 1; # sweep-flag
112
112
  l = 0 if s1.interpolate=='polar-reverse'
113
113
 
@@ -9,7 +9,7 @@ require 'rubyvis/scene/svg_wedge'
9
9
  require 'rubyvis/scene/svg_image'
10
10
  require 'rubyvis/scene/svg_curve'
11
11
 
12
- class REXML::Element
12
+ class REXML::Element # :nodoc:
13
13
  attr_accessor :_scene
14
14
  end
15
15
 
@@ -11,10 +11,10 @@ describe Rubyvis::Anchor do
11
11
  @expected_p2=[]
12
12
  vis = pv.Panel.new().width(w).height(h)
13
13
  cell=vis.add(pv.Panel).
14
- data([1,2]).top(lambda {|*args| data_p1.push(args); return 100}).
15
- add(pv.Panel). data(['a','b']).top(lambda {|*args| data_p2.push(args); return 100;})
14
+ data([1,2]).top(lambda {|*args| data_p1.push(args); 100}).
15
+ add(pv.Panel). data(['a','b']).top(lambda {|*args| data_p2.push(args); 100;})
16
16
 
17
- cell.anchor('center').add(pv.Bar).top(lambda {|*args| data_l.push args; return 1})
17
+ cell.anchor('center').add(pv.Bar).top(lambda {|*args| data_l.push args; 1})
18
18
 
19
19
  [1,2].each {|a| %w{a b}.each {|b|
20
20
  @expected_l.push([b,b,a,nil])
@@ -123,4 +123,4 @@ describe Rubyvis::Anchor do
123
123
  datas.should==expected
124
124
  end
125
125
  end
126
- end
126
+ end
@@ -141,6 +141,11 @@ describe "Rubyvis module methods" do
141
141
  it "method log_ceil" do
142
142
  Rubyvis.log_ceil(-5,4).should be_close(-4, 0.001)
143
143
  end
144
+ it "method dict" do
145
+ Rubyvis.dict(["one", "three", "seventeen"], lambda {|s| s.size}).should=={"one"=> 3, "three"=> 5, "seventeen"=> 9}
146
+ Rubyvis.dict(["one", "three", nil, "seventeen"], lambda {|s| s.size}).should=={"one"=> 3, "three"=> 5, "seventeen"=> 9}
147
+
148
+ end
144
149
  end
145
150
 
146
151
  end
@@ -1,8 +1,8 @@
1
1
  require File.dirname(__FILE__)+"/spec_helper.rb"
2
2
  describe Rubyvis::Line do
3
3
  it "should have correct properties" do
4
- props=[:antialias, :bottom, :cursor, :data, :eccentricity, :events, :fill_style, :id, :interpolate, :left, :line_join, :line_width, :reverse, :right, :segmented, :stroke_style, :tension, :title, :top, :visible]
5
- Rubyvis::Line.properties.keys.sort.should==props
4
+ props=[:antialias, :bottom, :cursor, :data, :eccentricity, :events, :fill_style, :id, :interpolate, :left, :line_join, :line_width, :reverse, :right, :segmented, :stroke_style, :tension, :title, :top, :visible].inject({}) {|ac, v| ac[v]=true; ac}
5
+ Rubyvis::Line.properties.should==props
6
6
  end
7
7
  context "rendered" do
8
8
  before do
@@ -0,0 +1,38 @@
1
+ require File.dirname(__FILE__)+"/spec_helper.rb"
2
+ describe "Rubyvis Readme" do
3
+ it "should work with RBP API" do
4
+ vis=nil
5
+ lambda {
6
+ vis = Rubyvis::Panel.new do
7
+ width 150
8
+ height 150
9
+ bar do
10
+ data [1, 1.2, 1.7, 1.5, 0.7, 0.3]
11
+ width 20
12
+ height {|d| d * 80}
13
+ bottom(0)
14
+ left {index * 25}
15
+ end
16
+ end
17
+
18
+ vis.render}.should_not raise_exception
19
+ vis.to_svg.size.should>0
20
+ end
21
+ it "should work with Protovis API" do
22
+ vis=nil
23
+ lambda {
24
+ vis = Rubyvis::Panel.new.width(150).height(150);
25
+
26
+ vis.add(pv.Bar).
27
+ data([1, 1.2, 1.7, 1.5, 0.7, 0.3]).
28
+ width(20).
29
+ height(lambda {|d| d * 80}).
30
+ bottom(0).
31
+ left(lambda {self.index * 25});
32
+
33
+ vis.render
34
+ }.should_not raise_exception
35
+ vis.to_svg.size.should>0
36
+ end
37
+
38
+ end
@@ -1,3 +1,3 @@
1
1
  --color
2
2
  -f s
3
- -b
3
+ -b
@@ -1,22 +1,23 @@
1
1
  # -*- ruby -*-
2
2
  require 'rake'
3
+
4
+ directory "examples"
5
+
3
6
  def get_base(f)
4
7
  f.sub(File.dirname(__FILE__)+"/../examples/","").gsub("/","_").gsub(".rb","")
5
8
  end
6
- directory "examples"
7
9
  EXAMPLES=Dir.glob(File.dirname(__FILE__)+"/../examples/**/*.rb").map {|v| [v,get_base(v)]
8
10
  }.find_all{|v| !v[0].include?"_data"}
9
11
 
10
12
  EXAMPLES_BASE=EXAMPLES.map {|v| v[1]}
11
13
 
12
14
 
13
-
15
+ desc "Build all html and svg files"
14
16
  task :build_site do
15
17
  ruby "build_site.rb"
16
18
  end
17
19
 
18
- task :default=>["index.html","../lib/rubyvis.rb"]+EXAMPLES_BASE.map {|v| "examples/#{v}.html"}
19
-
20
+ task :default=>["examples", "index.html", "../lib/rubyvis.rb"]+EXAMPLES_BASE.map {|v| "examples/#{v}.html"}
20
21
 
21
22
  file "index.html"=>["index.haml", :build_site]+EXAMPLES_BASE.map {|v| "examples/#{v}.png"}
22
23
 
@@ -26,7 +27,7 @@ EXAMPLES.each do |v|
26
27
  file "examples/#{e}.svg"=>[v[0]] do |t|
27
28
  system "ruby1.9 #{v[0]} > #{t.name}"
28
29
  end
29
- file "examples/#{e}.png"=>"examples/#{e}.svg" do |t|
30
+ file "examples/#{e}.png"=>["examples/#{e}.svg"] do |t|
30
31
  system "rsvg -w 200 -h 200 -f png examples/#{e}.svg #{t.name}"
31
32
  end
32
33
  end
@@ -21,7 +21,8 @@ pages={}
21
21
  prev_page=nil
22
22
  next_page=nil
23
23
 
24
- Dir.glob(File.dirname(__FILE__)+"/../examples/**/*.rb") do |f|
24
+ files=Dir.glob(File.dirname(__FILE__)+"/../examples/**/*.rb").sort{|a,b| puts "#{a}, #{b}"; a<=>b}
25
+ files.each do |f|
25
26
 
26
27
  next if f.include? "_data.rb"
27
28
  fn=get_base(f)
@@ -84,7 +85,7 @@ Dir.glob(File.dirname(__FILE__)+"/../examples/**/*.rb") do |f|
84
85
 
85
86
  end
86
87
 
87
- pages.each do |name,page|
88
+ pages.each do |name, page|
88
89
  html_file="examples/#{page.name}.html"
89
90
  File.open(html_file,"w") {|fp|
90
91
  fp.write(haml_template.render(page, :pages=>pages))