scruffy 0.0.12 → 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.
data/CHANGES CHANGED
@@ -1,6 +1,13 @@
1
1
  = Scruffy Changelog
2
2
 
3
- Version 0.1.0 will be the first release for general use.
3
+ == Version 0.1.0
4
+ (August 11th, 2006)
5
+
6
+ * First public release!
7
+ * Legend rendering
8
+ * Rasterizing graph to multiple image types (graph.render :as => 'PNG')
9
+
10
+
4
11
 
5
12
  == Version 0.0.12
6
13
  (August 10th, 2006)
data/Rakefile CHANGED
@@ -42,7 +42,7 @@ Rake::RDocTask.new { |rdoc|
42
42
  rdoc.rdoc_files.include('README', 'CHANGES')
43
43
  rdoc.rdoc_files.include('lib/scruffy.rb')
44
44
  rdoc.rdoc_files.include('lib/scruffy/*.rb')
45
- rdoc.rdoc_files.include('lib/scruffy/graph_layers/*.rb')
45
+ rdoc.rdoc_files.include('lib/scruffy/layers/*.rb')
46
46
  rdoc.rdoc_files.include('lib/scruffy/renderers/*.rb')
47
47
  }
48
48
 
data/lib/scruffy.rb CHANGED
@@ -9,6 +9,7 @@ require 'scruffy/graph'
9
9
  require 'scruffy/themes'
10
10
  require 'scruffy/version'
11
11
  require 'scruffy/transformer'
12
+ require 'scruffy/rasterizers'
12
13
  require 'scruffy/resolver'
13
14
  require 'scruffy/layers'
14
15
 
data/lib/scruffy/graph.rb CHANGED
@@ -123,14 +123,20 @@ module Scruffy
123
123
  # min_value:: Overrides the calculated minimum value used for the graph.
124
124
  # max_value:: Overrides the calculated maximum value used for the graph.
125
125
  #
126
+ # For other image formats:
127
+ # as:: File format to render to ('PNG', 'JPG', etc)
128
+ # to:: Name of file to save graph to, if desired. If not provided, image is returned as blob.
126
129
  def render(options = {})
127
130
  size = options.delete(:size) || (options[:width] ? [options[:width], (options.delete(:width) * 0.6).to_i] : [600, 400])
128
131
  options[:theme] ||= @theme
129
132
  options[:marker_transformer] ||= @marker_transformer
130
133
  options[:point_markers] ||= @point_markers
131
134
 
132
- self.renderer.render( options.merge({:size => size, :title => title,
133
- :layers => layers, :min_value => (options[:min_value] || bottom_value), :max_value => (options[:max_value] || top_value) } ) )
135
+ svg = self.renderer.render( options.merge({:size => size, :title => title,
136
+ :layers => layers, :min_value => (options[:min_value] || bottom_value),
137
+ :max_value => (options[:max_value] || top_value) } ) )
138
+
139
+ options[:as] ? Scruffy::Rasterizers::RMagickRasterizer.new.rasterize(svg, options) : svg
134
140
  end
135
141
 
136
142
  # Adds a Layer to the Graph. Accepts either a list of arguments used to build a new layer, or
@@ -1,6 +1,13 @@
1
1
  module Scruffy
2
+ # ==Scruffy::Layers
3
+ #
4
+ # Author:: Brasten Sager
5
+ # Date:: August 10th, 2006
6
+ #
7
+ # See documentation in Scruffy::Layers::Base
8
+ #
2
9
  module Layers
3
- # ==Base
10
+ # ==Scruffy::Layers::Base
4
11
  #
5
12
  # Author:: Brasten Sager
6
13
  # Date:: August 5th, 2006
@@ -0,0 +1 @@
1
+ require 'scruffy/rasterizers/rmagick_rasterizer.rb'
@@ -0,0 +1,26 @@
1
+ module Scruffy
2
+ # ===Scruffy Rasterizers
3
+ #
4
+ # Author:: Brasten Sager
5
+ # Date:: August 10th, 2006
6
+ #
7
+ # These handle the job of rasterizing SVG images to other image formats.
8
+ # At the moment, only RMagickRasterizer exists, but others may soon follow.
9
+ #
10
+ # I'm somewhat interesting in finding a way to integrate Apache Batik, as it's
11
+ # SVG rendering seems to be superior to ImageMagick's.
12
+ module Rasterizers
13
+ class RMagickRasterizer
14
+ def rasterize(svg, options={})
15
+ require 'RMagick'
16
+
17
+ image = Magick::Image::from_blob(svg)[0]
18
+ if options[:to]
19
+ image.write(options[:to]) { self.format = options[:as] }
20
+ end
21
+
22
+ image.to_blob { self.format = options[:as] }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -24,6 +24,7 @@ module Scruffy
24
24
  render_markers(svg, options)
25
25
  render_title(svg, options)
26
26
  render_layers(svg, options)
27
+ render_legend(svg, options)
27
28
 
28
29
  }
29
30
  }
@@ -55,6 +56,8 @@ module Scruffy
55
56
 
56
57
  def render_layers(svg, options)
57
58
  svg.g(:id => 'graphs', :transform => "translate(#{GRAPH_VIEWPORT[:x] * options[:size][0]},#{GRAPH_VIEWPORT[:y] * options[:size][1]})") {
59
+ options[:legend_information] = {}
60
+
58
61
  options[:layers].each_with_index do |layer, idx|
59
62
 
60
63
  layer_options = {}
@@ -74,6 +77,7 @@ module Scruffy
74
77
 
75
78
  svg.g {
76
79
  layer.render(svg, layer_options)
80
+ (options[:legend_information][layer.title] = layer.color) unless layer.title.nil?
77
81
  }
78
82
  end
79
83
  }
@@ -111,6 +115,28 @@ module Scruffy
111
115
  }
112
116
  end
113
117
  end
118
+
119
+ def render_legend(svg, options)
120
+ scaled = options[:resolver]
121
+
122
+ active_width = scaled.to_point(100) * options[:legend_information].size
123
+
124
+ svg.g(:transform => "translate(#{(options[:size][0] * 0.5) - (active_width * 0.5) + scaled.to_point(50)}, #{options[:size][1] * 0.12})") {
125
+ point_distance = scaled.to_point(100)
126
+ points = (0...options[:legend_information].size).map { |idx| idx * point_distance }
127
+
128
+
129
+ points.each_with_index do |point, idx|
130
+ svg.rect(:x => point, :y => scaled.to_point(18),
131
+ :width => scaled.to_point(13), :height => scaled.to_point(13),
132
+ :fill => options[:legend_information].values[idx])
133
+ svg.text( options[:legend_information].keys[idx], :x => point + scaled.to_point(25),
134
+ :y => scaled.to_point(30), 'font-size' => scaled.to_point(15),
135
+ :fill => (options[:theme][:marker] || 'white'))
136
+
137
+ end
138
+ }
139
+ end
114
140
 
115
141
  def render_title(svg, options)
116
142
  svg.g(:transform => "translate(0, #{options[:size][1] * 0.09})") {
@@ -1,3 +1,3 @@
1
1
  module Scruffy
2
- VERSION = '0.0.12'
2
+ VERSION = '0.1.0'
3
3
  end
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: scruffy
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.12
6
+ version: 0.1.0
7
7
  date: 2006-08-10 00:00:00 -07:00
8
8
  summary: A powerful, clean graphing library for Ruby.
9
9
  require_paths:
@@ -36,6 +36,7 @@ files:
36
36
  - lib/scruffy.rb
37
37
  - lib/scruffy/graph.rb
38
38
  - lib/scruffy/layers.rb
39
+ - lib/scruffy/rasterizers.rb
39
40
  - lib/scruffy/resolver.rb
40
41
  - lib/scruffy/themes.rb
41
42
  - lib/scruffy/transformer.rb
@@ -46,6 +47,7 @@ files:
46
47
  - lib/scruffy/layers/bar.rb
47
48
  - lib/scruffy/layers/base.rb
48
49
  - lib/scruffy/layers/line.rb
50
+ - lib/scruffy/rasterizers/rmagick_rasterizer.rb
49
51
  - lib/scruffy/renderers/standard.rb
50
52
  - spec/graph_spec.rb
51
53
  test_files: []