ruport 0.7.1 → 0.7.2
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/AUTHORS +4 -2
- data/README +4 -3
- data/Rakefile +1 -1
- data/lib/ruport.rb +1 -4
- data/lib/ruport/config.rb +6 -11
- data/lib/ruport/data/collection.rb +8 -2
- data/lib/ruport/data/groupable.rb +0 -2
- data/lib/ruport/data/record.rb +0 -13
- data/lib/ruport/data/set.rb +0 -8
- data/lib/ruport/data/table.rb +1 -18
- data/lib/ruport/data/taggable.rb +1 -6
- data/lib/ruport/format/latex.rb +5 -8
- data/lib/ruport/format/pdf.rb +56 -0
- data/lib/ruport/format/plugin.rb +5 -0
- data/lib/ruport/format/svg.rb +26 -4
- data/lib/ruport/format/text.rb +25 -2
- data/lib/ruport/format/xml.rb +1 -1
- data/lib/ruport/generator.rb +1 -1
- data/lib/ruport/mailer.rb +1 -4
- data/lib/ruport/query.rb +0 -9
- data/lib/ruport/renderer.rb +15 -1
- data/lib/ruport/report.rb +5 -22
- data/test/test_mailer.rb +86 -24
- data/test/test_report.rb +72 -1
- data/test/test_table.rb +15 -0
- data/test/unit.log +7 -277
- metadata +34 -44
- data/lib/ruport.rb~ +0 -69
- data/lib/ruport/data.rb.rej +0 -5
- data/lib/ruport/data.rb~ +0 -1
- data/lib/ruport/data/record.rb~ +0 -236
- data/lib/ruport/data/table.rb.rej +0 -67
- data/lib/ruport/data/table.rb~ +0 -414
- data/test/test_query.rb.rej +0 -161
- data/test/test_query.rb~ +0 -337
- data/test/test_record.rb.rej +0 -46
- data/test/test_table.rb~ +0 -336
data/AUTHORS
CHANGED
@@ -35,9 +35,11 @@ Daniel Berger:
|
|
35
35
|
Marshall T. Vandegrift:
|
36
36
|
- Fixed a bug in Record's struct-like accessors (method_missing)
|
37
37
|
- Provided performance enhancements and tests for query.rb
|
38
|
+
- Improved alignment for Text Tables.
|
38
39
|
|
39
40
|
Stefan Mahlitz:
|
40
41
|
- Table#sort_rows_by
|
41
42
|
|
42
|
-
|
43
|
-
-
|
43
|
+
Mike Milner:
|
44
|
+
- mock object for Mailer
|
45
|
+
- mock objects for Report (#130)
|
data/README
CHANGED
@@ -109,14 +109,14 @@
|
|
109
109
|
# up to date information.
|
110
110
|
#
|
111
111
|
# - You can sign up and/or view the archives here:
|
112
|
-
#
|
112
|
+
# http://groups.google.com/group/ruby-reports
|
113
113
|
#
|
114
114
|
# Please do not hesitate to use this list! I am happily accepting patches and
|
115
115
|
# documentation, as well as encouraging design discussions and also am quite
|
116
116
|
# curious about what people use or want to use ruport for.
|
117
117
|
#
|
118
118
|
# I will announce Ruport releases on RubyTalk, on the Ruport mailing list, on
|
119
|
-
# Freshmeat, and
|
119
|
+
# Freshmeat, and RAA. If you would like to
|
120
120
|
# keep an eye out for releases, please monitor one of those places.
|
121
121
|
#
|
122
122
|
# - You may download Ruport's source from the project page:
|
@@ -125,7 +125,8 @@
|
|
125
125
|
# - The latest stable API documentation is available at:
|
126
126
|
# http://reporting.stonecode.org/docs
|
127
127
|
#
|
128
|
-
# There also
|
128
|
+
# There are also some tutorial available:
|
129
|
+
# http://stonecode.svnrepository.com/ruport/trac.cgi/wiki/TutorialsAndArticles
|
129
130
|
#
|
130
131
|
# If you are interested in developing Ruport, please *never* study code in
|
131
132
|
# official releases. As this software is in it's early stages, it's essential
|
data/Rakefile
CHANGED
@@ -23,7 +23,7 @@ end
|
|
23
23
|
|
24
24
|
spec = Gem::Specification.new do |spec|
|
25
25
|
spec.name = LEAN ? "lean-ruport" : "ruport"
|
26
|
-
spec.version = "0.7.
|
26
|
+
spec.version = "0.7.2"
|
27
27
|
spec.platform = Gem::Platform::RUBY
|
28
28
|
spec.summary = "A generalized Ruby report generation and templating engine."
|
29
29
|
spec.files = Dir.glob("{examples,lib,test,bin}/**/**/*") +
|
data/lib/ruport.rb
CHANGED
@@ -9,12 +9,10 @@
|
|
9
9
|
#
|
10
10
|
# See LICENSE and COPYING for details
|
11
11
|
#
|
12
|
-
|
13
12
|
module Ruport
|
14
13
|
|
15
|
-
VERSION = "0.7.
|
14
|
+
VERSION = "0.7.2"
|
16
15
|
|
17
|
-
#
|
18
16
|
# This method is Ruport's logging and error interface. It can generate
|
19
17
|
# warnings or raise fatal errors, logging +message+ to the file defined by
|
20
18
|
# <tt>Config::log_file</tt>.
|
@@ -54,7 +52,6 @@ module Ruport
|
|
54
52
|
# Alias for <tt>Ruport.log</tt>.
|
55
53
|
def self.complain(*args); Ruport.log(*args) end
|
56
54
|
|
57
|
-
#
|
58
55
|
# This method yields a <tt>Ruport::Config</tt> object, allowing you to
|
59
56
|
# set the configuration options for your application.
|
60
57
|
#
|
data/lib/ruport/config.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
require "ostruct"
|
13
13
|
module Ruport
|
14
|
-
|
14
|
+
|
15
15
|
# === Overview
|
16
16
|
#
|
17
17
|
# This class serves as the configuration system for Ruport.
|
@@ -29,7 +29,7 @@ module Ruport
|
|
29
29
|
# Ruport.configure do |config|
|
30
30
|
#
|
31
31
|
# config.log_file 'foo.log'
|
32
|
-
# config.
|
32
|
+
# config.debug_mode = true
|
33
33
|
#
|
34
34
|
# config.source :default,
|
35
35
|
# :dsn => "dbi:mysql:somedb:db.blixy.org",
|
@@ -69,7 +69,7 @@ module Ruport
|
|
69
69
|
#
|
70
70
|
module Config
|
71
71
|
module_function
|
72
|
-
|
72
|
+
|
73
73
|
# :call-seq:
|
74
74
|
# source(source_name, options)
|
75
75
|
#
|
@@ -96,13 +96,12 @@ module Ruport
|
|
96
96
|
check_source(sources[args.first],args.first)
|
97
97
|
end
|
98
98
|
|
99
|
-
#
|
100
99
|
# :call-seq:
|
101
100
|
# mailer(mailer_name, options)
|
102
101
|
#
|
103
102
|
# Creates or retrieves a mailer configuration. Available options:
|
104
103
|
# <b><tt>:host</tt></b>:: The SMTP host to use.
|
105
|
-
# <b><tt>:address</tt></b>::
|
104
|
+
# <b><tt>:address</tt></b>:: Address the email is being sent from.
|
106
105
|
# <b><tt>:user</tt></b>:: The username to use on the SMTP server
|
107
106
|
# <b><tt>:password</tt></b>:: The password to use on the SMTP server.
|
108
107
|
# Optional.
|
@@ -160,12 +159,7 @@ module Ruport
|
|
160
159
|
# Returns the currently active logger.
|
161
160
|
def logger; @logger; end
|
162
161
|
|
163
|
-
#
|
164
|
-
# def enable_paranoia; @paranoid = true; end
|
165
|
-
|
166
|
-
# Disables the printing of <tt>:log_only</tt> messages.
|
167
|
-
#def disable_paranoia; @paranoid = false; end
|
168
|
-
|
162
|
+
# returns true if in debug mode
|
169
163
|
def debug_mode?; !!@debug_mode; end
|
170
164
|
|
171
165
|
# Verifies that you have provided a DSN for your source.
|
@@ -190,6 +184,7 @@ module Ruport
|
|
190
184
|
end
|
191
185
|
end
|
192
186
|
|
187
|
+
# forces messages with :level of :log_only to be printed
|
193
188
|
def debug_mode=(something)
|
194
189
|
@debug_mode = !!something
|
195
190
|
end
|
@@ -6,7 +6,6 @@
|
|
6
6
|
|
7
7
|
module Ruport::Data
|
8
8
|
|
9
|
-
#
|
10
9
|
# === Overview
|
11
10
|
#
|
12
11
|
# This is the base class for Ruport's Data structures. It mixes in the
|
@@ -26,8 +25,14 @@ module Ruport::Data
|
|
26
25
|
# A simple formatting tool which allows you to quickly generate a formatted
|
27
26
|
# table from a <tt>Collection</tt> object.
|
28
27
|
#
|
29
|
-
#
|
28
|
+
# If given a block, the Renderer::Table object will be yielded
|
29
|
+
#
|
30
|
+
#
|
31
|
+
# Examples:
|
32
|
+
#
|
30
33
|
# my_collection.as(:csv) #=> "1,2,3\n4,5,6"
|
34
|
+
#
|
35
|
+
# my_collection.as(:csv) { |e| e.layout.show_table_headers = false }
|
31
36
|
def as(type)
|
32
37
|
Ruport::Renderer::Table.render(type) do |rend|
|
33
38
|
rend.data = self
|
@@ -47,6 +52,7 @@ module Ruport::Data
|
|
47
52
|
|
48
53
|
# Provides a shortcut for the <tt>as()</tt> method by converting a call to
|
49
54
|
# <tt>as(:format_name)</tt> into a call to <tt>to_format_name</tt>
|
55
|
+
#
|
50
56
|
def method_missing(id,*args)
|
51
57
|
return as($1.to_sym) if id.to_s =~ /^to_(.*)/
|
52
58
|
super
|
@@ -8,7 +8,6 @@ module Ruport::Data
|
|
8
8
|
#
|
9
9
|
module Groupable
|
10
10
|
|
11
|
-
#
|
12
11
|
# Creates a <tt>Record</tt> made up of <tt>Table</tt>s containing all the
|
13
12
|
# records in the original table with the same tag.
|
14
13
|
#
|
@@ -54,7 +53,6 @@ module Ruport::Data
|
|
54
53
|
end; r
|
55
54
|
end
|
56
55
|
|
57
|
-
#
|
58
56
|
# Tags each row of the <tt>Table</tt> for which the <tt>block</tt> is not
|
59
57
|
# false with <tt>label</tt>.
|
60
58
|
#
|
data/lib/ruport/data/record.rb
CHANGED
@@ -5,7 +5,6 @@
|
|
5
5
|
# Copyright 2006 by respective content owners, all rights reserved.
|
6
6
|
module Ruport::Data
|
7
7
|
|
8
|
-
#
|
9
8
|
# === Overview
|
10
9
|
#
|
11
10
|
# Data::Records are the work horse of Ruport's data model. These can behave
|
@@ -18,7 +17,6 @@ module Ruport::Data
|
|
18
17
|
include Enumerable
|
19
18
|
include Taggable
|
20
19
|
|
21
|
-
#
|
22
20
|
# Creates a new Record object. If the <tt>:attributes</tt>
|
23
21
|
# keyword is specified, Hash-like and Struct-like
|
24
22
|
# access will be enabled. Otherwise, Record elements may be
|
@@ -64,7 +62,6 @@ module Ruport::Data
|
|
64
62
|
|
65
63
|
def_delegators :@data,:each, :length
|
66
64
|
|
67
|
-
#
|
68
65
|
# Allows either Array or Hash-like indexing.
|
69
66
|
#
|
70
67
|
# Examples:
|
@@ -83,8 +80,6 @@ module Ruport::Data
|
|
83
80
|
end
|
84
81
|
end
|
85
82
|
|
86
|
-
|
87
|
-
#
|
88
83
|
# Allows setting a <tt>value</tt> at an <tt>index</tt>.
|
89
84
|
#
|
90
85
|
# Examples:
|
@@ -103,7 +98,6 @@ module Ruport::Data
|
|
103
98
|
end
|
104
99
|
end
|
105
100
|
|
106
|
-
#
|
107
101
|
# If <tt>attributes</tt> and <tt>data</tt> are equivalent, then
|
108
102
|
# <tt>==</tt> evaluates to true. Otherwise, <tt>==</tt> returns false.
|
109
103
|
#
|
@@ -115,7 +109,6 @@ module Ruport::Data
|
|
115
109
|
|
116
110
|
alias_method :eql?, :==
|
117
111
|
|
118
|
-
#
|
119
112
|
# Converts a Record into an Array.
|
120
113
|
#
|
121
114
|
# Example:
|
@@ -125,7 +118,6 @@ module Ruport::Data
|
|
125
118
|
#
|
126
119
|
def to_a; @data.dup; end
|
127
120
|
|
128
|
-
#
|
129
121
|
# Converts a Record into a Hash. This only works if <tt>attributes</tt>
|
130
122
|
# are specified in the Record.
|
131
123
|
#
|
@@ -135,7 +127,6 @@ module Ruport::Data
|
|
135
127
|
# a.to_h #=> {"a" => 1, "b" => 2}
|
136
128
|
def to_h; Hash[*@attributes.zip(data).flatten] end
|
137
129
|
|
138
|
-
#
|
139
130
|
# Returns a copy of the <tt>attributes</tt> from this Record.
|
140
131
|
#
|
141
132
|
# Example:
|
@@ -145,7 +136,6 @@ module Ruport::Data
|
|
145
136
|
#
|
146
137
|
def attributes; @attributes.map { |a| a.to_s }; end
|
147
138
|
|
148
|
-
#
|
149
139
|
# Sets the <tt>attribute</tt> list for this Record.
|
150
140
|
#
|
151
141
|
# Example:
|
@@ -154,7 +144,6 @@ module Ruport::Data
|
|
154
144
|
#
|
155
145
|
attr_writer :attributes
|
156
146
|
|
157
|
-
#
|
158
147
|
# Allows you to change the order of or reduce the number of columns in a
|
159
148
|
# Record.
|
160
149
|
#
|
@@ -202,7 +191,6 @@ module Ruport::Data
|
|
202
191
|
#FIXME: This does not take into account frozen / tainted state
|
203
192
|
alias_method :clone, :dup
|
204
193
|
|
205
|
-
#
|
206
194
|
# Provides a unique hash value. If a Record contains the same data and
|
207
195
|
# attributes as another Record, they will hash to the same value, even if
|
208
196
|
# they are not the same object. This is similar to the way Array works,
|
@@ -212,7 +200,6 @@ module Ruport::Data
|
|
212
200
|
(attributes.to_a + data.to_a).hash
|
213
201
|
end
|
214
202
|
|
215
|
-
#
|
216
203
|
# Provides accessor style methods for attribute access.
|
217
204
|
#
|
218
205
|
# Example:
|
data/lib/ruport/data/set.rb
CHANGED
@@ -7,7 +7,6 @@ require 'set'
|
|
7
7
|
|
8
8
|
module Ruport::Data
|
9
9
|
|
10
|
-
#
|
11
10
|
# === Overview
|
12
11
|
#
|
13
12
|
# This class is one of the core classes for building and working with data
|
@@ -23,7 +22,6 @@ module Ruport::Data
|
|
23
22
|
#
|
24
23
|
class Set < Collection
|
25
24
|
|
26
|
-
#
|
27
25
|
# Creates a new Set containing the elements of <tt>options[:data]</tt>.
|
28
26
|
#
|
29
27
|
# Example:
|
@@ -35,7 +33,6 @@ module Ruport::Data
|
|
35
33
|
options[:data].each {|e| self << e} if options[:data]
|
36
34
|
end
|
37
35
|
|
38
|
-
#
|
39
36
|
# Adds the given object to the Set and returns self.
|
40
37
|
#
|
41
38
|
# Example:
|
@@ -54,7 +51,6 @@ module Ruport::Data
|
|
54
51
|
end
|
55
52
|
alias_method :<<, :add
|
56
53
|
|
57
|
-
#
|
58
54
|
# Produces a shallow copy of the Set: the same data elements are
|
59
55
|
# referenced by both the old and new Sets.
|
60
56
|
#
|
@@ -73,7 +69,6 @@ module Ruport::Data
|
|
73
69
|
end
|
74
70
|
alias_method :clone, :dup
|
75
71
|
|
76
|
-
#
|
77
72
|
# Two Sets are equal if they contain the same set of objects.
|
78
73
|
#
|
79
74
|
# Example:
|
@@ -102,7 +97,6 @@ module Ruport::Data
|
|
102
97
|
alias_method :union, :|
|
103
98
|
alias_method :+, :|
|
104
99
|
|
105
|
-
#
|
106
100
|
# Returns a new Set containing the objects common to the two Sets.
|
107
101
|
#
|
108
102
|
# Example:
|
@@ -118,7 +112,6 @@ module Ruport::Data
|
|
118
112
|
end
|
119
113
|
alias_method :intersection, :&
|
120
114
|
|
121
|
-
#
|
122
115
|
# Returns a new Set containing those objects present in this Set but not
|
123
116
|
# the other.
|
124
117
|
#
|
@@ -135,7 +128,6 @@ module Ruport::Data
|
|
135
128
|
end
|
136
129
|
alias_method :difference, :-
|
137
130
|
|
138
|
-
#
|
139
131
|
# Returns a new Set containing those objects that are either in this Set
|
140
132
|
# or the other Set but not in both.
|
141
133
|
#
|
data/lib/ruport/data/table.rb
CHANGED
@@ -7,7 +7,6 @@
|
|
7
7
|
|
8
8
|
module Ruport::Data
|
9
9
|
|
10
|
-
#
|
11
10
|
# === Overview
|
12
11
|
#
|
13
12
|
# This class is one of the core classes for building and working with data
|
@@ -24,7 +23,6 @@ module Ruport::Data
|
|
24
23
|
class Table < Collection
|
25
24
|
include Groupable
|
26
25
|
|
27
|
-
#
|
28
26
|
# Creates a new table based on the supplied options.
|
29
27
|
# Valid options:
|
30
28
|
# <b><tt>:data</tt></b>:: An Array of Arrays representing the
|
@@ -41,7 +39,7 @@ module Ruport::Data
|
|
41
39
|
@data = []
|
42
40
|
if options[:data]
|
43
41
|
if options[:data].all? { |r| r.kind_of? Record }
|
44
|
-
record_tags = options[:data].map { |r| r.tags }
|
42
|
+
record_tags = options[:data].map { |r| r.tags.dup }
|
45
43
|
options[:data] = options[:data].map { |r| r.to_a }
|
46
44
|
end
|
47
45
|
options[:data].each { |e| self << e }
|
@@ -53,7 +51,6 @@ module Ruport::Data
|
|
53
51
|
attr_reader :column_names
|
54
52
|
def_delegator :@data, :[]
|
55
53
|
|
56
|
-
#
|
57
54
|
# Sets the column names for this table. <tt>new_column_names</tt> should
|
58
55
|
# be an array listing the names of the columns.
|
59
56
|
#
|
@@ -68,7 +65,6 @@ module Ruport::Data
|
|
68
65
|
@column_names.replace(new_column_names.dup)
|
69
66
|
end
|
70
67
|
|
71
|
-
#
|
72
68
|
# Compares this Table to another Table and returns <tt>true</tt> if
|
73
69
|
# both the <tt>data</tt> and <tt>column_names</tt> are equal.
|
74
70
|
#
|
@@ -88,7 +84,6 @@ module Ruport::Data
|
|
88
84
|
|
89
85
|
alias_method :==, :eql?
|
90
86
|
|
91
|
-
#
|
92
87
|
# Uses Ruport's built-in text plugin to render this Table into a String
|
93
88
|
#
|
94
89
|
# Example:
|
@@ -101,7 +96,6 @@ module Ruport::Data
|
|
101
96
|
as(:text)
|
102
97
|
end
|
103
98
|
|
104
|
-
#
|
105
99
|
# Used to add extra data to the Table. <tt>other</tt> can be an Array,
|
106
100
|
# Hash or Record.
|
107
101
|
#
|
@@ -131,7 +125,6 @@ module Ruport::Data
|
|
131
125
|
self
|
132
126
|
end
|
133
127
|
|
134
|
-
#
|
135
128
|
# Used to combine two Tables. Throws an ArgumentError if the Tables don't
|
136
129
|
# have identical columns.
|
137
130
|
#
|
@@ -151,7 +144,6 @@ module Ruport::Data
|
|
151
144
|
Table.new(:column_names => @column_names, :data => @data + other.data)
|
152
145
|
end
|
153
146
|
|
154
|
-
#
|
155
147
|
# Reorders the columns that exist in the Table. Modifies this Table
|
156
148
|
# in-place.
|
157
149
|
#
|
@@ -179,7 +171,6 @@ module Ruport::Data
|
|
179
171
|
}; self
|
180
172
|
end
|
181
173
|
|
182
|
-
#
|
183
174
|
# Returns a copy of the Table with its columns in the requested order.
|
184
175
|
#
|
185
176
|
# Example:
|
@@ -193,7 +184,6 @@ module Ruport::Data
|
|
193
184
|
dup.reorder!(*indices)
|
194
185
|
end
|
195
186
|
|
196
|
-
#
|
197
187
|
# Adds an extra column to the Table. Available Options:
|
198
188
|
#
|
199
189
|
# <b><tt>:name</tt></b>:: The new column's name (required)
|
@@ -216,7 +206,6 @@ module Ruport::Data
|
|
216
206
|
end; self
|
217
207
|
end
|
218
208
|
|
219
|
-
#
|
220
209
|
# Removes a column from the Table. Any values in the specified column are
|
221
210
|
# lost.
|
222
211
|
#
|
@@ -244,7 +233,6 @@ module Ruport::Data
|
|
244
233
|
reorder! column_names - [name]
|
245
234
|
end
|
246
235
|
|
247
|
-
#
|
248
236
|
# Create a copy of the Table: records will be copied as well.
|
249
237
|
#
|
250
238
|
# Example:
|
@@ -259,7 +247,6 @@ module Ruport::Data
|
|
259
247
|
return a
|
260
248
|
end
|
261
249
|
|
262
|
-
#
|
263
250
|
# Loads a CSV file directly into a Table using the FasterCSV library.
|
264
251
|
#
|
265
252
|
# Example:
|
@@ -277,7 +264,6 @@ module Ruport::Data
|
|
277
264
|
get_table_from_csv(:foreach, csv_file, options,&block)
|
278
265
|
end
|
279
266
|
|
280
|
-
#
|
281
267
|
# Creates a Table from a CSV string using FasterCSV. See Table.load for
|
282
268
|
# additional examples.
|
283
269
|
#
|
@@ -306,7 +292,6 @@ module Ruport::Data
|
|
306
292
|
end ; loaded_data
|
307
293
|
end
|
308
294
|
|
309
|
-
#
|
310
295
|
# Allows you to split Tables into multiple Tables for grouping.
|
311
296
|
#
|
312
297
|
# Example:
|
@@ -369,7 +354,6 @@ module Ruport::Data
|
|
369
354
|
end; rec
|
370
355
|
end
|
371
356
|
|
372
|
-
#
|
373
357
|
# Calculates sums. If a column name or index is given, it will try to
|
374
358
|
# convert each element of that column to an integer or float
|
375
359
|
# and add them together.
|
@@ -401,7 +385,6 @@ module Ruport::Data
|
|
401
385
|
|
402
386
|
alias_method :sum, :sigma
|
403
387
|
|
404
|
-
#
|
405
388
|
# Returns a sorted table. If col_names is specified,
|
406
389
|
# the block is ignored and the table is sorted by the named columns. All
|
407
390
|
# options are used in constructing the new Table (see Array#to_table
|