scruffy 0.0.12 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +8 -1
- data/Rakefile +1 -1
- data/lib/scruffy.rb +1 -0
- data/lib/scruffy/graph.rb +8 -2
- data/lib/scruffy/layers/base.rb +8 -1
- data/lib/scruffy/rasterizers.rb +1 -0
- data/lib/scruffy/rasterizers/rmagick_rasterizer.rb +26 -0
- data/lib/scruffy/renderers/standard.rb +26 -0
- data/lib/scruffy/version.rb +1 -1
- metadata +3 -1
data/CHANGES
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
= Scruffy Changelog
|
2
2
|
|
3
|
-
Version 0.1.0
|
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/
|
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
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
|
-
|
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
|
data/lib/scruffy/layers/base.rb
CHANGED
@@ -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})") {
|
data/lib/scruffy/version.rb
CHANGED
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
|
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: []
|