ruport 0.7.2 → 0.8.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/AUTHORS +7 -3
- data/Rakefile +8 -9
- data/TODO +16 -0
- data/examples/RWEmerson.jpg +0 -0
- data/examples/centered_pdf_text_box.rb +66 -0
- data/examples/invoice.rb +35 -25
- data/examples/invoice_report.rb +1 -1
- data/examples/line_plotter.rb +1 -1
- data/examples/pdf_table_with_title.rb +42 -0
- data/lib/ruport.rb +5 -7
- data/lib/ruport.rb.rej +41 -0
- data/lib/ruport.rb~ +85 -0
- data/lib/ruport/attempt.rb +59 -59
- data/lib/ruport/config.rb +15 -4
- data/lib/ruport/data.rb +0 -2
- data/lib/ruport/data/groupable.rb +25 -16
- data/lib/ruport/data/record.rb +128 -102
- data/lib/ruport/data/table.rb +352 -199
- data/lib/ruport/data/taggable.rb +18 -7
- data/lib/ruport/format/html.rb +3 -1
- data/lib/ruport/format/latex.rb +1 -1
- data/lib/ruport/format/latex.rb.rej +26 -0
- data/lib/ruport/format/latex.rb~ +47 -0
- data/lib/ruport/format/pdf.rb +111 -28
- data/lib/ruport/format/pdf.rb.rej +168 -0
- data/lib/ruport/format/pdf.rb~ +189 -0
- data/lib/ruport/format/plugin.rb +0 -5
- data/lib/ruport/format/svg.rb +4 -4
- data/lib/ruport/format/xml.rb +3 -3
- data/lib/ruport/generator.rb +66 -27
- data/lib/ruport/mailer.rb +4 -1
- data/lib/ruport/query.rb +13 -1
- data/lib/ruport/renderer.rb +89 -17
- data/lib/ruport/renderer/graph.rb +5 -5
- data/lib/ruport/renderer/table.rb +8 -9
- data/lib/ruport/report.rb +2 -6
- data/test/test_config.rb +88 -76
- data/test/{test_text_table.rb → test_format_text.rb} +4 -2
- data/test/test_groupable.rb +15 -13
- data/test/test_query.rb +6 -3
- data/test/test_record.rb +57 -33
- data/test/test_renderer.rb +77 -0
- data/test/test_report.rb +188 -181
- data/test/test_ruport.rb +5 -6
- data/test/test_table.rb +290 -190
- data/test/test_table_renderer.rb +56 -8
- data/test/test_taggable.rb +7 -8
- data/test/unit.log +259 -7
- metadata +22 -19
- data/lib/ruport/data/collection.rb +0 -65
- data/lib/ruport/data/set.rb +0 -148
- data/test/test_collection.rb +0 -30
- data/test/test_set.rb +0 -118
data/lib/ruport/query.rb
CHANGED
@@ -3,6 +3,7 @@ require "ruport/query/sql_split"
|
|
3
3
|
|
4
4
|
module Ruport
|
5
5
|
|
6
|
+
#
|
6
7
|
# === Overview
|
7
8
|
#
|
8
9
|
# Query offers a way to interact with databases via DBI. It supports
|
@@ -18,6 +19,7 @@ module Ruport
|
|
18
19
|
|
19
20
|
include Enumerable
|
20
21
|
|
22
|
+
#
|
21
23
|
# Queries are initialized with some SQL and a number of options that
|
22
24
|
# affect their operation. They are NOT executed at initialization. This
|
23
25
|
# is important to note as they will not query the database until either
|
@@ -96,6 +98,7 @@ module Ruport
|
|
96
98
|
@cached_data = nil
|
97
99
|
end
|
98
100
|
|
101
|
+
#
|
99
102
|
# Set this to <tt>true</tt> to get DBI:Rows, <tt>false</tt> to get Ruport
|
100
103
|
# constructs.
|
101
104
|
#
|
@@ -107,6 +110,7 @@ module Ruport
|
|
107
110
|
# The original SQL for the Query object
|
108
111
|
attr_reader :sql
|
109
112
|
|
113
|
+
#
|
110
114
|
# This will set the <tt>dsn</tt>, <tt>username</tt>, and <tt>password</tt>
|
111
115
|
# to one specified by a source in Ruport::Config.
|
112
116
|
#
|
@@ -116,18 +120,20 @@ module Ruport
|
|
116
120
|
@password = Ruport::Config.sources[label].password
|
117
121
|
end
|
118
122
|
|
123
|
+
#
|
119
124
|
# Standard <tt>each</tt> iterator, iterates through the result set row by
|
120
125
|
# row.
|
121
126
|
#
|
122
127
|
def each(&action)
|
123
128
|
Ruport.log(
|
124
129
|
"no block given!", :status => :fatal,
|
125
|
-
:level => :log_only, :
|
130
|
+
:level => :log_only, :raises => LocalJumpError
|
126
131
|
) unless action
|
127
132
|
fetch(&action)
|
128
133
|
self
|
129
134
|
end
|
130
135
|
|
136
|
+
#
|
131
137
|
# Grabs the result set as a Data::Table or an Array of DBI::Row objects
|
132
138
|
# if in <tt>raw_data</tt> mode.
|
133
139
|
#
|
@@ -141,6 +147,7 @@ module Ruport
|
|
141
147
|
@cached_data = nil
|
142
148
|
end
|
143
149
|
|
150
|
+
#
|
144
151
|
# Clears the contents of the cache, then runs the query, filling the
|
145
152
|
# cache with the new result.
|
146
153
|
#
|
@@ -149,6 +156,7 @@ module Ruport
|
|
149
156
|
clear_cache; fetch
|
150
157
|
end
|
151
158
|
|
159
|
+
#
|
152
160
|
# Turns on caching. New data will not be loaded until the cache is clear
|
153
161
|
# or caching is disabled.
|
154
162
|
#
|
@@ -162,6 +170,7 @@ module Ruport
|
|
162
170
|
@cache_enabled = false
|
163
171
|
end
|
164
172
|
|
173
|
+
#
|
165
174
|
# Returns a Data::Table, even if in <tt>raw_data</tt> mode.
|
166
175
|
# This doesn't work with raw data if the cache is enabled and filled.
|
167
176
|
#
|
@@ -183,9 +192,11 @@ module Ruport
|
|
183
192
|
private
|
184
193
|
|
185
194
|
def query_data(query_text, params=@params)
|
195
|
+
|
186
196
|
require "dbi"
|
187
197
|
|
188
198
|
data = @raw_data ? [] : Data::Table.new
|
199
|
+
|
189
200
|
DBI.connect(@dsn, @user, @password) do |dbh|
|
190
201
|
dbh.execute(query_text, *(params || [])) do |sth|
|
191
202
|
# Work-around for inconsistent DBD behavior w/ resultless queries
|
@@ -197,6 +208,7 @@ module Ruport
|
|
197
208
|
end
|
198
209
|
|
199
210
|
data.column_names = names unless @raw_data
|
211
|
+
|
200
212
|
sth.each do |row|
|
201
213
|
row = row.to_a
|
202
214
|
row = Data::Record.new(row, :attributes => names) unless @raw_data
|
data/lib/ruport/renderer.rb
CHANGED
@@ -14,6 +14,93 @@
|
|
14
14
|
# you do not need that, may not be relevant to study for your use of Ruport.
|
15
15
|
class Ruport::Renderer
|
16
16
|
module Helpers #:nodoc:
|
17
|
+
module ClassMethods
|
18
|
+
|
19
|
+
# establish some class instance variables for storing require data
|
20
|
+
attr_accessor :first_stage,:final_stage,:required_options,:stages
|
21
|
+
|
22
|
+
# allow the report designer to specify what method will
|
23
|
+
# render the report e.g.
|
24
|
+
# finalize :document
|
25
|
+
#
|
26
|
+
def finalize(stage)
|
27
|
+
raise 'final stage already defined' if final_stage
|
28
|
+
self.final_stage = stage
|
29
|
+
end
|
30
|
+
|
31
|
+
# allow the report designer to specify a preparation stage for their
|
32
|
+
# report, e.g.
|
33
|
+
#
|
34
|
+
# prepare :document
|
35
|
+
#
|
36
|
+
def prepare(stage)
|
37
|
+
raise "prepare stage already defined" if first_stage
|
38
|
+
self.first_stage = stage
|
39
|
+
end
|
40
|
+
|
41
|
+
# allow the report designer to specify options that can be used to build
|
42
|
+
# the report. These are generally used for defining rendering options or
|
43
|
+
# data
|
44
|
+
# e.g.
|
45
|
+
# option :report_title
|
46
|
+
# option :table_width
|
47
|
+
def option(opt)
|
48
|
+
opt = "#{opt.to_s}="
|
49
|
+
define_method(opt) {|t| options.send(opt, t) }
|
50
|
+
end
|
51
|
+
|
52
|
+
# allow the report designer to specify a compulsory option
|
53
|
+
# e.g.
|
54
|
+
# required_option :freight
|
55
|
+
# required_option :tax
|
56
|
+
def required_option(opt)
|
57
|
+
self.required_options ||= []
|
58
|
+
self.required_options << opt
|
59
|
+
option opt
|
60
|
+
end
|
61
|
+
|
62
|
+
# allow the report designer to specify the stages that will be used to
|
63
|
+
# build the report
|
64
|
+
# e.g.
|
65
|
+
# stage :document_header
|
66
|
+
# stage :document_body
|
67
|
+
# stage :document_footer
|
68
|
+
def stage(stage)
|
69
|
+
self.stages ||= []
|
70
|
+
self.stages << stage.to_s
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.included(base)
|
75
|
+
base.extend ClassMethods
|
76
|
+
end
|
77
|
+
|
78
|
+
# called automagically when the report is rendered. Uses the
|
79
|
+
# data collected from the earlier methods.
|
80
|
+
def run
|
81
|
+
# ensure all the required options have been set
|
82
|
+
unless self.class.required_options.nil?
|
83
|
+
self.class.required_options.each do |opt|
|
84
|
+
if options.__send__(opt).nil?
|
85
|
+
raise "Required option #{opt} not set"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
prepare self.class.first_stage if self.class.first_stage
|
91
|
+
|
92
|
+
# call each stage to build the report
|
93
|
+
unless self.class.stages.nil?
|
94
|
+
self.class.stages.each do |stage|
|
95
|
+
self.build stage
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
finalize self.class.final_stage if self.class.final_stage
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
|
17
104
|
def prepare(name)
|
18
105
|
maybe "prepare_#{name}"
|
19
106
|
end
|
@@ -33,8 +120,7 @@ class Ruport::Renderer
|
|
33
120
|
plugin.send something if plugin.respond_to? something
|
34
121
|
end
|
35
122
|
end
|
36
|
-
|
37
|
-
# Allows you to register a format with the renderer.
|
123
|
+
# allows you to register a format with the renderer.
|
38
124
|
#
|
39
125
|
# example:
|
40
126
|
#
|
@@ -45,13 +131,11 @@ class Ruport::Renderer
|
|
45
131
|
# SomeRenderer.add_format self, :my_plugin
|
46
132
|
#
|
47
133
|
# end
|
48
|
-
#
|
49
134
|
def self.add_format(format,name=nil)
|
50
135
|
return formats[name] = format if name
|
51
136
|
|
52
|
-
# NOTE: MEANT FOR INTERNAL USE
|
53
137
|
add_core_format(format)
|
54
|
-
|
138
|
+
end
|
55
139
|
|
56
140
|
|
57
141
|
# reader for formats. Defaults to a hash
|
@@ -61,7 +145,6 @@ class Ruport::Renderer
|
|
61
145
|
|
62
146
|
# same as Renderer#layout, but can be used to specify a default layout object
|
63
147
|
# for the entire class.
|
64
|
-
#
|
65
148
|
def self.layout
|
66
149
|
@layout ||= Ruport::Layout::Component.new
|
67
150
|
yield(@layout) if block_given?
|
@@ -76,7 +159,6 @@ class Ruport::Renderer
|
|
76
159
|
# The run() method is then called on the renderer method.
|
77
160
|
#
|
78
161
|
# Finally, the value of the plugin's output accessor is returned
|
79
|
-
#
|
80
162
|
def self.render(format,&block)
|
81
163
|
rend = build format, &block
|
82
164
|
rend.run
|
@@ -89,7 +171,6 @@ class Ruport::Renderer
|
|
89
171
|
# yielded.
|
90
172
|
#
|
91
173
|
# Returns the renderer instance.
|
92
|
-
#
|
93
174
|
def self.build(format)
|
94
175
|
rend = self.new
|
95
176
|
|
@@ -114,7 +195,6 @@ class Ruport::Renderer
|
|
114
195
|
end
|
115
196
|
|
116
197
|
# sets +data+ attribute on both the renderer and any active plugin
|
117
|
-
#
|
118
198
|
def data=(val)
|
119
199
|
@data = val.dup
|
120
200
|
plugin.data = @data if plugin
|
@@ -122,7 +202,6 @@ class Ruport::Renderer
|
|
122
202
|
|
123
203
|
# General purpose openstruct which is shared with the current formatting
|
124
204
|
# plugin.
|
125
|
-
#
|
126
205
|
def options
|
127
206
|
yield(plugin.options) if block_given?
|
128
207
|
plugin.options
|
@@ -135,7 +214,6 @@ class Ruport::Renderer
|
|
135
214
|
#
|
136
215
|
# when a block is given without block variables, instance_evals the block
|
137
216
|
# within the context of the plugin
|
138
|
-
#
|
139
217
|
def plugin(&block)
|
140
218
|
if block.nil?
|
141
219
|
return @plugin
|
@@ -159,7 +237,6 @@ class Ruport::Renderer
|
|
159
237
|
|
160
238
|
# tries to autoload and register a format which is part of the Ruport::Format
|
161
239
|
# module. For internal use only.
|
162
|
-
#
|
163
240
|
def self.add_core_format(format)
|
164
241
|
try_require(format)
|
165
242
|
|
@@ -170,14 +247,12 @@ class Ruport::Renderer
|
|
170
247
|
end
|
171
248
|
|
172
249
|
# internal shortcut for format registering
|
173
|
-
#
|
174
250
|
def self.add_formats(*formats)
|
175
251
|
formats.each { |f| add_format f }
|
176
252
|
end
|
177
253
|
|
178
254
|
# Trys to autoload a given format,
|
179
255
|
# silently fails
|
180
|
-
#
|
181
256
|
def self.try_require(format)
|
182
257
|
begin
|
183
258
|
require "ruport/format/#{format}"
|
@@ -187,20 +262,17 @@ class Ruport::Renderer
|
|
187
262
|
end
|
188
263
|
|
189
264
|
# selects a plugin for use by format name
|
190
|
-
#
|
191
265
|
def use_plugin(format)
|
192
266
|
self.plugin = self.class.formats[format].new
|
193
267
|
end
|
194
268
|
|
195
269
|
# provides a shortcut to render() to allow
|
196
270
|
# render(:csv) to become render_csv
|
197
|
-
#
|
198
271
|
def self.method_missing(id,*args,&block)
|
199
272
|
id.to_s =~ /^render_(.*)/
|
200
273
|
$1 ? render($1.to_sym,&block) : super
|
201
274
|
end
|
202
275
|
|
203
|
-
|
204
276
|
end
|
205
277
|
|
206
278
|
require "ruport/renderer/table"
|
@@ -20,7 +20,7 @@ module Ruport
|
|
20
20
|
# table.as(:text){ |r| r.rewrite_column("col1") { |a| a[0] + 5 }
|
21
21
|
# table.as(:csv) { |r| r.rewrite_column(2) { |a| a.capitalize }
|
22
22
|
def rewrite_column(key,&block)
|
23
|
-
data.each { |r| r[key] = block[r] }
|
23
|
+
data.to_a.each { |r| r[key] = block[r] }
|
24
24
|
end
|
25
25
|
|
26
26
|
# Gets the number of columns in a table. Useful in formatting plugins.
|
@@ -118,15 +118,14 @@ module Ruport
|
|
118
118
|
|
119
119
|
add_formats :csv, :text, :html, :latex, :pdf
|
120
120
|
|
121
|
-
layout
|
122
|
-
|
123
|
-
|
121
|
+
layout { |lay| lay.show_table_headers = true }
|
122
|
+
|
123
|
+
prepare :table
|
124
124
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
finalize :table
|
129
|
-
end
|
125
|
+
stage :table_header
|
126
|
+
stage :table_body
|
127
|
+
stage :table_footer
|
130
128
|
|
129
|
+
finalize :table
|
131
130
|
end
|
132
131
|
end
|
data/lib/ruport/report.rb
CHANGED
@@ -160,8 +160,8 @@ module Ruport
|
|
160
160
|
# Like Report#write, but will append to a file rather than overwrite it if
|
161
161
|
# the file already exists.
|
162
162
|
#
|
163
|
-
def append(my_file=file)
|
164
|
-
File.open(my_file,"a") { |f| f <<
|
163
|
+
def append(my_file=file,my_results=results)
|
164
|
+
File.open(my_file,"a") { |f| f << my_results }
|
165
165
|
end
|
166
166
|
|
167
167
|
# This method passes <tt>self</tt> to Report.run.
|
@@ -308,10 +308,6 @@ module Ruport
|
|
308
308
|
end
|
309
309
|
|
310
310
|
end
|
311
|
-
|
312
311
|
end
|
313
|
-
|
314
312
|
end
|
315
313
|
end
|
316
|
-
|
317
|
-
|
data/test/test_config.rb
CHANGED
@@ -1,76 +1,88 @@
|
|
1
|
-
require "test/unit"
|
2
|
-
require "ruport"
|
3
|
-
|
4
|
-
class TestConfiguration < Test::Unit::TestCase
|
5
|
-
|
6
|
-
def setup
|
7
|
-
Ruport::Config.log_file = "test/unit.log"
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_dsn_defaults
|
11
|
-
assert_equal(nil, Ruport::Config.default_source)
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_mail_defaults
|
15
|
-
assert_equal(nil, Ruport::Config.default_mailer)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_missing_dsn
|
19
|
-
assert_raise(ArgumentError) {
|
20
|
-
Ruport::Config.source :foo, :user => "root", :password => "fff"
|
21
|
-
}
|
22
|
-
assert_nothing_raised { Ruport::Config.source :bar, :dsn => "..." }
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_mailer_errors
|
26
|
-
assert_raise(ArgumentError) {
|
27
|
-
Ruport::Config.mailer :bar, :user => :foo, :address => "foo@bar.com"
|
28
|
-
}
|
29
|
-
assert_nothing_raised { Ruport::Config.mailer :bar, :host => "localhost" }
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_new_defaults
|
33
|
-
Ruport::Config.source :default, :dsn => "dbi:mysql:test",
|
34
|
-
:user => "root",
|
35
|
-
:password => ""
|
36
|
-
assert_equal("dbi:mysql:test", Ruport::Config.default_source.dsn)
|
37
|
-
assert_equal("root", Ruport::Config.default_source.user)
|
38
|
-
assert_equal("", Ruport::Config.default_source.password)
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_multiple_sources
|
42
|
-
Ruport::Config.source :foo, :dsn => "dbi:mysql:test"
|
43
|
-
Ruport::Config.source :bar, :dsn => "dbi:mysql:test2"
|
44
|
-
assert_equal("dbi:mysql:test", Ruport::Config.sources[:foo].dsn)
|
45
|
-
assert_equal("dbi:mysql:test2", Ruport::Config.sources[:bar].dsn)
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_simple_interface
|
49
|
-
Ruport.configure do |c|
|
50
|
-
c.source :foo, :dsn => "dbi:odbc:test"
|
51
|
-
c.source :bar, :dsn => "dbi:odbc:test2"
|
52
|
-
end
|
53
|
-
assert_equal("dbi:odbc:test",Ruport::Config.sources[:foo].dsn)
|
54
|
-
assert_equal("dbi:odbc:test2",Ruport::Config.sources[:bar].dsn)
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
def test_logger
|
59
|
-
# We have a logger running now, dont we?
|
60
|
-
assert(Ruport::Config.logger.kind_of?(Logger))
|
61
|
-
|
62
|
-
# And then we change are mind again. Back logging?
|
63
|
-
Ruport::Config.log_file = "test/unit.log"
|
64
|
-
assert(Ruport::Config.logger.kind_of?(Logger))
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_debug
|
69
|
-
assert_equal(false, Ruport::Config.debug_mode?)
|
70
|
-
Ruport::Config.debug_mode = true
|
71
|
-
assert_equal(true, Ruport::Config.debug_mode?)
|
72
|
-
Ruport::Config.debug_mode = false
|
73
|
-
assert_equal(false, Ruport::Config.debug_mode?)
|
74
|
-
end
|
75
|
-
|
76
|
-
|
1
|
+
require "test/unit"
|
2
|
+
require "ruport"
|
3
|
+
|
4
|
+
class TestConfiguration < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
Ruport::Config.log_file = "test/unit.log"
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_dsn_defaults
|
11
|
+
assert_equal(nil, Ruport::Config.default_source)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_mail_defaults
|
15
|
+
assert_equal(nil, Ruport::Config.default_mailer)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_missing_dsn
|
19
|
+
assert_raise(ArgumentError) {
|
20
|
+
Ruport::Config.source :foo, :user => "root", :password => "fff"
|
21
|
+
}
|
22
|
+
assert_nothing_raised { Ruport::Config.source :bar, :dsn => "..." }
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_mailer_errors
|
26
|
+
assert_raise(ArgumentError) {
|
27
|
+
Ruport::Config.mailer :bar, :user => :foo, :address => "foo@bar.com"
|
28
|
+
}
|
29
|
+
assert_nothing_raised { Ruport::Config.mailer :bar, :host => "localhost" }
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_new_defaults
|
33
|
+
Ruport::Config.source :default, :dsn => "dbi:mysql:test",
|
34
|
+
:user => "root",
|
35
|
+
:password => ""
|
36
|
+
assert_equal("dbi:mysql:test", Ruport::Config.default_source.dsn)
|
37
|
+
assert_equal("root", Ruport::Config.default_source.user)
|
38
|
+
assert_equal("", Ruport::Config.default_source.password)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_multiple_sources
|
42
|
+
Ruport::Config.source :foo, :dsn => "dbi:mysql:test"
|
43
|
+
Ruport::Config.source :bar, :dsn => "dbi:mysql:test2"
|
44
|
+
assert_equal("dbi:mysql:test", Ruport::Config.sources[:foo].dsn)
|
45
|
+
assert_equal("dbi:mysql:test2", Ruport::Config.sources[:bar].dsn)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_simple_interface
|
49
|
+
Ruport.configure do |c|
|
50
|
+
c.source :foo, :dsn => "dbi:odbc:test"
|
51
|
+
c.source :bar, :dsn => "dbi:odbc:test2"
|
52
|
+
end
|
53
|
+
assert_equal("dbi:odbc:test",Ruport::Config.sources[:foo].dsn)
|
54
|
+
assert_equal("dbi:odbc:test2",Ruport::Config.sources[:bar].dsn)
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def test_logger
|
59
|
+
# We have a logger running now, dont we?
|
60
|
+
assert(Ruport::Config.logger.kind_of?(Logger))
|
61
|
+
|
62
|
+
# And then we change are mind again. Back logging?
|
63
|
+
Ruport::Config.log_file = "test/unit.log"
|
64
|
+
assert(Ruport::Config.logger.kind_of?(Logger))
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_debug
|
69
|
+
assert_equal(false, Ruport::Config.debug_mode?)
|
70
|
+
Ruport::Config.debug_mode = true
|
71
|
+
assert_equal(true, Ruport::Config.debug_mode?)
|
72
|
+
Ruport::Config.debug_mode = false
|
73
|
+
assert_equal(false, Ruport::Config.debug_mode?)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_adding_custom_accessors
|
77
|
+
Ruport::Config.my_new_setting = 'blinky'
|
78
|
+
assert_equal('blinky', Ruport::Config.my_new_setting)
|
79
|
+
Ruport::Config.my_new_setting = 'clyde'
|
80
|
+
assert_equal('clyde', Ruport::Config.my_new_setting)
|
81
|
+
|
82
|
+
Ruport::Config.my_other_new_setting 'inky'
|
83
|
+
assert_equal('inky', Ruport::Config.my_other_new_setting)
|
84
|
+
Ruport::Config.my_other_new_setting 'sue'
|
85
|
+
assert_equal('sue', Ruport::Config.my_other_new_setting)
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|