rubyvis 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
@@ -1 +1 @@
1
- d!FA&{���Ap��O�WC��Q!v���!��a:-�!� N���[5������z\� �譋�LV��?�y��d'ПP}���,u�b�~��p T�$�N%�̗����z��BtP��SX
1
+ O�Ly���N^
data/History.txt CHANGED
@@ -1,4 +1,9 @@
1
- === 0.1.4 / 2010-10-20
1
+ === 0.1.5 / 2010-10-22
2
+
3
+ * Bug fix: styles considered properly, so font attribute works right now.
4
+ * Bug fix: anchors have proper parent assignation.
5
+
6
+ === 0.1.4 / 2010-10-20
2
7
 
3
8
  * Bug fix: Order now works on Nest
4
9
  * Added log scale spec. domain, range, scale, invert and ticks works like javascript version
@@ -29,9 +29,9 @@ cell = vis.add(pv.Panel)
29
29
 
30
30
  #/* Label. */
31
31
  cell.anchor("center").add(pv.Label)
32
- .visible(lambda {|d, y, x| puts d,y,x; return x == y})
32
+ .visible(lambda {|d,y, x| return x == y})
33
33
  .font("bold 14px sans-serif")
34
- .text(lambda {|d, y, x| x});
34
+ .text(lambda {|d, y, x| x});
35
35
 
36
36
  #/* Dot plot and frame. */
37
37
  plot = cell.add(pv.Panel)
@@ -38,7 +38,7 @@ bar.anchor("left").add(pv.Label)
38
38
  .text_margin(5)
39
39
  .text_align("right")
40
40
  .text(lambda { "ABCDEFGHIJK"[self.index,1]});
41
-
41
+
42
42
  #/* X-axis ticks. */
43
43
  vis.add(pv.Rule)
44
44
  .data(x.ticks(5))
@@ -49,7 +49,7 @@ vis.add(pv.Panel)
49
49
  .stroke_style(lambda {|d| c.scale(d.z)})
50
50
  .fill_style(lambda {|d| c.scale(d.z).alpha(0.2)})
51
51
  .shape_size(lambda {|d| d.z})
52
- .title(lambda {|d| d.z})
52
+ .title(lambda {|d| "%0.1f" % d.z})
53
53
 
54
54
  vis.render()
55
55
  puts vis.to_svg
data/lib/rubyvis.rb CHANGED
@@ -28,7 +28,7 @@ end
28
28
 
29
29
  module Rubyvis
30
30
  @document=nil
31
- VERSION = '0.1.4'
31
+ VERSION = '0.1.5'
32
32
  API_VERSION='3.3'
33
33
  Infinity=1.0 / 0 # You actually can do it! http://snipplr.com/view/2137/uses-for-infinity-in-ruby/
34
34
  # :section: basic methods
@@ -22,4 +22,4 @@ module Rubyvis
22
22
  end
23
23
  end
24
24
 
25
- #require 'rubyvis/layout/stack'
25
+ require 'rubyvis/layout/stack'
data/lib/rubyvis/mark.rb CHANGED
@@ -59,7 +59,24 @@ module Rubyvis
59
59
  }
60
60
  end
61
61
  end
62
-
62
+
63
+ def delete_index
64
+ @index=nil
65
+ @index_defined=false
66
+ end
67
+ def index
68
+ @index
69
+ end
70
+
71
+ def index_defined?
72
+ @index_defined
73
+ end
74
+ def index=(v)
75
+ @index_defined=true
76
+ @index=v
77
+ v
78
+ end
79
+
63
80
 
64
81
  def property_value(name,v)
65
82
  prop=Property.new({:name=>name, :id=>Rubyvis.id, :value=>v})
@@ -74,15 +91,15 @@ module Rubyvis
74
91
  def instance(default_index=nil)
75
92
  scene=self.scene
76
93
  scene||=self.parent.instance(-1).children[self.child_index]
77
-
78
- index = self.respond_to?(:index) ? self.index : default_index
79
- #puts "type: #{type}, self.index: #{self.index}, index:#{index}"
80
- scene[index<0 ? scene.length-1: index]
94
+
95
+ index = index_defined? ? self.index : default_index
96
+ # "defined?: #{index_defined?} : type: #{type}, self.index: #{self.index}, index:#{index}"
97
+ scene[index<0 ? scene.size-1: index]
81
98
  end
82
99
 
83
100
 
84
101
 
85
- attr_accessor :parent, :root, :index, :child_index, :scene, :proto, :target, :scale
102
+ attr_accessor :parent, :root, :child_index, :scene, :proto, :target, :scale
86
103
  attr_reader :_properties
87
104
 
88
105
 
@@ -91,6 +108,7 @@ module Rubyvis
91
108
  @scene=nil
92
109
  @stack=[]
93
110
  @index=nil
111
+
94
112
  def self.properties
95
113
  @properties
96
114
  end
@@ -127,6 +145,7 @@ module Rubyvis
127
145
  @defs={}
128
146
  @child_index=-1
129
147
  @index=-1
148
+ @index_defined = true
130
149
  @scale=1
131
150
  @scene=nil
132
151
 
@@ -144,18 +163,18 @@ module Rubyvis
144
163
  end
145
164
 
146
165
  def instances(source)
147
-
148
166
  mark = self
149
- index = []
167
+ _index = []
150
168
  scene=nil
169
+
151
170
  while (!(scene = mark.scene)) do
152
171
  source = source.parent;
153
- index.push(OpenStruct.new({:index=>source.index, :child_index=>mark.child_index}))
172
+ _index.push(OpenStruct.new({:index=>source.index, :child_index=>mark.child_index}))
154
173
  mark = mark.parent
155
174
  end
156
175
 
157
- while (index.size>0) do
158
- i = index.pop()
176
+ while (_index.size>0) do
177
+ i = _index.pop()
159
178
  scene = scene[i.index].children[i.child_index]
160
179
  end
161
180
  #
@@ -163,8 +182,8 @@ module Rubyvis
163
182
  # to a panel anchor, only generate one instance per panel. Also, set
164
183
  # the margins to zero, since they are offset by the enclosing panel.
165
184
  # /
166
- if (self.respond_to? :index and self.index)
167
-
185
+
186
+ if (index_defined?)
168
187
  s = scene[self.index].dup
169
188
  s.right = s.top = s.left = s.bottom = 0;
170
189
  return [s];
@@ -186,9 +205,12 @@ module Rubyvis
186
205
  mark_anchor(name)
187
206
  end
188
207
  def mark_anchor(name="center")
189
-
190
208
  anchor=Rubyvis::Anchor.new(self).name(name).data(lambda {
191
- self.scene.target.map {|s| s.data} }).visible(lambda {
209
+ pp self.scene.target if $DEBUG
210
+ a=self.scene.target.map {|s| puts "s:#{s.data}" if $DEBUG; s.data}
211
+ p a if $DEBUG
212
+ a
213
+ }).visible(lambda {
192
214
  self.scene.target[self.index].visible
193
215
  }).id(lambda {self.scene.target[self.index].id}).left(lambda {
194
216
  s = self.scene.target[self.index]
@@ -333,14 +355,14 @@ module Rubyvis
333
355
  mark.scale=scale
334
356
  if (depth < @indexes.size)
335
357
  @stack.unshift(nil)
336
- if (mark.respond_to? :index and mark.index)
358
+ if (mark.index_defined?)
337
359
  render_instance(mark, depth, scale);
338
360
  else
339
361
  mark.scene.size.times {|i|
340
362
  mark.index = i;
341
363
  render_instance(mark, depth, scale);
342
364
  }
343
- mark.index=nil
365
+ mark.delete_index
344
366
  end
345
367
  stack.shift
346
368
  else
@@ -350,6 +372,8 @@ module Rubyvis
350
372
  end
351
373
  mark.scale=nil
352
374
  end
375
+
376
+
353
377
  def render_instance(mark,depth,scale)
354
378
  s=mark.scene[mark.index]
355
379
  if s.visible
@@ -471,7 +495,7 @@ module Rubyvis
471
495
  mark=that
472
496
  begin
473
497
  Mark.stack.pop
474
- if(mark.parent)
498
+ if(mark.parent)
475
499
  mark.scene=nil
476
500
  mark.scale=nil
477
501
  end
@@ -524,7 +548,8 @@ module Rubyvis
524
548
  stack.unshift(nil)
525
549
  scene.size=data.size
526
550
  data.each_with_index {|d, i|
527
- Mark.index=self.index=i
551
+ Mark.index=i
552
+ self.index=i
528
553
  s=scene[i]
529
554
  if !s
530
555
  scene[i]=s=SceneElement.new
@@ -534,10 +559,11 @@ module Rubyvis
534
559
  build_instance(s)
535
560
  }
536
561
  Mark.index=-1
537
- self.index=nil
562
+ delete_index
538
563
  stack.shift()
539
- return self
564
+ self
540
565
  end
566
+
541
567
  def build_instance(s)
542
568
  mark_build_instance(s)
543
569
  end
@@ -14,7 +14,7 @@ module Rubyvis
14
14
  end
15
15
  def extend(proto)
16
16
  @proto=proto
17
- return self
17
+ self
18
18
  end
19
19
  end
20
20
  end
@@ -9,6 +9,7 @@ module Rubyvis
9
9
 
10
10
  @properties=Mark.properties.dup
11
11
  attr_accessor_dsl :width, :height, :line_width, [:stroke_style, lambda {|d| pv.color(d)}], [:fill_style, lambda {|d| pv.color(d)}]
12
+
12
13
  def self.defaults
13
14
  a=Rubyvis.Colors.category20()
14
15
  Bar.new.extend(Mark.defaults).line_width(1.5).fill_style( lambda {
@@ -10,7 +10,7 @@ module Rubyvis
10
10
  'label'
11
11
  end
12
12
  def self.defaults
13
- Label.new.extend(Mark.defaults).events('none').text(lambda{|x| x}).font("10px sans-serif" ).text_angle( 0 ).text_style( 'black' ).text_align( 'left' ).text_baseline( 'bottom' ).text_margin(3)
13
+ Label.new.extend(Mark.defaults).events('none').text(pv.identity).font("10px sans-serif" ).text_angle( 0 ).text_style( 'black' ).text_align( 'left' ).text_baseline( 'bottom' ).text_margin(3)
14
14
  end
15
15
  end
16
16
  end
@@ -46,6 +46,11 @@ module Rubyvis
46
46
  c.bind()
47
47
  }
48
48
  end
49
+ def anchor(name)
50
+ anchor=mark_anchor(name)
51
+ anchor.parent=self
52
+ anchor
53
+ end
49
54
  def build_instance(s)
50
55
  super(s)
51
56
  return if !s.visible
@@ -112,15 +112,27 @@ module Rubyvis
112
112
  e.attributes[name]=value
113
113
  end
114
114
  }
115
+
115
116
  if(style)
117
+ base_style=e.attributes['style']
118
+ base_style||=""
119
+ array_styles={}
120
+ base_style.split(";").each {|v|
121
+ v=~/\s*(.+)\s*:\s*(.+)/
122
+ array_styles[$1]=$2
123
+ }
116
124
  style.each {|name,value|
117
125
  value=nil if value==self.implicit[:css][name]
118
126
  if (value.nil?)
119
- e.delete_attribute(name)
127
+ array_styles.delete(name)
120
128
  else
121
- e.style[name] = value;
129
+
130
+ array_styles[name]=value
122
131
  end
123
132
  }
133
+ if array_styles.size>0
134
+ e.attributes["style"]=array_styles.map {|k,v| "#{k}:#{v}"}.join(";")
135
+ end
124
136
  end
125
137
  e
126
138
  end
@@ -0,0 +1,126 @@
1
+ require File.dirname(__FILE__)+"/spec_helper.rb"
2
+ describe Rubyvis::Anchor do
3
+ describe "inner anchor data should work fine" do
4
+ before do
5
+ w=200
6
+ h=200
7
+ data_p1=[]
8
+ data_p2=[]
9
+ data_l=[]
10
+ @expected_l=[]
11
+ @expected_p2=[]
12
+ vis = pv.Panel.new().width(w).height(h)
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;})
16
+
17
+ cell.anchor('center').add(pv.Bar).top(lambda {|*args| data_l.push args; return 1})
18
+
19
+ [1,2].each {|a| %w{a b}.each {|b|
20
+ @expected_l.push([b,b,a,nil])
21
+ @expected_p2.push([b,a,nil])
22
+ }}
23
+ @expected_p1=[[1,nil],[2,nil]]
24
+ @data_p1=data_p1
25
+ @data_p2=data_p2
26
+ @data_l=data_l
27
+ vis.render
28
+
29
+ end
30
+ if(true)
31
+ it "first loop correct" do
32
+ @data_p1.should==@expected_p1
33
+ end
34
+ it "second loop correct" do
35
+ @data_p2.should==@expected_p2
36
+ end
37
+ end
38
+
39
+ it "label loop correct" do
40
+ @data_l.should==@expected_l
41
+ end
42
+ end
43
+
44
+ it "antibiotics example should render correct data" do
45
+
46
+ a1=['a','b','c']
47
+ a2=[1,2,3]
48
+ antibiotics=["penicillin", "streptomycin", "neomycin"]
49
+ adatas=[]
50
+ s = 180
51
+ _p = 20
52
+ vis = pv.Panel.new()
53
+ .height(s * antibiotics.size + _p * (antibiotics.size - 1))
54
+ .width(s * antibiotics.size + _p * (antibiotics.size - 1))
55
+ .top(14.5)
56
+ .left(14.5)
57
+ .bottom(44)
58
+ .right(14)
59
+
60
+ cell = vis.add(pv.Panel)
61
+ .data(a1)
62
+ .width(s)
63
+ .left(lambda {(s + _p) * self.index})
64
+ .add(pv.Panel)
65
+ .data(a2)
66
+ .height(s)
67
+ .top(lambda {(s + _p) * self.index});
68
+
69
+
70
+ cell.anchor("center").add(pv.Label).text(lambda {|*args| adatas.push args})
71
+
72
+ expected=[]
73
+ a1.each {|a| a2.each {|b| expected.push([b,b,a,nil])}}
74
+ vis.render
75
+ adatas.should==expected
76
+
77
+ end
78
+
79
+ context "Panel-Panel-label assigment" do
80
+ before do
81
+ @h=200
82
+ @w=200
83
+ @values=["a","b","c"]
84
+ @vis = Rubyvis.Panel.new.width(@w).height(@h). add(pv.Panel).data(@values). add(pv.Panel).data(@values)
85
+ @anchor=@vis.anchor('center')
86
+ @label=@vis.add(pv.Label)
87
+ end
88
+ it "should have correct data" do
89
+ datas=[]
90
+ @label.text(lambda {|*args| datas.push args})
91
+ @vis.render
92
+ expected=[]
93
+ @values.each {|a| @values.each {|b| expected.push([b,b,a,nil])}}
94
+ datas.should==expected
95
+ end
96
+ end
97
+ context "Panel-bar assigment" do
98
+ before do
99
+ @h=200
100
+ @w=200
101
+ @vis = Rubyvis.Panel.new.width(@w).height(@h)
102
+ @bar = @vis.add(Rubyvis::Bar).data([1,2,3])
103
+ @anchor=@bar.anchor('center')
104
+ @label=@anchor.add(Rubyvis::Label)
105
+
106
+ end
107
+
108
+ it "should have correct data for direct asigment" do
109
+ datas=[]
110
+ expected=[[1,nil],[2,nil],[3,nil]]
111
+ @label.text(lambda {|*args| datas.push args})
112
+ @vis.render
113
+ datas.should==expected
114
+ end
115
+
116
+ it "should have correct data for two levels of data" do
117
+ datas=[]
118
+ @vis.data(%w{a b c})
119
+ expected=[]
120
+ %w{a b c}.each {|a| [1,2,3].each {|b| expected.push([b,a])}}
121
+ @label.text(lambda {|*args| datas.push args})
122
+ @vis.render
123
+ datas.should==expected
124
+ end
125
+ end
126
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 4
9
- version: 0.1.4
8
+ - 5
9
+ version: 0.1.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Claudio Bustos
@@ -35,7 +35,7 @@ cert_chain:
35
35
  rpP0jjs0
36
36
  -----END CERTIFICATE-----
37
37
 
38
- date: 2010-10-20 00:00:00 -03:00
38
+ date: 2010-10-22 00:00:00 -03:00
39
39
  default_executable:
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
@@ -289,6 +289,7 @@ test_files:
289
289
  - spec/panel_spec.rb
290
290
  - spec/scale_log_spec.rb
291
291
  - spec/scale_linear_datetime_spec.rb
292
+ - spec/anchor_spec.rb
292
293
  - spec/scale_spec.rb
293
294
  - spec/scale_linear_spec.rb
294
295
  - spec/label_spec.rb
metadata.gz.sig CHANGED
Binary file