lean-ruport 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of lean-ruport might be problematic. Click here for more details.
- data/ACKNOWLEDGEMENTS +33 -0
- data/AUTHORS +19 -0
- data/CHANGELOG +206 -0
- data/COPYING +340 -0
- data/LICENSE +7 -0
- data/README +209 -0
- data/Rakefile +54 -0
- data/TODO +27 -0
- data/lib/ruport.rb +58 -0
- data/lib/ruport/config.rb +114 -0
- data/lib/ruport/data_row.rb +144 -0
- data/lib/ruport/data_set.rb +221 -0
- data/lib/ruport/format.rb +116 -0
- data/lib/ruport/format/builder.rb +89 -0
- data/lib/ruport/format/document.rb +77 -0
- data/lib/ruport/format/open_node.rb +36 -0
- data/lib/ruport/parser.rb +202 -0
- data/lib/ruport/query.rb +208 -0
- data/lib/ruport/query/sql_split.rb +33 -0
- data/lib/ruport/report.rb +116 -0
- data/lib/ruport/report/mailer.rb +48 -0
- data/test/samples/addressbook.csv +6 -0
- data/test/samples/car_ads.txt +505 -0
- data/test/samples/data.csv +3 -0
- data/test/samples/document.xml +22 -0
- data/test/samples/five_lines.txt +5 -0
- data/test/samples/five_paragraphs.txt +9 -0
- data/test/samples/ross_report.txt +58530 -0
- data/test/samples/ruport_test.sql +8 -0
- data/test/samples/stonecodeblog.sql +279 -0
- data/test/samples/test.sql +2 -0
- data/test/samples/test.yaml +3 -0
- data/test/tc_builder.rb +116 -0
- data/test/tc_config.rb +41 -0
- data/test/tc_data_row.rb +36 -0
- data/test/tc_data_set.rb +141 -0
- data/test/tc_database.rb +25 -0
- data/test/tc_document.rb +42 -0
- data/test/tc_element.rb +18 -0
- data/test/tc_page.rb +42 -0
- data/test/tc_query.rb +55 -0
- data/test/tc_reading.rb +60 -0
- data/test/tc_report.rb +31 -0
- data/test/tc_section.rb +45 -0
- data/test/tc_sql_split.rb +18 -0
- data/test/tc_state.rb +142 -0
- data/test/ts_all.rb +9 -0
- data/test/ts_format.rb +5 -0
- data/test/ts_parser.rb +10 -0
- metadata +102 -0
data/LICENSE
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
= License Terms
|
2
|
+
|
3
|
+
Distributed under the user's choice of the GPL[http://www.gnu.org/copyleft/gpl.html] (see COPYING for details) or the
|
4
|
+
{Ruby software license}[http://www.ruby-lang.org/en/LICENSE.txt] by Gregory Brown.
|
5
|
+
|
6
|
+
Please email Greg[mailto:gregory.t.brown_AT_gmail.com] with any questions.
|
7
|
+
|
data/README
ADDED
@@ -0,0 +1,209 @@
|
|
1
|
+
# ------------------------------------------------------------------------
|
2
|
+
# The <em>true story</em> behind Ruby Reports...
|
3
|
+
#
|
4
|
+
# ------ __________________ -------
|
5
|
+
# / \ o ( I miss pacman... ) / \
|
6
|
+
# o | O O | o o o ------------------ o o | O O |
|
7
|
+
# o | | ___________________________ o | |
|
8
|
+
# o \/\/\/\/\/ ( At least we're l33t now.. )o \/\/\/\/
|
9
|
+
# o ---------------------------
|
10
|
+
# o _________________________________________________
|
11
|
+
# o (vintage video game bad guys... ah... true l33tn355)
|
12
|
+
# --------------------------------------------------
|
13
|
+
#
|
14
|
+
# Not impressed? Fine, here's ya damn DOCS!
|
15
|
+
# -------------------------------------------------------------------------
|
16
|
+
#
|
17
|
+
# Contents:
|
18
|
+
#
|
19
|
+
# - What Ruport Is.
|
20
|
+
# - Installation
|
21
|
+
# - Caveats.
|
22
|
+
# - Resources
|
23
|
+
# - Background and Summary
|
24
|
+
#
|
25
|
+
# - What Ruport Is.
|
26
|
+
#
|
27
|
+
# Ruby Reports is a software library that aims to make the task of reporting
|
28
|
+
# less tedious and painful. It provides tools for data acquisition, database
|
29
|
+
# interaction, formatting, and parsing/munging. Designed to be extensible,
|
30
|
+
# it is possible to use Ruport for quick specific tasks as well as to build
|
31
|
+
# robust reporting applications.
|
32
|
+
#
|
33
|
+
# - Installation
|
34
|
+
#
|
35
|
+
# Optional Dependencies:
|
36
|
+
#
|
37
|
+
# Ruport has a number of optional dependencies:
|
38
|
+
#
|
39
|
+
# Ruby/DBI and appropriate dbds: Makes Query useable
|
40
|
+
# (must be installed manually)
|
41
|
+
#
|
42
|
+
# FasterCSV: Silently enables fast CSV parsing
|
43
|
+
# (available via rubygems)
|
44
|
+
#
|
45
|
+
# RedCloth: Enables textile/markdown filtering
|
46
|
+
# (available via rubygems)
|
47
|
+
#
|
48
|
+
# PDF::Writer: Enables printable documents via render_pdf (Experimental)
|
49
|
+
# (available via rubygems)
|
50
|
+
#
|
51
|
+
# The recommended method of installing ruport is RubyGems. It has been
|
52
|
+
# split into two packages, one that installs all of the dependencies
|
53
|
+
# by default, and one which does not install them.
|
54
|
+
#
|
55
|
+
# None of the dependencies are mandatory, so you can still use Ruport
|
56
|
+
# without them, as long as you don't need their functionality.
|
57
|
+
#
|
58
|
+
# To install ruport via rubygems with all it's dependencies (except DBI):
|
59
|
+
#
|
60
|
+
# sudo gem install ruport
|
61
|
+
#
|
62
|
+
# To install ruport via rubygems with no dependencies:
|
63
|
+
#
|
64
|
+
# sudo gem install ruport-lean
|
65
|
+
#
|
66
|
+
# Note that by installing any of the dependencies, either via gems or manually,
|
67
|
+
# their functionality will automatically be enabled in ruport-lean.
|
68
|
+
#
|
69
|
+
# To install ruport manually:
|
70
|
+
#
|
71
|
+
# sudo ruby setup.rb
|
72
|
+
#
|
73
|
+
# To not install ruport at all:
|
74
|
+
#
|
75
|
+
# ruby -Ipath/to/ruport/lib my_script.rb
|
76
|
+
#
|
77
|
+
# Check to see if it installed properly:
|
78
|
+
#
|
79
|
+
# ruby -rubygems -e "require 'ruport'; puts Ruport::VERSION"
|
80
|
+
# (omit the -rubygems flag if installed manually)
|
81
|
+
#
|
82
|
+
# If you get an error, please consult the mailing list.
|
83
|
+
#
|
84
|
+
# - Caveats
|
85
|
+
#
|
86
|
+
# Ruport is alpha software. It's not completely tested and the API is
|
87
|
+
# changing rapidly from version to version. Test suites are becoming
|
88
|
+
# increasingly robust, but have not identified all possible edge cases. If
|
89
|
+
# Ruport goes wild on you, it's because it hasn't been tamed yet.
|
90
|
+
#
|
91
|
+
# The functionality is also not complete yet. There is a lot left to be added
|
92
|
+
# and there is a lot to think about. If you find yourself wondering why
|
93
|
+
# feature foo is in Ruport, chances are it just hasn't been written yet.
|
94
|
+
#
|
95
|
+
# Documentation so far is something that is a struggle to keep up with. As of
|
96
|
+
# this release, there is at least partial documentation for the API. This
|
97
|
+
# will continue to get better as time goes on.
|
98
|
+
#
|
99
|
+
# Platform independence is a priority, but I don't absolutely always have
|
100
|
+
# access to every OS / DBMS combination, so if something breaks on your
|
101
|
+
# system, please feel free to yell loud at the mailing list.
|
102
|
+
#
|
103
|
+
# That having been said, I do use ruport in my daily work. That means that it
|
104
|
+
# will probably have at least something you will find useful. Or so I hope.
|
105
|
+
#
|
106
|
+
# - Resources
|
107
|
+
#
|
108
|
+
# The best way to get help and make suggestions is the Ruport mailing list.
|
109
|
+
# This software is on the move, so the list is the most reliable way of getting
|
110
|
+
# up to date information.
|
111
|
+
#
|
112
|
+
# - You can sign up and/or view the archives here:
|
113
|
+
# http://lists.stonecode.org/listinfo.cgi/ruport-stonecode.org
|
114
|
+
#
|
115
|
+
# Please do not hesitate to use this list! I am happily accepting patches and
|
116
|
+
# documentation, as well as encouraging design discussions and also am quite
|
117
|
+
# curious about what people use or want to use ruport for.
|
118
|
+
#
|
119
|
+
# Ruby Reports (Ruport) is a report generation and formatting toolset.
|
120
|
+
#
|
121
|
+
# I will announce Ruport releases on RubyTalk, on the Ruport mailing list, on
|
122
|
+
# Freshmeat, RAA, and the new_haven.rb mailing list. If you would like to
|
123
|
+
# keep an eye out for releases, please monitor one of those places.
|
124
|
+
#
|
125
|
+
# - You may download Ruport's source from the project page:
|
126
|
+
# http://rubyforge.org/projects/ruport
|
127
|
+
#
|
128
|
+
# - The latest stable API documentation is available at:
|
129
|
+
# http://ruport.rubyforge.org/docs
|
130
|
+
#
|
131
|
+
# - If you'd like to get some news on Ruport, you can check out my blog.
|
132
|
+
# (http://stonecode.org/blog)
|
133
|
+
#
|
134
|
+
# There also will be some tutorials on stonecode.org
|
135
|
+
#
|
136
|
+
# From time to time I will release example packages on RubyForge. Keep an eye
|
137
|
+
# out for these on ruport's project page and please note that unless otherwise
|
138
|
+
# noted, these examples are meant ONLY for the versions which they correspond
|
139
|
+
# to. (i.e. ruport-example-0.2.9 will NOT work with Ruport 0.3.8)
|
140
|
+
#
|
141
|
+
# If you are interested in developing Ruport, please *never* study code in
|
142
|
+
# official releases. As this software is in it's early stages, it's essential
|
143
|
+
# to keep an eye on the subversion repository. If you let me know you are
|
144
|
+
# interested in working on something, I will let you know if I'm actively
|
145
|
+
# working on that section.
|
146
|
+
#
|
147
|
+
# - Grabbing the code from the svn trunk is simple:
|
148
|
+
#
|
149
|
+
# svn checkout svn://rubyforge.org//var/svn/ruport
|
150
|
+
#
|
151
|
+
# Those who would like to become regular contributors will be given write
|
152
|
+
# access. Also, anyone interested in the internal design and project
|
153
|
+
# management aspects of Ruport can request to be added to our basecamp
|
154
|
+
# account. This is primarily intended for people who are working on the
|
155
|
+
# project actively, though.
|
156
|
+
#
|
157
|
+
# - Background / Summary
|
158
|
+
#
|
159
|
+
# Ruport aims to help you fetch data from various sources, perform
|
160
|
+
# manipulations on them as needed, and then output them in a variety
|
161
|
+
# of formats easily. The powerful ERb templating engine is integrated
|
162
|
+
# to let you embed Ruport code into your formatted data. Also, Ruport
|
163
|
+
# provides a high level interface to databases, to make getting
|
164
|
+
# your data easy.
|
165
|
+
#
|
166
|
+
# The standard datastructure for Ruport is the DataSet. It is an enumerable
|
167
|
+
# ordered list which consists of DataRow objects that can be accessed
|
168
|
+
# by field names or ordinal position. DataRows can be arbitrarily tagged,
|
169
|
+
# allowing for easy retrieval of the same rows for many different purposes.
|
170
|
+
#
|
171
|
+
# The rest of the code is organized into three main models, Report, Query,
|
172
|
+
# and Format. Each is meant to be a high level interface to Ruport.
|
173
|
+
# The inner classes can be used where a decent level of customization
|
174
|
+
# is needed.
|
175
|
+
#
|
176
|
+
# Report is in some sense the 'controller' of your application, and provides
|
177
|
+
# methods to help you write a Reporting application
|
178
|
+
#
|
179
|
+
# Format provides support for building filters and specialized formatting
|
180
|
+
# systems. Format::Builder can be used to add additional formats which can be
|
181
|
+
# used by DataSet#as, and the Format class can add filters to Report#render
|
182
|
+
#
|
183
|
+
# Query currently provides a high level interface to DBI. Soon it will support
|
184
|
+
# a mixin wrapper called Fetchable which will enable you to wrap whatever data
|
185
|
+
# source you choose. If you would like to query a database or load a sql dump,
|
186
|
+
# this class can help you do that. It can generate DataSets on the fly, or feed
|
187
|
+
# you DBI:Rows, depending on what you need.
|
188
|
+
#
|
189
|
+
# There is also a Config class which allows you to set things such as data
|
190
|
+
# sources, mailer information, and logging. Ruport#complain provides a robust
|
191
|
+
# way to handle error logging and warnings.
|
192
|
+
#
|
193
|
+
# Finally, Ruport provides a powerful yet oh-so-scary parsing tool. It is
|
194
|
+
# essentially James Edward Gray II's Parse::Input library within the Ruport
|
195
|
+
# library. (And will soon be integrated nicely too)
|
196
|
+
#
|
197
|
+
# Read the source of ruport/parser.rb if you have some gnarly data you need to
|
198
|
+
# munge.
|
199
|
+
#
|
200
|
+
# Finally, Please consult the API documentation and/or source code for more
|
201
|
+
# information. (http://ruport.rubyforge.org/docs). Not all classes have been
|
202
|
+
# documented but the ones that have may be easier to understand when their docs
|
203
|
+
# have been read. Also, feel free to contribute documentation.
|
204
|
+
#
|
205
|
+
# If you have any questions or concerns, hop on the mailing list and fire away!
|
206
|
+
#
|
207
|
+
# Thanks for downloading my software and I hope you enjoy it!
|
208
|
+
# -Greg
|
209
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require "rake/rdoctask"
|
2
|
+
require "rake/testtask"
|
3
|
+
require "rake/gempackagetask"
|
4
|
+
|
5
|
+
require "rubygems"
|
6
|
+
|
7
|
+
LEAN=true
|
8
|
+
|
9
|
+
task :default => [:test]
|
10
|
+
|
11
|
+
Rake::TestTask.new do |test|
|
12
|
+
test.libs << "test"
|
13
|
+
test.test_files = [ "test/ts_all.rb" ]
|
14
|
+
test.verbose = true
|
15
|
+
end
|
16
|
+
|
17
|
+
spec = Gem::Specification.new do |spec|
|
18
|
+
spec.name = LEAN ? "lean-ruport" : "ruport"
|
19
|
+
spec.version = "0.3.8"
|
20
|
+
spec.platform = Gem::Platform::RUBY
|
21
|
+
spec.summary = "A generalized Ruby report generation and templating engine."
|
22
|
+
|
23
|
+
spec.files = spec.files = FileList[
|
24
|
+
'lib/**/*.rb', 'bin/*', '[A-Z]*','test/**/*'].to_a.delete_if { |item|
|
25
|
+
item.include?("CVS") } + ["Rakefile"]
|
26
|
+
spec.require_path = "lib"
|
27
|
+
|
28
|
+
spec.test_file = "test/ts_all.rb"
|
29
|
+
|
30
|
+
spec.has_rdoc = true
|
31
|
+
spec.extra_rdoc_files = %w{README LICENSE TODO AUTHORS CHANGELOG}
|
32
|
+
spec.rdoc_options << '--title' << 'Ruport Documentation' <<
|
33
|
+
'--main' << 'README' << '-q'
|
34
|
+
unless LEAN
|
35
|
+
spec.add_dependency('fastercsv', '>= 0.1.0')
|
36
|
+
spec.add_dependency('RedCloth', '>= 3.0.0')
|
37
|
+
spec.add_dependency('pdf-writer', '>= 1.1.3')
|
38
|
+
end
|
39
|
+
spec.author = "Gregory Brown"
|
40
|
+
spec.email = " gregory.t.brown@gmail.com"
|
41
|
+
spec.rubyforge_project = "ruport"
|
42
|
+
spec.homepage = "http://ruport.rubyforge.org"
|
43
|
+
spec.description = <<END_DESC
|
44
|
+
Ruport is a powerful report generation engine that allows users to generate
|
45
|
+
custom ERb templates and easily query various forms of SQL databases via DBI.
|
46
|
+
It provides helper methods and utilities to generate professional reports
|
47
|
+
quickly and cleanly.
|
48
|
+
END_DESC
|
49
|
+
end
|
50
|
+
|
51
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
52
|
+
pkg.need_zip = true
|
53
|
+
pkg.need_tar = true
|
54
|
+
end
|
data/TODO
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
TODO: (Wiped clean for a fresh start as of 2006.02.20)
|
2
|
+
|
3
|
+
For Ruport 0.4.0
|
4
|
+
|
5
|
+
- Integrate Ruport::Parser into Report#parse and Format#parser
|
6
|
+
|
7
|
+
- Document the inner classes of Format
|
8
|
+
|
9
|
+
- Get unit tests up to 100% coverage
|
10
|
+
|
11
|
+
- make the Fetchable module to abstract data acquisition
|
12
|
+
|
13
|
+
High Priority Goals:
|
14
|
+
|
15
|
+
- Implement some aspects of XST into DataSet
|
16
|
+
|
17
|
+
- Offer charting support in Format
|
18
|
+
|
19
|
+
Community Requests:
|
20
|
+
|
21
|
+
- Integration with Rails (ActiveRecord)
|
22
|
+
|
23
|
+
Other (Unordered) Goals:
|
24
|
+
|
25
|
+
- Make mailer more robust via MailFactory
|
26
|
+
|
27
|
+
- Support KirbyBase
|
data/lib/ruport.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
# ruport.rb : Ruby Reports toplevel module
|
3
|
+
#
|
4
|
+
# Author: Gregory T. Brown (gregory.t.brown at gmail dot com)
|
5
|
+
#
|
6
|
+
# Copyright (c) 2006, All Rights Reserved.
|
7
|
+
#
|
8
|
+
# This is free software. You may modify and redistribute this freely under
|
9
|
+
# your choice of the GNU General Public License or the Ruby License.
|
10
|
+
#
|
11
|
+
# See LICENSE and COPYING for details
|
12
|
+
#
|
13
|
+
|
14
|
+
module Ruport
|
15
|
+
VERSION = "Ruport Version 0.3.8 (Developmental)"
|
16
|
+
|
17
|
+
# Ruports logging and error interface.
|
18
|
+
# Can generate warnings or raise fatal errors
|
19
|
+
#
|
20
|
+
# Takes a message to display and a set of options.
|
21
|
+
# Will log to the file defined by Config::log_file
|
22
|
+
#
|
23
|
+
# Options:
|
24
|
+
# <tt>:status</tt>:: sets the severity level. defaults to <tt>:warn</tt>
|
25
|
+
# <tt>:output</tt>:: optional secondary output, defaults to <tt>$stderr</tt>
|
26
|
+
# <tt>:level</tt>:: set to <tt>:log_only</tt> to disable secondary output
|
27
|
+
# <tt>:exception</tt>:: exception to throw on fail. Defaults to RunTimeError
|
28
|
+
#
|
29
|
+
# The status <tt>:warn</tt> will invoke Logger#warn. A status of
|
30
|
+
# <tt>:fatal</tt> will invoke Logger#fatal and raise an exception
|
31
|
+
#
|
32
|
+
# By default, complain will also print warnings to $stderr
|
33
|
+
# You can redirect this to any I/O object via <tt>:output</tt>
|
34
|
+
#
|
35
|
+
# You can prevent messages from appearing on the secondary output by setting
|
36
|
+
# <tt>:level</tt> to <tt>:log_only</tt>
|
37
|
+
#
|
38
|
+
# If you want to recover these messages to secondary output for debugging, you
|
39
|
+
# can use Config::enable_paranoia
|
40
|
+
def Ruport.complain(message,options={})
|
41
|
+
options[:status] ||= :warn
|
42
|
+
options[:output] ||= $stderr
|
43
|
+
case(options[:status])
|
44
|
+
when :warn
|
45
|
+
Ruport::Config::logger.warn(message) if Ruport::Config::logger
|
46
|
+
when :fatal
|
47
|
+
Ruport::Config::logger.fatal(message) if Ruport::Config::logger
|
48
|
+
raise options[:exception] || RuntimeError, message
|
49
|
+
end
|
50
|
+
options[:output].puts "[!!] #{message}" unless
|
51
|
+
options[:level].eql?(:log_only) and not Ruport::Config.paranoid?
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
%w[ config report format query data_row data_set].each { |lib|
|
57
|
+
require "ruport/#{lib}"
|
58
|
+
}
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# ruport/config.rb : Ruby Reports configuration system
|
2
|
+
#
|
3
|
+
# Author: Gregory T. Brown (gregory.t.brown at gmail dot com)
|
4
|
+
#
|
5
|
+
# Copyright (c) 2006, All Rights Reserved.
|
6
|
+
#
|
7
|
+
# This is free software. You may modify and redistribute this freely under
|
8
|
+
# your choice of the GNU General Public License or the Ruby License.
|
9
|
+
#
|
10
|
+
# See LICENSE and COPYING for details
|
11
|
+
#
|
12
|
+
require "singleton"
|
13
|
+
require "ostruct"
|
14
|
+
module Ruport
|
15
|
+
# This class serves as the configuration system for Ruport.
|
16
|
+
# It's functionality is implemented through Config::method_missing
|
17
|
+
#
|
18
|
+
# source :default and mailer :default will become the fallback values if one
|
19
|
+
# is not specified in Report::Mailer or Query, but you may define as many
|
20
|
+
# sources as you like and switch between them later.
|
21
|
+
#
|
22
|
+
# An example config file is shown below:
|
23
|
+
#
|
24
|
+
# # password is optional, dsn may omit hostname for localhost
|
25
|
+
# Ruport::Config.source :default,
|
26
|
+
# :dsn => "dbi:mysql:somedb:db.blixy.org", :user => "root", :password => "chunky_bacon"
|
27
|
+
#
|
28
|
+
# # :password, :port, and :auth_type are optional. :port defaults to 25 and
|
29
|
+
# # :auth_type defaults to :plain. For more information, see the source
|
30
|
+
# # of Report::Mailer#select_mailer
|
31
|
+
# Ruport::Config.mailer :default,
|
32
|
+
# :host => "mail.chunkybacon.org", :address => "chunky@bacon.net",
|
33
|
+
# :user => "cartoon", :password => "fox", :port => 25, :auth_type => :login
|
34
|
+
#
|
35
|
+
# # optional, if specifed, Ruport#complain will report to it
|
36
|
+
# Ruport::Config.log_file 'foo.log'
|
37
|
+
#
|
38
|
+
# # optional, if enabled, will force :log_only complaint calls to
|
39
|
+
# # print to secondary output ($sterr by default).
|
40
|
+
# # call Ruport::Config.disable_paranoia to disable
|
41
|
+
# Ruport::Config.enable_paranoia
|
42
|
+
#
|
43
|
+
# Alternatively, this configuration could be done by opening the class:
|
44
|
+
# class Ruport::Config
|
45
|
+
#
|
46
|
+
# source :default, :dsn => "dbi:mysql:some_db", :user => "root"
|
47
|
+
#
|
48
|
+
# mailer :default, :host => "mail.iheartwhy.com",
|
49
|
+
# :address => "sandal@ruby-harmonix.net", :user => "sandal",
|
50
|
+
# :password => "abc123"
|
51
|
+
#
|
52
|
+
# logfile 'foo.log'
|
53
|
+
#
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
# Saving this config information into a file and then requiring it can allow
|
57
|
+
# you share configurations between Ruport applications.
|
58
|
+
#
|
59
|
+
class Config
|
60
|
+
include Singleton
|
61
|
+
|
62
|
+
def Config.method_missing(method_id,*args)
|
63
|
+
case(method_id)
|
64
|
+
when :source
|
65
|
+
return @@sources[args.first] if args.length == 1
|
66
|
+
@@sources[args.first] = OpenStruct.new(*args[1..-1])
|
67
|
+
unless @@sources[args.first].send(:dsn)
|
68
|
+
Ruport.complain("Bad or missing DSN for source #{args.first}!")
|
69
|
+
end
|
70
|
+
when :mailer
|
71
|
+
@@mailers[args.first] = OpenStruct.new(*args[1..-1])
|
72
|
+
when :log_file
|
73
|
+
@@logger = Logger.new(args.first)
|
74
|
+
when :default_source
|
75
|
+
@@sources[:default]
|
76
|
+
when :default_mailer
|
77
|
+
@@mailers[:default]
|
78
|
+
when :sources
|
79
|
+
@@sources
|
80
|
+
when :mailers
|
81
|
+
@@mailers
|
82
|
+
when :logger
|
83
|
+
@@logger
|
84
|
+
when :enable_paranoia
|
85
|
+
@@paranoid = true
|
86
|
+
when :disable_paranoia
|
87
|
+
@@paranoid = false
|
88
|
+
when :paranoid?
|
89
|
+
@@paranoid
|
90
|
+
else
|
91
|
+
super
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def Config.init!
|
98
|
+
@@sources = { :default =>
|
99
|
+
OpenStruct.new( :dsn => "ruport",
|
100
|
+
:user => "",
|
101
|
+
:password => ""
|
102
|
+
)
|
103
|
+
}
|
104
|
+
@@mailers = { :default => nil }
|
105
|
+
@@logger ||= nil
|
106
|
+
@@paranoid ||= false
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
init!
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|