lean-ruport 0.3.8
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.
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
|