rubyvis 0.1.4 → 0.1.5

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.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