ruport 0.2.9 → 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
- data/ACKNOWLEDGEMENTS +33 -0
- data/AUTHORS +13 -1
- data/CHANGELOG +76 -1
- data/README +208 -89
- data/Rakefile +12 -8
- data/TODO +14 -122
- 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 +29 -5
- 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 +17 -15
- data/test/{addressbook.csv → samples/addressbook.csv} +0 -0
- data/test/samples/car_ads.txt +505 -0
- data/test/{data.csv → samples/data.csv} +0 -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/{test.sql → samples/test.sql} +2 -1
- data/test/{test.yaml → samples/test.yaml} +0 -0
- data/test/tc_builder.rb +7 -4
- data/test/tc_config.rb +41 -0
- data/test/tc_data_row.rb +16 -26
- data/test/tc_data_set.rb +60 -41
- 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 +6 -3
- data/test/ts_format.rb +5 -0
- data/test/ts_parser.rb +10 -0
- metadata +102 -60
- data/bin/ruport +0 -104
- data/lib/ruport/format/chart.rb +0 -1
- data/lib/ruport/report/data_row.rb +0 -79
- data/lib/ruport/report/data_set.rb +0 -153
- data/lib/ruport/report/engine.rb +0 -201
- data/lib/ruport/report/fake_db.rb +0 -54
- data/lib/ruport/report/fake_engine.rb +0 -26
- data/lib/ruport/report/fake_mailer.rb +0 -23
- data/lib/ruport/report/sql.rb +0 -95
- data/lib/ruportlib.rb +0 -11
- data/test/tc_engine.rb +0 -102
- data/test/tc_mailer.rb +0 -21
data/ACKNOWLEDGEMENTS
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
Sometimes you just gotta pay some mad propz to the peoples.
|
2
|
+
|
3
|
+
- Daniel Berger for releasing gruf to the community
|
4
|
+
|
5
|
+
- James Edward Gray II for letting me take query.rb and mash it into something
|
6
|
+
that eventually became Ruport 0.1.0
|
7
|
+
|
8
|
+
- Austin Ziegler for suggesting the Ruby License, which hopefully keeps everyone
|
9
|
+
happy.
|
10
|
+
|
11
|
+
- All the people at RubyConf 2005, new_haven.rb, and NYC.rb that made
|
12
|
+
suggestions and let me know what kind of problems they were dealing with.
|
13
|
+
|
14
|
+
- The people on the Ruport mailing list who will happily run unit tests and
|
15
|
+
check out little things for me when I need it.
|
16
|
+
|
17
|
+
- Francis Hwang for overall design suggestions and the contribution of SqlSplit.
|
18
|
+
Additionally, his efforts on DBI to bring it back to life. (Along with the
|
19
|
+
rest of the new DBI team)
|
20
|
+
|
21
|
+
- Mathijs Mohlmann for pointing out that the DataRow constructor sucks and
|
22
|
+
offering some patches for changes to Ruport.
|
23
|
+
|
24
|
+
- JEG2 again for letting me ape Parse::Input from him ;)
|
25
|
+
|
26
|
+
- Gregory Gibson for pretending like I'm a worthwhile business investment, and
|
27
|
+
providing funding to let me work on Ruport, instead of like... working in a
|
28
|
+
coffee shop or something.
|
29
|
+
|
30
|
+
- 'A Monkey' for catching a bug before I even commited it to SVN.
|
31
|
+
|
32
|
+
- RubyTalk, #ruby-lang and the Ruby community in general.
|
33
|
+
Each and every one of you is my homie.
|
data/AUTHORS
CHANGED
@@ -1,7 +1,19 @@
|
|
1
|
+
Developers:
|
2
|
+
---------------------------------------------------
|
1
3
|
{Gregory Brown}[mailto:gregory.t.brown@gmail.com]:
|
2
4
|
|
3
5
|
Original Author and Ruport::Report hacker.
|
4
6
|
|
5
7
|
{Robert Canieso}[mailto:rcanieso@gmail.com]:
|
6
8
|
|
7
|
-
|
9
|
+
Currently lurking. Soon to be tester / developer
|
10
|
+
|
11
|
+
Contributors / People we've stole from:
|
12
|
+
---------------------------------------------------
|
13
|
+
|
14
|
+
James Edward Gray II:
|
15
|
+
Original inspiration via query.rb
|
16
|
+
Parse::Input which is the base for Ruport::Parser
|
17
|
+
|
18
|
+
Francis Hwang:
|
19
|
+
SQLSplit
|
data/CHANGELOG
CHANGED
@@ -1,4 +1,79 @@
|
|
1
|
-
The current version of Ruby Reports is 0.
|
1
|
+
The current version of Ruby Reports is 0.3.8
|
2
|
+
key features of Ruport 0.3.8:
|
3
|
+
|
4
|
+
- New configuration system
|
5
|
+
|
6
|
+
- New query model
|
7
|
+
|
8
|
+
- New formatting system
|
9
|
+
|
10
|
+
- Total API redesign
|
11
|
+
|
12
|
+
- Lots more API documentation
|
13
|
+
|
14
|
+
- A parser adapted from Parse::Input
|
15
|
+
|
16
|
+
- ruport executable was deprecated
|
17
|
+
|
18
|
+
[ Code was redesigned completely after 0.2.9 ]
|
19
|
+
|
20
|
+
changes since Ruport 0.2.9:
|
21
|
+
|
22
|
+
- Report::SQL dropped.
|
23
|
+
|
24
|
+
- Fixed a bug in query that made ODBC driver not work at ALL!
|
25
|
+
(AFAIK, this bug was ONLY in Ruport 0.2.9)
|
26
|
+
|
27
|
+
- removed render() from the engine and implemented DataSet#render_as()
|
28
|
+
example:
|
29
|
+
@report = render(data) do |builder| builder.format = :some_format end
|
30
|
+
is now: @report = data.render_as(:some_format)
|
31
|
+
which takes an optional block that works as before.
|
32
|
+
|
33
|
+
- removed method DataSet#select_field() because it was the same as
|
34
|
+
DataSet#select_fields() and of limited utility.
|
35
|
+
|
36
|
+
- added method DataSet#remove_fields and DataSet#remove_fields!
|
37
|
+
to make data manipulation easier.
|
38
|
+
|
39
|
+
- added DataSet#empty?
|
40
|
+
|
41
|
+
- added DataSet#clone which will actually deep copy a DataSet.
|
42
|
+
|
43
|
+
- cleaned up incredibly annoying DataSet constructor so you can now pass
|
44
|
+
field names and data to new()
|
45
|
+
|
46
|
+
- Report::DataSet now documented
|
47
|
+
|
48
|
+
- added hacks.rb which will include a random collection of potentially
|
49
|
+
useful functions. (Already cool for making Ruport easy to use with irb).
|
50
|
+
|
51
|
+
- added Document class and unit tests. Needs to be completed.
|
52
|
+
|
53
|
+
- added Report::DataSet.clone for making deep copies of DataSets.
|
54
|
+
|
55
|
+
- added Element, Section, Page, and Document formatting classes.
|
56
|
+
|
57
|
+
- restructured unit tests, adding ts_format and ts_report
|
58
|
+
and moving all non-testcase data into test/samples
|
59
|
+
|
60
|
+
- restuctured library, adding ruport/format.rb and ruport/report.rb
|
61
|
+
made format and report into classes, with nested classes within.
|
62
|
+
|
63
|
+
- Moved the Report::Engine class into Report
|
64
|
+
|
65
|
+
- reorginized DataSet#<< to be more efficient. Thanks Francis!
|
66
|
+
|
67
|
+
- added OpenNode. Which is a little scary.
|
68
|
+
|
69
|
+
- Francis Hwang has added SqlSplit, which has been tied into query.
|
70
|
+
Now multiple statement SQL dumps can be processed by ruport.
|
71
|
+
|
72
|
+
- DataSet can now safely execute commands that return no rows.
|
73
|
+
(This was a bug in RubyDBI which ruport now has a workaround for)
|
74
|
+
|
75
|
+
- require "ruportlib" becomes require "ruport"
|
76
|
+
|
2
77
|
|
3
78
|
changes since Ruport 0.2.5:
|
4
79
|
|
data/README
CHANGED
@@ -1,90 +1,209 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
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
|
73
209
|
|
74
|
-
ruport generate ProjectName
|
75
|
-
|
76
|
-
This will dump a directory structure for you to start with.
|
77
|
-
|
78
|
-
You'll need to edit config/ruport.yaml to get things up and running, and at this
|
79
|
-
point, unless you're magic, you'll probably need to either read the
|
80
|
-
{API Documentation}[http://ruport.rubyforge.org/docs/] or the source, whichever
|
81
|
-
you're most comfortable with.
|
82
|
-
|
83
|
-
There is also a set of examples at:
|
84
|
-
http://rubyforge.org/frs/?group_id=856&release_id=3481
|
85
|
-
|
86
|
-
I hope you enjoy this software and that it is useful to you.
|
87
|
-
|
88
|
-
-Greg
|
89
|
-
|
90
|
-
gregory.t.brown@gmail.com
|
data/Rakefile
CHANGED
@@ -4,6 +4,8 @@ require "rake/gempackagetask"
|
|
4
4
|
|
5
5
|
require "rubygems"
|
6
6
|
|
7
|
+
LEAN=false
|
8
|
+
|
7
9
|
task :default => [:test]
|
8
10
|
|
9
11
|
Rake::TestTask.new do |test|
|
@@ -13,8 +15,8 @@ Rake::TestTask.new do |test|
|
|
13
15
|
end
|
14
16
|
|
15
17
|
spec = Gem::Specification.new do |spec|
|
16
|
-
spec.name = "ruport"
|
17
|
-
spec.version = "0.
|
18
|
+
spec.name = LEAN ? "ruport-lean" : "ruport"
|
19
|
+
spec.version = "0.3.8"
|
18
20
|
spec.platform = Gem::Platform::RUBY
|
19
21
|
spec.summary = "A generalized Ruby report generation and templating engine."
|
20
22
|
|
@@ -22,17 +24,19 @@ spec = Gem::Specification.new do |spec|
|
|
22
24
|
'lib/**/*.rb', 'bin/*', '[A-Z]*','test/**/*'].to_a.delete_if { |item|
|
23
25
|
item.include?("CVS") } + ["Rakefile"]
|
24
26
|
spec.require_path = "lib"
|
25
|
-
spec.bindir = "bin"
|
26
|
-
spec.executables << "ruport"
|
27
27
|
|
28
28
|
spec.test_file = "test/ts_all.rb"
|
29
29
|
|
30
30
|
spec.has_rdoc = true
|
31
31
|
spec.extra_rdoc_files = %w{README LICENSE TODO AUTHORS CHANGELOG}
|
32
32
|
spec.rdoc_options << '--title' << 'Ruport Documentation' <<
|
33
|
-
'--main' << 'README'
|
34
|
-
|
35
|
-
|
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"
|
36
40
|
spec.email = " gregory.t.brown@gmail.com"
|
37
41
|
spec.rubyforge_project = "ruport"
|
38
42
|
spec.homepage = "http://ruport.rubyforge.org"
|
@@ -40,7 +44,7 @@ spec = Gem::Specification.new do |spec|
|
|
40
44
|
Ruport is a powerful report generation engine that allows users to generate
|
41
45
|
custom ERb templates and easily query various forms of SQL databases via DBI.
|
42
46
|
It provides helper methods and utilities to generate professional reports
|
43
|
-
quickly and cleanly.
|
47
|
+
quickly and cleanly.
|
44
48
|
END_DESC
|
45
49
|
end
|
46
50
|
|