ruport 0.4.99 → 0.5.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.
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: ruport
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.4.99
7
- date: 2006-08-14 00:00:00 -04:00
6
+ version: 0.5.0
7
+ date: 2006-08-28 00:00:00 -04:00
8
8
  summary: A generalized Ruby report generation and templating engine.
9
9
  require_paths:
10
10
  - lib
@@ -29,6 +29,7 @@ post_install_message:
29
29
  authors:
30
30
  - Gregory Brown
31
31
  files:
32
+ - examples/sample_invoice_report.rb
32
33
  - examples/fieldless_table.rb
33
34
  - examples/line_plotter.rb
34
35
  - examples/text_processors.rb
@@ -37,13 +38,10 @@ files:
37
38
  - examples/report.rb
38
39
  - examples/simple_mail.rb
39
40
  - examples/template.rb
40
- - examples/sample_invoice_report.rb
41
41
  - examples/line_graph.rb
42
- - examples/simple_graph.rb
43
42
  - lib/ruport
44
43
  - lib/ruport.rb
45
44
  - lib/uport.rb
46
- - lib/SVG
47
45
  - lib/ruport/query
48
46
  - lib/ruport/format
49
47
  - lib/ruport/rails
@@ -62,25 +60,16 @@ files:
62
60
  - lib/ruport/format/plugin.rb
63
61
  - lib/ruport/format/engine.rb
64
62
  - lib/ruport/rails/reportable.rb
65
- - lib/ruport/data/table.rb
66
63
  - lib/ruport/data/taggable.rb
64
+ - lib/ruport/data/table.rb
65
+ - lib/ruport/data/collection.rb
67
66
  - lib/ruport/data/record.rb
68
67
  - lib/ruport/data/set.rb~
69
- - lib/ruport/data/collection.rb
70
- - lib/ruport/data/set.rb
71
68
  - lib/ruport/data/set.rb.rej
69
+ - lib/ruport/data/set.rb
72
70
  - lib/ruport/report/invoice.rb
73
- - lib/SVG/Graph
74
- - lib/SVG/Graph/Pie.rb
75
- - lib/SVG/Graph/Plot.rb
76
- - lib/SVG/Graph/BarHorizontal.rb
77
- - lib/SVG/Graph/BarBase.rb
78
- - lib/SVG/Graph/Graph.rb
79
- - lib/SVG/Graph/Bar.rb
80
- - lib/SVG/Graph/Line.rb
81
- - lib/SVG/Graph/TimeSeries.rb
82
- - lib/SVG/Graph/Schedule.rb
83
71
  - test/samples
72
+ - test/_test_database.rb
84
73
  - test/test_set.rb.rej
85
74
  - test/test_record.rb
86
75
  - test/test_set.rb
@@ -91,20 +80,21 @@ files:
91
80
  - test/test_invoice.rb
92
81
  - test/test_plugin.rb
93
82
  - test/test_set.rb~
94
- - test/_test_database.rb
83
+ - test/test_sql_split.rb
95
84
  - test/test_graph.rb
96
85
  - test/unit.log
97
- - test/test_sql_split.rb
86
+ - test/test_meta_tools.rb
98
87
  - test/test_mailer.rb
99
88
  - test/test_query.rb
100
89
  - test/test_taggable.rb
101
90
  - test/test_report.rb
91
+ - test/test_plugin.rb.rej
102
92
  - test/test_format_engine.rb
103
- - test/test_meta_tools.rb
93
+ - test/test_collection.rb
94
+ - test/samples/stonecodeblog.sql
104
95
  - test/samples/ruport_test.sql
105
96
  - test/samples/test.yaml
106
97
  - test/samples/data.csv
107
- - test/samples/stonecodeblog.sql
108
98
  - test/samples/addressbook.csv
109
99
  - test/samples/document.xml
110
100
  - test/samples/test.sql
@@ -125,14 +115,15 @@ test_files:
125
115
  - test/test_ruport.rb
126
116
  - test/test_invoice.rb
127
117
  - test/test_plugin.rb
128
- - test/test_graph.rb
129
118
  - test/test_sql_split.rb
119
+ - test/test_graph.rb
120
+ - test/test_meta_tools.rb
130
121
  - test/test_mailer.rb
131
122
  - test/test_query.rb
132
123
  - test/test_taggable.rb
133
124
  - test/test_report.rb
134
125
  - test/test_format_engine.rb
135
- - test/test_meta_tools.rb
126
+ - test/test_collection.rb
136
127
  rdoc_options:
137
128
  - --title
138
129
  - Ruport Documentation
@@ -188,3 +179,12 @@ dependencies:
188
179
  - !ruby/object:Gem::Version
189
180
  version: 1.2.2
190
181
  version:
182
+ - !ruby/object:Gem::Dependency
183
+ name: scruffy
184
+ version_requirement:
185
+ version_requirements: !ruby/object:Gem::Version::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: 0.2.2
190
+ version:
@@ -1,8 +0,0 @@
1
- require "ruport"
2
- data = [[1,4,7,9]].to_table(%w[a b c d])
3
- data[0].tag "snickelfritz"
4
- graph = Ruport::Format.graph_object :plugin => :svg,
5
- :data => data
6
- graph.options = {:graph_style => :line, :graph_title => "Worms on Steriods", :show_graph_title => true }
7
- puts graph.render
8
-
data/lib/SVG/Graph/Bar.rb DELETED
@@ -1,137 +0,0 @@
1
- require 'rexml/document'
2
- require 'SVG/Graph/Graph'
3
- require 'SVG/Graph/BarBase'
4
-
5
- module SVG
6
- module Graph
7
- # === Create presentation quality SVG bar graphs easily
8
- #
9
- # = Synopsis
10
- #
11
- # require 'SVG/Graph/Bar'
12
- #
13
- # fields = %w(Jan Feb Mar);
14
- # data_sales_02 = [12, 45, 21]
15
- #
16
- # graph = SVG::Graph::Bar.new(
17
- # :height => 500,
18
- # :width => 300,
19
- # :fields => fields
20
- # )
21
- #
22
- # graph.add_data(
23
- # :data => data_sales_02,
24
- # :title => 'Sales 2002'
25
- # )
26
- #
27
- # print "Content-type: image/svg+xml\r\n\r\n"
28
- # print graph.burn
29
- #
30
- # = Description
31
- #
32
- # This object aims to allow you to easily create high quality
33
- # SVG[http://www.w3c.org/tr/svg bar graphs. You can either use the default
34
- # style sheet or supply your own. Either way there are many options which
35
- # can be configured to give you control over how the graph is generated -
36
- # with or without a key, data elements at each point, title, subtitle etc.
37
- #
38
- # = Notes
39
- #
40
- # The default stylesheet handles upto 12 data sets, if you
41
- # use more you must create your own stylesheet and add the
42
- # additional settings for the extra data sets. You will know
43
- # if you go over 12 data sets as they will have no style and
44
- # be in black.
45
- #
46
- # = Examples
47
- #
48
- # * http://germane-software.com/repositories/public/SVG/test/test.rb
49
- #
50
- # = See also
51
- #
52
- # * SVG::Graph::Graph
53
- # * SVG::Graph::BarHorizontal
54
- # * SVG::Graph::Line
55
- # * SVG::Graph::Pie
56
- # * SVG::Graph::Plot
57
- # * SVG::Graph::TimeSeries
58
- class Bar < BarBase
59
- include REXML
60
-
61
- # See Graph::initialize and BarBase::set_defaults
62
- def set_defaults
63
- super
64
- self.top_align = self.top_font = 1
65
- end
66
-
67
- protected
68
-
69
- def get_x_labels
70
- @config[:fields]
71
- end
72
-
73
- def get_y_labels
74
- maxvalue = max_value
75
- minvalue = min_value
76
- range = maxvalue - minvalue
77
-
78
- top_pad = range == 0 ? 10 : range / 20.0
79
- scale_range = (maxvalue + top_pad) - minvalue
80
-
81
- scale_division = scale_divisions || (scale_range / 10.0)
82
-
83
- if scale_integers
84
- scale_division = scale_division < 1 ? 1 : scale_division.round
85
- end
86
-
87
- rv = []
88
- maxvalue = maxvalue%scale_division == 0 ?
89
- maxvalue : maxvalue + scale_division
90
- minvalue.step( maxvalue, scale_division ) {|v| rv << v}
91
- return rv
92
- end
93
-
94
- def x_label_offset( width )
95
- width / 2.0
96
- end
97
-
98
- def draw_data
99
- fieldwidth = field_width
100
- maxvalue = max_value
101
- minvalue = min_value
102
-
103
- fieldheight = (@graph_height.to_f - font_size*2*top_font) /
104
- (get_y_labels.max - get_y_labels.min)
105
- bargap = bar_gap ? (fieldwidth < 10 ? fieldwidth / 2 : 10) : 0
106
-
107
- subbar_width = fieldwidth - bargap
108
- subbar_width /= @data.length if stack == :side
109
- x_mod = (@graph_width-bargap)/2 - (stack==:side ? subbar_width/2 : 0)
110
- # Y1
111
- p2 = @graph_height
112
- # to X2
113
- field_count = 0
114
- @config[:fields].each_index { |i|
115
- dataset_count = 0
116
- for dataset in @data
117
- # X1
118
- p1 = (fieldwidth * field_count)
119
- # to Y2
120
- p3 = @graph_height - ((dataset[:data][i] - minvalue) * fieldheight)
121
- p1 += subbar_width * dataset_count if stack == :side
122
- @graph.add_element( "path", {
123
- "class" => "fill#{dataset_count+1}",
124
- "d" => "M#{p1} #{p2} V#{p3} h#{subbar_width} V#{p2} Z"
125
- })
126
- make_datapoint_text(
127
- p1 + subbar_width/2.0,
128
- p3 - 6,
129
- dataset[:data][i].to_s)
130
- dataset_count += 1
131
- end
132
- field_count += 1
133
- }
134
- end
135
- end
136
- end
137
- end
@@ -1,140 +0,0 @@
1
- require 'rexml/document'
2
- require 'SVG/Graph/Graph'
3
-
4
- module SVG
5
- module Graph
6
- # = Synopsis
7
- #
8
- # A superclass for bar-style graphs. Do not attempt to instantiate
9
- # directly; use one of the subclasses instead.
10
- #
11
- # = Author
12
- #
13
- # Sean E. Russell <serATgermaneHYPHENsoftwareDOTcom>
14
- #
15
- # Copyright 2004 Sean E. Russell
16
- # This software is available under the Ruby license[LICENSE.txt]
17
- #
18
- class BarBase < SVG::Graph::Graph
19
- # Ensures that :fields are provided in the configuration.
20
- def initialize config
21
- raise "fields was not supplied or is empty" unless config[:fields] &&
22
- config[:fields].kind_of?(Array) &&
23
- config[:fields].length > 0
24
- super
25
- end
26
-
27
- # In addition to the defaults set in Graph::initialize, sets
28
- # [bar_gap] true
29
- # [stack] :overlap
30
- def set_defaults
31
- init_with( :bar_gap => true, :stack => :overlap )
32
- end
33
-
34
- # Whether to have a gap between the bars or not, default
35
- # is true, set to false if you don't want gaps.
36
- attr_accessor :bar_gap
37
- # How to stack data sets. :overlap overlaps bars with
38
- # transparent colors, :top stacks bars on top of one another,
39
- # :side stacks the bars side-by-side. Defaults to :overlap.
40
- attr_accessor :stack
41
-
42
-
43
- protected
44
-
45
- def max_value
46
- return @data.collect{|x| x[:data].max}.max
47
- end
48
-
49
- def min_value
50
- min = 0
51
-
52
- if (min_scale_value.nil? == false) then
53
- min = min_scale_value
54
- else
55
- min = @data.collect{|x| x[:data].min}.min
56
- end
57
-
58
- return min
59
- end
60
-
61
- def get_css
62
- return <<EOL
63
- /* default fill styles for multiple datasets (probably only use a single dataset on this graph though) */
64
- .key1,.fill1{
65
- fill: #ff0000;
66
- fill-opacity: 0.5;
67
- stroke: none;
68
- stroke-width: 0.5px;
69
- }
70
- .key2,.fill2{
71
- fill: #0000ff;
72
- fill-opacity: 0.5;
73
- stroke: none;
74
- stroke-width: 1px;
75
- }
76
- .key3,.fill3{
77
- fill: #00ff00;
78
- fill-opacity: 0.5;
79
- stroke: none;
80
- stroke-width: 1px;
81
- }
82
- .key4,.fill4{
83
- fill: #ffcc00;
84
- fill-opacity: 0.5;
85
- stroke: none;
86
- stroke-width: 1px;
87
- }
88
- .key5,.fill5{
89
- fill: #00ccff;
90
- fill-opacity: 0.5;
91
- stroke: none;
92
- stroke-width: 1px;
93
- }
94
- .key6,.fill6{
95
- fill: #ff00ff;
96
- fill-opacity: 0.5;
97
- stroke: none;
98
- stroke-width: 1px;
99
- }
100
- .key7,.fill7{
101
- fill: #00ffff;
102
- fill-opacity: 0.5;
103
- stroke: none;
104
- stroke-width: 1px;
105
- }
106
- .key8,.fill8{
107
- fill: #ffff00;
108
- fill-opacity: 0.5;
109
- stroke: none;
110
- stroke-width: 1px;
111
- }
112
- .key9,.fill9{
113
- fill: #cc6666;
114
- fill-opacity: 0.5;
115
- stroke: none;
116
- stroke-width: 1px;
117
- }
118
- .key10,.fill10{
119
- fill: #663399;
120
- fill-opacity: 0.5;
121
- stroke: none;
122
- stroke-width: 1px;
123
- }
124
- .key11,.fill11{
125
- fill: #339900;
126
- fill-opacity: 0.5;
127
- stroke: none;
128
- stroke-width: 1px;
129
- }
130
- .key12,.fill12{
131
- fill: #9966FF;
132
- fill-opacity: 0.5;
133
- stroke: none;
134
- stroke-width: 1px;
135
- }
136
- EOL
137
- end
138
- end
139
- end
140
- end
@@ -1,136 +0,0 @@
1
- require 'rexml/document'
2
- require 'SVG/Graph/BarBase'
3
-
4
- module SVG
5
- module Graph
6
- # === Create presentation quality SVG horitonzal bar graphs easily
7
- #
8
- # = Synopsis
9
- #
10
- # require 'SVG/Graph/BarHorizontal'
11
- #
12
- # fields = %w(Jan Feb Mar)
13
- # data_sales_02 = [12, 45, 21]
14
- #
15
- # graph = SVG::Graph::BarHorizontal.new({
16
- # :height => 500,
17
- # :width => 300,
18
- # :fields => fields,
19
- # })
20
- #
21
- # graph.add_data({
22
- # :data => data_sales_02,
23
- # :title => 'Sales 2002',
24
- # })
25
- #
26
- # print "Content-type: image/svg+xml\r\n\r\n"
27
- # print graph.burn
28
- #
29
- # = Description
30
- #
31
- # This object aims to allow you to easily create high quality
32
- # SVG horitonzal bar graphs. You can either use the default style sheet
33
- # or supply your own. Either way there are many options which can
34
- # be configured to give you control over how the graph is
35
- # generated - with or without a key, data elements at each point,
36
- # title, subtitle etc.
37
- #
38
- # = Examples
39
- #
40
- # * http://germane-software.com/repositories/public/SVG/test/test.rb
41
- #
42
- # = See also
43
- #
44
- # * SVG::Graph::Graph
45
- # * SVG::Graph::Bar
46
- # * SVG::Graph::Line
47
- # * SVG::Graph::Pie
48
- # * SVG::Graph::Plot
49
- # * SVG::Graph::TimeSeries
50
- #
51
- # == Author
52
- #
53
- # Sean E. Russell <serATgermaneHYPHENsoftwareDOTcom>
54
- #
55
- # Copyright 2004 Sean E. Russell
56
- # This software is available under the Ruby license[LICENSE.txt]
57
- #
58
- class BarHorizontal < BarBase
59
- # In addition to the defaults set in BarBase::set_defaults, sets
60
- # [rotate_y_labels] true
61
- # [show_x_guidelines] true
62
- # [show_y_guidelines] false
63
- def set_defaults
64
- super
65
- init_with(
66
- :rotate_y_labels => true,
67
- :show_x_guidelines => true,
68
- :show_y_guidelines => false
69
- )
70
- self.right_align = self.right_font = 1
71
- end
72
-
73
- protected
74
-
75
- def get_x_labels
76
- maxvalue = max_value
77
- minvalue = min_value
78
- range = maxvalue - minvalue
79
- top_pad = range == 0 ? 10 : range / 20.0
80
- scale_range = (maxvalue + top_pad) - minvalue
81
-
82
- scale_division = scale_divisions || (scale_range / 10.0)
83
-
84
- if scale_integers
85
- scale_division = scale_division < 1 ? 1 : scale_division.round
86
- end
87
-
88
- rv = []
89
- maxvalue = maxvalue%scale_division == 0 ?
90
- maxvalue : maxvalue + scale_division
91
- minvalue.step( maxvalue, scale_division ) {|v| rv << v}
92
- return rv
93
- end
94
-
95
- def get_y_labels
96
- @config[:fields]
97
- end
98
-
99
- def y_label_offset( height )
100
- height / -2.0
101
- end
102
-
103
- def draw_data
104
- minvalue = min_value
105
- fieldheight = field_height
106
- fieldwidth = (@graph_width.to_f - font_size*2*right_font ) /
107
- (get_x_labels.max - get_x_labels.min )
108
- bargap = bar_gap ? (fieldheight < 10 ? fieldheight / 2 : 10) : 0
109
-
110
- subbar_height = fieldheight - bargap
111
- subbar_height /= @data.length if stack == :side
112
-
113
- field_count = 1
114
- y_mod = (subbar_height / 2) + (font_size / 2)
115
- @config[:fields].each_index { |i|
116
- dataset_count = 0
117
- for dataset in @data
118
- y = @graph_height - (fieldheight * field_count)
119
- y += (subbar_height * dataset_count) if stack == :side
120
- x = (dataset[:data][i] - minvalue) * fieldwidth
121
-
122
- @graph.add_element( "path", {
123
- "d" => "M0 #{y} H#{x} v#{subbar_height} H0 Z",
124
- "class" => "fill#{dataset_count+1}"
125
- })
126
- make_datapoint_text(
127
- x+5, y+y_mod, dataset[:data][i], "text-anchor: start; "
128
- )
129
- dataset_count += 1
130
- end
131
- field_count += 1
132
- }
133
- end
134
- end
135
- end
136
- end