samhendley-scruffy 0.2.7 → 0.2.8

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.
@@ -2,8 +2,19 @@ module Scruffy
2
2
  module Components
3
3
 
4
4
  class DataMarkers < Base
5
-
5
+
6
+ include Scruffy::Helpers::Marker
7
+
8
+ attr_accessor :markers
9
+
6
10
  def draw(svg, bounds, options={})
11
+ if (options[:point_markers].nil? || options[:point_markers].empty?) && options[:calculate_markers]
12
+ markers = (options[:markers] || self.markers) || 5
13
+ options[:point_markers] = []
14
+ each_marker(markers, options[:min_key], options[:max_key], bounds[:width], options, :key_formatter) do |label, x|
15
+ options[:point_markers] << label
16
+ end
17
+ end
7
18
  unless options[:point_markers].nil?
8
19
  point_distance = bounds[:width] / (options[:point_markers].size - 1).to_f
9
20
 
@@ -26,6 +26,8 @@ module Scruffy
26
26
  layer_options[:index] = idx
27
27
  layer_options[:min_value] = options[:min_value]
28
28
  layer_options[:max_value] = options[:max_value]
29
+ layer_options[:min_key] = options[:min_key]
30
+ layer_options[:max_key] = options[:max_key]
29
31
  layer_options[:complexity] = options[:complexity]
30
32
  layer_options[:size] = [bounds[:width], bounds[:height]]
31
33
  layer_options[:color] = layer.preferred_color || layer.color || options[:theme].next_color
@@ -3,14 +3,31 @@ module Scruffy
3
3
  class Grid < Base
4
4
  attr_accessor :markers
5
5
 
6
+ include Scruffy::Helpers::Marker
7
+
6
8
  def draw(svg, bounds, options={})
7
9
  markers = (options[:markers] || self.markers) || 5
8
10
 
9
11
  stroke_width = options[:stroke_width]
10
12
 
11
- (0...markers).each do |idx|
12
- marker = ((1 / (markers - 1).to_f) * idx) * bounds[:height]
13
- svg.line(:x1 => 0, :y1 => marker, :x2 => bounds[:width], :y2 => marker, :style => "stroke: #{options[:theme].marker.to_s}; stroke-width: #{stroke_width};")
13
+ each_marker(markers, options[:min_value], options[:max_value], bounds[:height], options, :value_formatter) do |label, y|
14
+ svg.line(:x1 => 0, :y1 => y, :x2 => bounds[:width], :y2 => y, :style => "stroke: #{options[:theme].marker.to_s}; stroke-width: #{stroke_width};")
15
+ end
16
+ end
17
+ end
18
+
19
+ class VGrid < Base
20
+ attr_accessor :markers
21
+
22
+ include Scruffy::Helpers::Marker
23
+
24
+ def draw(svg, bounds, options={})
25
+ markers = (options[:key_markers] || self.markers) || 5
26
+
27
+ stroke_width = options[:stroke_width]
28
+
29
+ each_marker(markers, options[:min_key], options[:max_key], bounds[:width], options, :key_formatter) do |label, x|
30
+ svg.line(:x1 => x, :y1 => 0, :x2 => x, :y2 => bounds[:height], :style => "stroke: #{options[:theme].marker.to_s}; stroke-width: #{stroke_width};")
14
31
  end
15
32
  end
16
33
  end
@@ -1,31 +1,23 @@
1
1
  module Scruffy
2
2
  module Components
3
3
  class ValueMarkers < Base
4
- attr_accessor :markers
5
4
 
5
+ include Scruffy::Helpers::Marker
6
+
7
+ attr_accessor :markers
8
+
6
9
  def draw(svg, bounds, options={})
7
10
  markers = (options[:markers] || self.markers) || 5
8
- all_values = []
9
-
10
- (0...markers).each do |idx|
11
- marker = ((1 / (markers - 1).to_f) * idx) * bounds[:height]
12
- all_values << (options[:max_value] - options[:min_value]) * ((1 / (markers - 1).to_f) * idx) + options[:min_value]
13
- end
14
11
 
15
- (0...markers).each do |idx|
16
- marker = ((1 / (markers - 1).to_f) * idx) * bounds[:height]
17
- marker_value = (options[:max_value] - options[:min_value]) * ((1 / (markers - 1).to_f) * idx) + options[:min_value]
18
- marker_value = options[:value_formatter].route_format(marker_value, idx, options.merge({:all_values => all_values})) if options[:value_formatter]
19
-
20
- svg.text( marker_value.to_s,
12
+ each_marker(markers, options[:min_value], options[:max_value], bounds[:height], options, :value_formatter) do |label, y|
13
+ svg.text( label,
21
14
  :x => bounds[:width],
22
- :y => (bounds[:height] - marker),
15
+ :y => (bounds[:height] - y),
23
16
  'font-size' => relative(8),
24
17
  'font-family' => options[:theme].font_family,
25
18
  :fill => ((options.delete(:marker_color_override) || options[:theme].marker) || 'white').to_s,
26
19
  'text-anchor' => 'end')
27
20
  end
28
-
29
21
  end
30
22
  end
31
23
  end
data/lib/scruffy/graph.rb CHANGED
@@ -80,10 +80,12 @@ module Scruffy
80
80
 
81
81
  # Delegating these getters to the internal state object.
82
82
  def_delegators :internal_state, :title, :theme, :default_type,
83
- :point_markers, :value_formatter, :rasterizer
83
+ :point_markers, :value_formatter, :rasterizer,
84
+ :key_formatter
84
85
 
85
86
  def_delegators :internal_state, :title=, :theme=, :default_type=,
86
- :point_markers=, :value_formatter=, :rasterizer=
87
+ :point_markers=, :value_formatter=, :rasterizer=,
88
+ :key_formatter=
87
89
 
88
90
  attr_reader :renderer # Writer defined below
89
91
 
@@ -112,6 +114,7 @@ module Scruffy
112
114
  self.renderer = Scruffy::Renderers::Standard.new
113
115
  self.rasterizer = Scruffy::Rasterizers::RMagickRasterizer.new
114
116
  self.value_formatter = Scruffy::Formatters::Number.new
117
+ self.key_formatter = Scruffy::Formatters::Number.new
115
118
 
116
119
  %w(title theme layers default_type value_formatter point_markers rasterizer).each do |arg|
117
120
  self.send("#{arg}=".to_sym, options.delete(arg.to_sym)) unless options[arg.to_sym].nil?
@@ -136,14 +139,16 @@ module Scruffy
136
139
  def render(options = {})
137
140
  options[:theme] ||= theme
138
141
  options[:value_formatter] ||= value_formatter
142
+ options[:key_formatter] ||= key_formatter
139
143
  options[:point_markers] ||= point_markers
140
144
  options[:size] ||= (options[:width] ? [options[:width], (options.delete(:width) * 0.6).to_i] : [600, 360])
141
145
  options[:title] ||= title
142
146
  options[:layers] ||= layers
143
- options[:min_value] ||= bottom_value(:padded)
147
+ options[:min_value] ||= bottom_value #(:padded)
144
148
  options[:max_value] ||= top_value
149
+ options[:min_key] ||= bottom_key
150
+ options[:max_key] ||= top_key
145
151
  options[:graph] ||= self
146
-
147
152
 
148
153
  # Removed for now.
149
154
  # Added for making smaller fonts more legible, but may not be needed after all.
@@ -15,6 +15,7 @@ module Scruffy
15
15
  attr_accessor :default_type
16
16
  attr_accessor :point_markers
17
17
  attr_accessor :value_formatter
18
+ attr_accessor :key_formatter
18
19
  attr_accessor :rasterizer
19
20
 
20
21
  def initialize
@@ -9,4 +9,5 @@ module Scruffy::Helpers; end
9
9
  require 'scruffy/helpers/canvas'
10
10
  require 'scruffy/helpers/layer_container'
11
11
  require 'scruffy/helpers/point_container'
12
+ require 'scruffy/helpers/marker_helper'
12
13
  #require 'scruffy/helpers/meta'
@@ -76,15 +76,37 @@ module Scruffy::Helpers
76
76
  # If the lowest value is greater than zero, then the padding will not cross the zero line, preventing
77
77
  # negative values from being introduced into the graph purely due to padding.
78
78
  def bottom_value(padding=nil) # :nodoc:
79
- botval = layers.inject(top_value) { |min, layer| (min = ((min > layer.bottom_value) ? layer.bottom_value : min)) unless layer.bottom_value.nil?; min }
79
+ botval = layers.inject(0) do |min, layer|
80
+ (min = ((min > layer.bottom_value) ? layer.bottom_value : min)) unless layer.bottom_value.nil?
81
+ min
82
+ end
80
83
  above_zero = (botval > 0)
81
- botval = (botval - ((top_value - botval) * 0.15))
84
+ botval = (botval - ((top_value - botval) * 0.15)) if padding == :padded
82
85
 
83
86
  # Don't introduce negative values solely due to padding.
84
87
  # A user-provided value must be negative before padding will extend into negative values.
85
88
  (above_zero && botval < 0) ? 0 : botval
86
89
  end
87
90
 
91
+ def bottom_key(padding=nil)
92
+ return 0 unless layers.any?
93
+ min = layers[0].bottom_key
94
+ layers.each do |layer|
95
+ min = layer.bottom_key if min.nil? && !layer.bottom_key.nil?
96
+ (min = ((min > layer.bottom_key) ? layer.bottom_key : min)) unless layer.bottom_key.nil?
97
+ end
98
+ min
99
+ end
100
+
101
+ def top_key(padding=nil)
102
+ return 1 unless layers.any?
103
+ max = layers[0].top_key
104
+ layers.each do |layer|
105
+ max = layer.top_key if max.nil? && !layer.top_key.nil?
106
+ (max = ((max < layer.top_key) ? layer.top_key : max)) unless layer.top_key.nil?
107
+ end
108
+ max
109
+ end
88
110
 
89
111
  protected
90
112
  def to_camelcase(type) # :nodoc:
@@ -0,0 +1,23 @@
1
+ module Scruffy::Helpers
2
+
3
+ module Marker
4
+
5
+ def each_marker(markers, min, max, width, options, format_key)
6
+ all_values = []
7
+
8
+ (0...markers).each do |idx|
9
+ percent = idx.to_f / (markers-1)
10
+ all_values << (max - min) * percent + min
11
+ end
12
+
13
+ all_values.size.times do |idx|
14
+ location = idx.to_f * width/(markers-1)
15
+ marker_value = all_values[idx]
16
+ marker_value = options[format_key].route_format(marker_value, idx, options.merge({:all_values => all_values})) if options[format_key]
17
+
18
+ yield marker_value, location
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -8,27 +8,27 @@ module Scruffy::Helpers
8
8
  # Allows all standard point operations to be called on both Array and Hash
9
9
  module PointContainer
10
10
  def self.extended point_set
11
- point_set.extend(const_get(point_set.class.to_s))
11
+ point_set.extend(const_get("#{point_set.class.to_s}_ext"))
12
12
  end
13
13
 
14
- def sortable_values
14
+ def sortable(values)
15
15
  values.find_all { |v| v.respond_to? :<=> }
16
16
  end
17
17
 
18
- def summable_values
18
+ def summable(values)
19
19
  values.find_all { |v| v.respond_to? :+ }
20
20
  end
21
21
 
22
22
  def maximum_value
23
- sortable_values.sort.last
23
+ sortable(values).sort.last
24
24
  end
25
25
 
26
26
  def minimum_value
27
- sortable_values.sort.first
27
+ sortable(values).sort.first
28
28
  end
29
29
 
30
30
  def sum
31
- summable_values.inject(0) { |sum, i| sum += i }
31
+ summable(values).inject(0) { |sum, i| sum += i }
32
32
  end
33
33
 
34
34
  def inject_with_index memo
@@ -40,24 +40,53 @@ module Scruffy::Helpers
40
40
  end
41
41
  end
42
42
 
43
- module Array
43
+ def minimum_key
44
+ sortable(keys).sort.first
45
+ end
46
+
47
+ def maximum_key
48
+ sortable(keys).sort.last
49
+ end
50
+
51
+ module Array_ext
44
52
  def values
45
- self
53
+ return self unless is_coordinate_list?
54
+ collect { |x,y| y}
55
+ end
56
+
57
+ def keys
58
+ return [0,size-1] unless is_coordinate_list?
59
+ collect { |x,y| x}
60
+ end
61
+
62
+ def is_coordinate_list?
63
+ if any? && first.is_a?(Array) && first.size == 2
64
+ return true
65
+ end
66
+ return false
67
+ end
68
+
69
+ def each_point(&block)
70
+ if is_coordinate_list?
71
+ each{|x,y|block.call(x,y)}
72
+ else
73
+ size.times{|k|block.call(k,self[k])}
74
+ end
46
75
  end
47
76
  end
48
77
 
49
- module Hash
50
- def minimum_key
51
- self.keys.sort.first
78
+ module Hash_ext
79
+ def is_coordinate_list?
80
+ true
52
81
  end
53
82
 
54
- def maximum_key
55
- self.keys.sort.last
83
+ def each_point(&block)
84
+ keys.sort.each{|k|block.call(k,self[k])}
56
85
  end
57
86
 
58
87
  def inject memo
59
- (minimum_key..maximum_key).each do |i|
60
- memo = yield memo, self[i]
88
+ keys.sort.each do |k|
89
+ memo = yield memo, self[k]
61
90
  end
62
91
  memo
63
92
  end
@@ -21,4 +21,5 @@ require 'scruffy/layers/line'
21
21
  require 'scruffy/layers/average'
22
22
  require 'scruffy/layers/stacked'
23
23
  require 'scruffy/layers/pie'
24
- require 'scruffy/layers/pie_slice'
24
+ require 'scruffy/layers/pie_slice'
25
+ require 'scruffy/layers/scatter'
@@ -68,6 +68,7 @@ module Scruffy::Layers
68
68
  options[:relativestroke] ||= false
69
69
 
70
70
  @options = options
71
+
71
72
  end
72
73
 
73
74
  # Builds SVG code for this graph using the provided Builder object.
@@ -75,7 +76,7 @@ module Scruffy::Layers
75
76
  # rendering responsibilities to Base#draw.
76
77
  #
77
78
  # svg:: a Builder object used to create SVG code.
78
- def render(svg, options = {})
79
+ def render(svg, options)
79
80
  setup_variables(options)
80
81
  coords = generate_coordinates(options)
81
82
 
@@ -123,6 +124,16 @@ module Scruffy::Layers
123
124
  def bottom_value
124
125
  @relevant_data ? points.minimum_value : nil
125
126
  end
127
+
128
+ # The highest data point on this layer, or nil if relevant_data == false
129
+ def bottom_key
130
+ @relevant_data ? points.minimum_key : nil
131
+ end
132
+
133
+ # The lowest data point on this layer, or nil if relevant_data == false
134
+ def top_key
135
+ @relevant_data ? points.maximum_key : nil
136
+ end
126
137
 
127
138
  # The sum of all values
128
139
  def sum_values
@@ -144,20 +155,20 @@ module Scruffy::Layers
144
155
  # just a best guess, and can be overridden or thrown away (for example, this is overridden
145
156
  # in pie charting and bar charts).
146
157
  def generate_coordinates(options = {})
147
- options[:point_distance] = width / (points.size - 1).to_f
158
+
159
+ dy = height.to_f / (options[:max_value] - options[:min_value])
160
+ dx = width.to_f / (options[:max_key] - options[:min_key])
148
161
 
149
- points.inject_with_index([]) do |memo, point, idx|
150
- x_coord = options[:point_distance] * idx
162
+ ret = []
163
+ points.each_point do |x, y|
164
+ if y
165
+ x_coord = dx * (x.to_f - options[:min_key])
166
+ y_coord = dy * (y.to_f - options[:min_value])
151
167
 
152
- if point
153
- relative_percent = ((point == min_value) ? 0 : ((point - min_value) / (max_value - min_value).to_f))
154
- y_coord = (height - (height * relative_percent))
155
-
156
- memo << [x_coord, y_coord]
168
+ ret << [x_coord, height - y_coord]
157
169
  end
158
-
159
- memo
160
170
  end
171
+ return ret
161
172
  end
162
173
 
163
174
  # Converts a percentage into a pixel value, relative to the height.
@@ -7,15 +7,23 @@ module Scruffy::Layers
7
7
  # Simple scatter graph
8
8
  class Scatter < Base
9
9
 
10
+ include Scruffy::Helpers::Marker
11
+
10
12
  # Renders scatter graph.
11
13
  def draw(svg, coords, options={})
12
- svg.g(:class => 'shadow', :transform => "translate(#{relative(0.5)}, #{relative(0.5)})") {
13
- coords.each { |coord| svg.circle( :cx => coord.first, :cy => coord.last + relative(0.9), :r => relative(2),
14
- :style => "stroke-width: #{relative(2)}; stroke: black; opacity: 0.35;" ) }
15
- }
14
+
15
+ options.merge!(@options)
16
+
17
+ if options[:shadow]
18
+ svg.g(:class => 'shadow', :transform => "translate(#{relative(0.5)}, #{relative(0.5)})") {
19
+ coords.each { |coord| svg.circle( :cx => coord.first, :cy => coord.last + relative(0.9), :r => relative(2),
20
+ :style => "stroke-width: #{relative(2)}; stroke: black; opacity: 0.35;" ) }
21
+ }
22
+ end
16
23
 
17
24
  coords.each { |coord| svg.circle( :cx => coord.first, :cy => coord.last, :r => relative(2),
18
25
  :style => "stroke-width: #{relative(2)}; stroke: #{color.to_s}; fill: #{color.to_s}" ) }
19
26
  end
20
27
  end
21
- end
28
+ end
29
+
@@ -31,7 +31,7 @@ module Scruffy::Layers
31
31
  # Overrides Base#render to fiddle with layers' points to achieve a stacked effect.
32
32
  def render(svg, options = {})
33
33
  #TODO ensure this works with new points
34
- current_points = points.dup
34
+ current_points = points
35
35
 
36
36
  layers.each do |layer|
37
37
  real_points = layer.points
@@ -7,6 +7,7 @@ module Scruffy::Renderers
7
7
  components << Scruffy::Components::Viewport.new(:view, :position => [2, 26], :size => [89, 66]) do |graph|
8
8
  graph << Scruffy::Components::ValueMarkers.new(:values, :position => [0, 2], :size => [18, 89])
9
9
  graph << Scruffy::Components::Grid.new(:grid, :position => [20, 0], :size => [80, 89], :stroke_width => 1)
10
+ graph << Scruffy::Components::VGrid.new(:vgrid, :position => [20, 0], :size => [80, 89], :stroke_width => 1)
10
11
  graph << Scruffy::Components::DataMarkers.new(:labels, :position => [20, 92], :size => [80, 8])
11
12
  graph << Scruffy::Components::Graphs.new(:graphs, :position => [20, 0], :size => [80, 89])
12
13
  end
@@ -30,7 +31,7 @@ module Scruffy::Renderers
30
31
  end
31
32
 
32
33
  def grids
33
- [component(:view).component(:grid)]
34
+ [component(:view).component(:grid),component(:view).component(:vgrid)]
34
35
  end
35
36
  end
36
37
  end
@@ -2,7 +2,7 @@ module Scruffy
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 6
5
+ TINY = 8
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -1,5 +1,5 @@
1
1
  require 'test/unit'
2
- require 'scruffy'
2
+ require 'test_helper'
3
3
 
4
4
  class SimpleTheme < Scruffy::Themes::Base
5
5
  def initialize
@@ -12,6 +12,13 @@ class SimpleTheme < Scruffy::Themes::Base
12
12
  end
13
13
  end
14
14
 
15
+ $make_png = true
16
+ begin
17
+ require 'RMagick'
18
+ rescue LoadError
19
+ $make_png = nil
20
+ end
21
+
15
22
  class GraphCreationTest < Test::Unit::TestCase
16
23
  BASE_DIR = File.dirname(__FILE__)
17
24
  WEBSITE_DIR = BASE_DIR + "/../website/images/graphs"
@@ -29,7 +36,7 @@ class GraphCreationTest < Test::Unit::TestCase
29
36
  }
30
37
 
31
38
  graph.render :to => "#{WEBSITE_DIR}/pie_test.svg"
32
- graph.render :width => 400, :to => "#{WEBSITE_DIR}/pie_test.png", :as => 'png'
39
+ graph.render :width => 400, :to => "#{WEBSITE_DIR}/pie_test.png", :as => 'png' if $make_png
33
40
  end
34
41
 
35
42
  def test_create_line
@@ -40,7 +47,7 @@ class GraphCreationTest < Test::Unit::TestCase
40
47
  graph.add :line, 'Example', [20, 100, 70, 30, 106]
41
48
 
42
49
  graph.render :to => "#{WEBSITE_DIR}/line_test.svg"
43
- graph.render :width => 400, :to => "#{WEBSITE_DIR}/line_test.png", :as => 'png'
50
+ graph.render :width => 400, :to => "#{WEBSITE_DIR}/line_test.png", :as => 'png' if $make_png
44
51
  end
45
52
 
46
53
 
@@ -50,7 +57,7 @@ class GraphCreationTest < Test::Unit::TestCase
50
57
  graph.renderer = Scruffy::Renderers::Standard.new
51
58
  graph.add :bar, 'Example', [20, 100, 70, 30, 106]
52
59
  graph.render :to => "#{WEBSITE_DIR}/bar_test.svg"
53
- graph.render :width => 400, :to => "#{WEBSITE_DIR}/bar_test.png", :as => 'png'
60
+ graph.render :width => 400, :to => "#{WEBSITE_DIR}/bar_test.png", :as => 'png' if $make_png
54
61
  end
55
62
 
56
63
  def test_split
@@ -67,7 +74,7 @@ class GraphCreationTest < Test::Unit::TestCase
67
74
  graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
68
75
 
69
76
  graph.render :to => "#{WEBSITE_DIR}/split_test.svg"
70
- graph.render :width => 500, :to => "#{WEBSITE_DIR}/split_test.png", :as => 'png'
77
+ graph.render :width => 500, :to => "#{WEBSITE_DIR}/split_test.png", :as => 'png' if $make_png
71
78
  end
72
79
 
73
80
  def test_stacking
@@ -81,7 +88,7 @@ class GraphCreationTest < Test::Unit::TestCase
81
88
  end
82
89
  graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
83
90
  graph.render :to => "#{WEBSITE_DIR}/stacking_test.svg"
84
- graph.render :width => 500, :to => "#{WEBSITE_DIR}/stacking_test.png", :as => 'png'
91
+ graph.render :width => 500, :to => "#{WEBSITE_DIR}/stacking_test.png", :as => 'png' if $make_png
85
92
  end
86
93
 
87
94
  def test_multi_layered
@@ -96,6 +103,18 @@ class GraphCreationTest < Test::Unit::TestCase
96
103
  graph.add :line, 'Jim', [-10, -20, 50, 92, -21, 56], :categories => [:top_left, :bottom_right]
97
104
  graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
98
105
  graph.render :to => "#{WEBSITE_DIR}/multi_test.svg"
99
- graph.render :width => 500, :to => "#{WEBSITE_DIR}/multi_test.png", :as => 'png'
106
+ graph.render :width => 500, :to => "#{WEBSITE_DIR}/multi_test.png", :as => 'png' if $make_png
107
+ end
108
+
109
+ def test_scatter
110
+ graph = Scruffy::Graph.new
111
+ graph.title = "Some Kind of Information"
112
+ graph.renderer = Scruffy::Renderers::Standard.new
113
+
114
+ graph.add :scatter, 'Stephanie', {0 => 0, 1 => 1, 2 => 4, 3 => 9, 4 => 8, 5 => 10, 6 => 12, 7 => 3, 8 => 13}
115
+ graph.add :line, 'Artiom', {-3 => 2, 1.5 => 6, 2 => 4.5, 15 => -4}, :dots => true
116
+ graph.add :scatter, 'Sam', [[-3,15], [1.5,18], [2,9], [15,6]]
117
+ graph.render :to => "#{WEBSITE_DIR}/scatter_test.svg"
118
+ graph.render :width => 500, :to => "#{WEBSITE_DIR}/scatter_test.png", :as => 'png' if $make_png
100
119
  end
101
120
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: samhendley-scruffy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brasten Sager
@@ -24,16 +24,6 @@ dependencies:
24
24
  - !ruby/object:Gem::Version
25
25
  version: 2.0.0
26
26
  version:
27
- - !ruby/object:Gem::Dependency
28
- name: hoe
29
- type: :runtime
30
- version_requirement:
31
- version_requirements: !ruby/object:Gem::Requirement
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: 1.7.0
36
- version:
37
27
  description: Scruffy is a Ruby library for generating high quality, good looking graphs. It is designed to be easy to use and highly customizable.
38
28
  email:
39
29
  - brasten@nagilum.com
@@ -66,6 +56,7 @@ files:
66
56
  - lib/scruffy/helpers/point_container.rb
67
57
  - lib/scruffy/helpers/layer_container.rb
68
58
  - lib/scruffy/helpers/meta.rb
59
+ - lib/scruffy/helpers/marker_helper.rb
69
60
  - lib/scruffy/components.rb
70
61
  - lib/scruffy/graph_state.rb
71
62
  - lib/scruffy/components/style_info.rb
@@ -94,8 +85,10 @@ files:
94
85
  - lib/scruffy/layers.rb
95
86
  - lib/scruffy.rb
96
87
  - LICENCE.txt
88
+ - History.txt
97
89
  - README.txt
98
90
  - CHANGES.txt
91
+ - Manifest.txt
99
92
  has_rdoc: true
100
93
  homepage: http://scruffy.rubyforge.org
101
94
  post_install_message: