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 +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: []
|