ruport 1.6.1 → 1.6.2

Sign up to get free protection for your applications and to get access to all the features.
data/COPYING ADDED
@@ -0,0 +1,340 @@
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Library General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ <one line to give the program's name and a brief idea of what it does.>
294
+ Copyright (C) <year> <name of author>
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License
307
+ along with this program; if not, write to the Free Software
308
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
309
+
310
+
311
+ Also add information on how to contact you by electronic and paper mail.
312
+
313
+ If the program is interactive, make it output a short notice like this
314
+ when it starts in an interactive mode:
315
+
316
+ Gnomovision version 69, Copyright (C) year name of author
317
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
318
+ This is free software, and you are welcome to redistribute it
319
+ under certain conditions; type `show c' for details.
320
+
321
+ The hypothetical commands `show w' and `show c' should show the appropriate
322
+ parts of the General Public License. Of course, the commands you use may
323
+ be called something other than `show w' and `show c'; they could even be
324
+ mouse-clicks or menu items--whatever suits your program.
325
+
326
+ You should also get your employer (if you work as a programmer) or your
327
+ school, if any, to sign a "copyright disclaimer" for the program, if
328
+ necessary. Here is a sample; alter the names:
329
+
330
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
331
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
332
+
333
+ <signature of Ty Coon>, 1 April 1989
334
+ Ty Coon, President of Vice
335
+
336
+ This General Public License does not permit incorporating your program into
337
+ proprietary programs. If your program is a subroutine library, you may
338
+ consider it more useful to permit linking proprietary applications with the
339
+ library. If this is what you want to do, use the GNU Library General
340
+ Public License instead of this License.
data/HACKING ADDED
@@ -0,0 +1,47 @@
1
+ Hacking on Ruby Reports : A Guide For Contributors
2
+ --------------------------------------------------
3
+
4
+ If you'd like to help test, maintain, or develop on Ruport,
5
+ this document is for you.
6
+
7
+ We try to be as community friendly as possible, and we welcome all sorts of
8
+ contributions to our project. Here are a few different ways you can help.
9
+
10
+ - Adding Tests and Hunting for bugs.
11
+
12
+ - Improving documentation or writing tutorials
13
+
14
+ - Helping with our primary development tasks
15
+
16
+ - Helping with some secondary tasks
17
+
18
+ - Improving our visual identity / web resources
19
+
20
+ - Testing new releases and sharing your experiences.
21
+
22
+
23
+ If any of these things sound appealing to you, there are a few things
24
+ you should do:
25
+
26
+ 1) Sign up on the mailing list: http://list.rubyreports.org/
27
+
28
+ 2) Post and introduce yourself, letting us know what you'd like to work on OR
29
+ Find sandal or mikem836 on #ruport
30
+
31
+ 3) Please read the MakingChangeRequests, ReportingDefects, and
32
+ SubmittingPatches Trac wiki pages, as appropriate.
33
+
34
+ - http://stonecode.svnrepository.com/ruport/trac.cgi/wiki/MakingChangeRequests
35
+
36
+ - http://stonecode.svnrepository.com/ruport/trac.cgi/wiki/ReportingDefects
37
+
38
+ - http://stonecode.svnrepository.com/ruport/trac.cgi/wiki/SubmittingPatches
39
+
40
+ 4) Please pull the latest code from SVN trunk:
41
+ http://stonecode.svnrepository.com/svn/ruport/ruport/trunk
42
+
43
+
44
+ This should hopefully be enough to get you on the right track. We welcome your
45
+ questions and ideas, so don't be afraid to contact us.
46
+
47
+ Happy Hacking!
data/Rakefile CHANGED
@@ -1,8 +1,6 @@
1
1
  require "rake/rdoctask"
2
2
  require "rake/testtask"
3
- require "rake/gempackagetask"
4
-
5
- RUPORT_VERSION = "1.6.1"
3
+ require "lib/ruport/version"
6
4
 
7
5
  begin
8
6
  require "rubygems"
@@ -18,31 +16,27 @@ Rake::TestTask.new do |test|
18
16
  test.verbose = true
19
17
  end
20
18
 
21
- spec = Gem::Specification.new do |spec|
22
- spec.name = "ruport"
23
- spec.version = RUPORT_VERSION
24
- spec.platform = Gem::Platform::RUBY
25
- spec.summary = "A generalized Ruby report generation and templating engine."
26
- spec.files = Dir.glob("{examples,lib,test,bin,util/bench}/**/**/*") +
27
- ["Rakefile"]
28
- spec.require_path = "lib"
29
-
30
- spec.test_files = Dir[ "test/*_test.rb" ]
31
- spec.has_rdoc = true
32
- spec.extra_rdoc_files = %w{README LICENSE AUTHORS}
33
- spec.rdoc_options << '--title' << 'Ruport Documentation' <<
34
- '--main' << 'README' << '-q'
35
- spec.add_dependency('fastercsv', '= 1.2.3')
36
- spec.add_dependency('pdf-writer','= 1.1.8')
37
- spec.author = "Gregory Brown"
38
- spec.email = " gregory.t.brown@gmail.com"
39
- spec.rubyforge_project = "ruport"
40
- spec.homepage = "http://rubyreports.org"
41
- spec.description = <<END_DESC
42
- Ruby Reports is a software library that aims to make the task of reporting
43
- less tedious and painful. It provides tools for data acquisition,
44
- database interaction, formatting, and parsing/munging.
45
- END_DESC
19
+ begin
20
+ require 'jeweler'
21
+ Jeweler::Tasks.new do |gemspec|
22
+ gemspec.name = 'ruport'
23
+ gemspec.rubyforge_project = 'ruport'
24
+ gemspec.version = Ruport::VERSION
25
+ gemspec.summary = 'A generalized Ruby report generation and templating engine.'
26
+ gemspec.description = <<-END_DESC
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,
29
+ database interaction, formatting, and parsing/munging.
30
+ END_DESC
31
+ gemspec.email = 'gregory.t.brown@gmail.com'
32
+ gemspec.homepage = 'http://rubyreports.org'
33
+ gemspec.authors = ['Gregory Brown', 'Mike Milner', 'Andrew France']
34
+ gemspec.rdoc_options = ['--title Ruport Documentation', '--main README', '-q']
35
+ gemspec.add_dependency 'fastercsv'
36
+ gemspec.add_dependency 'pdf-writer', '= 1.1.8'
37
+ end
38
+ rescue LoadError
39
+ puts "Jeweler gem not available."
46
40
  end
47
41
 
48
42
  Rake::RDocTask.new do |rdoc|
@@ -55,11 +49,6 @@ Rake::RDocTask.new do |rdoc|
55
49
  rdoc.title = "Ruport Documentation"
56
50
  end
57
51
 
58
- Rake::GemPackageTask.new(spec) do |pkg|
59
- pkg.need_zip = true
60
- pkg.need_tar = true
61
- end
62
-
63
52
  task :build_archives => [:package,:rcov,:rdoc] do
64
53
  mv "pkg/ruport-#{RUPORT_VERSION}.tgz", "pkg/ruport-#{RUPORT_VERSION}.tar.gz"
65
54
  sh "tar cjvf pkg/ruport_coverage-#{RUPORT_VERSION}.tar.bz2 coverage"
@@ -23,9 +23,6 @@ end
23
23
 
24
24
 
25
25
  module Ruport #:nodoc:#
26
-
27
- VERSION = "1.6.1"
28
-
29
26
  class FormatterError < RuntimeError #:nodoc:
30
27
  end
31
28
 
@@ -113,6 +110,7 @@ module Ruport #:nodoc:#
113
110
 
114
111
  end
115
112
 
113
+ require "ruport/version"
116
114
  require "enumerator"
117
115
  require "ruport/controller"
118
116
  require "ruport/data"
@@ -604,10 +604,10 @@ class Ruport::Controller
604
604
 
605
605
  # Selects a formatter for use by format name
606
606
  def use_formatter(format)
607
+ raise UnknownFormatError unless self.class.formats.include?(format) &&
608
+ self.class.formats[format].respond_to?(:new)
607
609
  self.formatter = self.class.formats[format].new
608
610
  self.formatter.format = format
609
- rescue NoMethodError
610
- raise UnknownFormatError
611
611
  end
612
612
 
613
613
  end
@@ -0,0 +1,3 @@
1
+ module Ruport
2
+ VERSION = "1.6.2"
3
+ end
@@ -650,6 +650,31 @@ class TestAnonymousFormatter < Test::Unit::TestCase
650
650
 
651
651
  end
652
652
 
653
+ # Used to ensure that problems in controller code aren't mistakenly intercepted
654
+ # by Ruport.
655
+ class MisbehavingController < Ruport::Controller
656
+ end
657
+
658
+ class MisbehavingFormatter < Ruport::Formatter
659
+ renders :text, :for => MisbehavingController
660
+ def initialize
661
+ super
662
+ raise NoMethodError
663
+ end
664
+ end
665
+
666
+ class TestMisbehavingController < Test::Unit::TestCase
667
+
668
+ context "using a controller that throws NoMethodError" do
669
+ def specify_controller_errors_should_bubble_up
670
+ assert_raises(NoMethodError) do
671
+ MisbehavingController.render :text
672
+ end
673
+ end
674
+ end
675
+
676
+ end
677
+
653
678
  class TestControllerHooks < Test::Unit::TestCase
654
679
 
655
680
  context "when renderable_data omitted" do
@@ -288,13 +288,13 @@ class TestGrouping < Test::Unit::TestCase
288
288
 
289
289
  def setup
290
290
  @table = Table(%w[a b c]) << ["dog",1,2] << ["cat",3,5] <<
291
- ["banana",8,1] << ["dog",5,6]
291
+ ["banana",8,1] << ["dog",5,6] << ["dog",2,4] << ["banana",7,9]
292
292
  end
293
293
 
294
294
  def specify_can_set_by_group_name_order_in_constructor
295
295
  a = Grouping(@table, :by => "a", :order => :name)
296
296
  names = %w[banana cat dog]
297
- data = [ [[8,1]], [[3,5]], [[1,2],[5,6]] ]
297
+ data = [ [[8,1],[7,9]], [[3,5]], [[1,2],[5,6],[2,4]] ]
298
298
  a.each do |name,group|
299
299
  assert_equal names.shift, name
300
300
  assert_equal data.shift, group.map { |r| r.to_a }
@@ -304,7 +304,7 @@ class TestGrouping < Test::Unit::TestCase
304
304
  def specify_can_set_by_proc_ordering_in_constructor
305
305
  a = Grouping(@table, :by => "a", :order => lambda { |g| -g.length } )
306
306
  names = %w[dog banana cat]
307
- data = [ [[1,2],[5,6]], [[8,1]], [[3,5]] ]
307
+ data = [ [[1,2],[5,6],[2,4]], [[8,1],[7,9]], [[3,5]] ]
308
308
  a.each do |name,group|
309
309
  assert_equal names.shift, name
310
310
  assert_equal data.shift, group.map { |r| r.to_a }
@@ -315,7 +315,7 @@ class TestGrouping < Test::Unit::TestCase
315
315
  a = Grouping(@table, :by => "a", :order => lambda { |g| -g.length } )
316
316
  a.sort_grouping_by!(:name)
317
317
  names = %w[banana cat dog]
318
- data = [ [[8,1]], [[3,5]], [[1,2],[5,6]] ]
318
+ data = [ [[8,1],[7,9]], [[3,5]], [[1,2],[5,6],[2,4]] ]
319
319
  a.each do |name,group|
320
320
  assert_equal names.shift, name
321
321
  assert_equal data.shift, group.map { |r| r.to_a }
@@ -327,7 +327,7 @@ class TestGrouping < Test::Unit::TestCase
327
327
  b = a.sort_grouping_by(:name)
328
328
 
329
329
  names = %w[banana cat dog]
330
- data = [ [[8,1]], [[3,5]], [[1,2],[5,6]] ]
330
+ data = [ [[8,1],[7,9]], [[3,5]], [[1,2],[5,6],[2,4]] ]
331
331
  b.each do |name,group|
332
332
  assert_equal names.shift, name
333
333
  assert_equal data.shift, group.map { |r| r.to_a }
@@ -335,7 +335,7 @@ class TestGrouping < Test::Unit::TestCase
335
335
 
336
336
  # assert original retained
337
337
  names = %w[dog banana cat]
338
- data = [ [[1,2],[5,6]], [[8,1]], [[3,5]] ]
338
+ data = [ [[1,2],[5,6],[2,4]], [[8,1],[7,9]], [[3,5]] ]
339
339
  a.each do |name,group|
340
340
  assert_equal names.shift, name
341
341
  assert_equal data.shift, group.map { |r| r.to_a }
@@ -4,7 +4,6 @@ require "ruport"
4
4
  begin; require "rubygems"; rescue LoadError; nil; end
5
5
  require "spec-unit"
6
6
  require "mocha"
7
- require "stubba"
8
7
 
9
8
  class Test::Unit::TestCase
10
9
  include SpecUnit
@@ -0,0 +1,52 @@
1
+ require 'rubygems'
2
+ require 'mechanize'
3
+ require 'ruport'
4
+
5
+ version = Ruport::VERSION =~ /(\d+.\d+.\d+)/ && $1
6
+
7
+ FOCUS = { :minor_bugs => 6, :major_bugs => 7, :minor_features => 4,
8
+ :major_features => 5, :cleanup => 3, :documentation => 2 }
9
+
10
+ agent = WWW::Mechanize.new #{|a| a.log = Logger.new(STDERR) }
11
+ page = agent.get("http://rubyforge.org/projects/ruport")
12
+ download = page.links.text(/Download/).first
13
+ release = download.uri.to_s[-15..-1]
14
+ agent.get(download.uri)
15
+
16
+ links = agent.page.links
17
+
18
+ links_hash = %w[zip tar.gz tar.bz2].inject({}) {|h,ext|
19
+ h.merge(ext => "http://rubyforge.org"+links.text(/#{ext}/).first.uri.to_s)
20
+ }
21
+
22
+ agent.get("http://freshmeat.net/login/")
23
+ form = agent.page.forms[2]
24
+ form.field("username").value = "anonymouse"
25
+ form.field("password").value = ARGV[0]
26
+ agent.submit(form, form.buttons.first)
27
+ agent.get("http://freshmeat.net/projects/ruport/")
28
+ link = agent.page.links.text(/add release/).first
29
+ agent.click link
30
+
31
+
32
+ form = agent.page.forms[2]
33
+
34
+ s = form.field("add_release[release_focus_name]")
35
+ s.value = s.options[5].value
36
+
37
+ t = form.field("add_release[hide_from_frontpage]")
38
+ t.value = t.options[0].value
39
+
40
+ form.field("add_release[version]").value = version
41
+ form.field("add_release[changes]").value = File.read("notes")
42
+
43
+ form.field("add_release[url_tgz]").value = links_hash["tar.gz"]
44
+ form.field("add_release[url_bz2]").value = links_hash["tar.bz2"]
45
+ form.field("add_release[url_zip]").value = links_hash["zip"]
46
+ form.field("add_release[url_changelog]").value = "http://rubyforge.org/frs/shownotes.php?#{release}"
47
+
48
+ agent.submit(form,form.buttons[0])
49
+
50
+
51
+ form = agent.page.forms[2]
52
+ agent.submit(form,form.buttons[0])
@@ -0,0 +1,13 @@
1
+ require "rubygems"
2
+ require "ruport"
3
+ require "mechanize"
4
+
5
+ (puts "Need password"; exit) unless ARGV[0]
6
+
7
+ frontpage = 'http://raa.ruby-lang.org/update.rhtml?name=ruport'
8
+ agent = WWW::Mechanize.new
9
+ page = agent.get frontpage
10
+ form = page.forms[1]
11
+ form.fields.name("pass").value = ARGV[0]
12
+ form.fields.name("version").value = ARGV[1]
13
+ page = agent.submit(form, form.buttons[0])
metadata CHANGED
@@ -1,77 +1,91 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: ruport
5
3
  version: !ruby/object:Gem::Version
6
- version: 1.6.1
7
- date: 2008-04-14 00:00:00 -04:00
8
- summary: A generalized Ruby report generation and templating engine.
9
- require_paths:
10
- - lib
11
- email: " gregory.t.brown@gmail.com"
12
- homepage: http://rubyreports.org
13
- rubyforge_project: ruport
14
- description: Ruby Reports is a software library that aims to make the task of reporting less tedious and painful. It provides tools for data acquisition, database interaction, formatting, and parsing/munging.
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 1.6.2
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Gregory Brown
8
+ - Mike Milner
9
+ - Andrew France
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2009-12-13 00:00:00 +11:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: fastercsv
19
+ type: :runtime
20
+ version_requirement:
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: "0"
26
+ version:
27
+ - !ruby/object:Gem::Dependency
28
+ name: pdf-writer
29
+ type: :runtime
30
+ version_requirement:
31
+ version_requirements: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "="
34
+ - !ruby/object:Gem::Version
35
+ version: 1.1.8
36
+ version:
37
+ description: " Ruby Reports is a software library that aims to make the task of reporting\n less tedious and painful. It provides tools for data acquisition,\n database interaction, formatting, and parsing/munging.\n"
38
+ email: gregory.t.brown@gmail.com
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files:
44
+ - LICENSE
45
+ - README
31
46
  files:
47
+ - AUTHORS
48
+ - COPYING
49
+ - HACKING
50
+ - LICENSE
51
+ - README
52
+ - Rakefile
53
+ - examples/RWEmerson.jpg
32
54
  - examples/anon.rb
33
- - examples/btree
55
+ - examples/btree/commaleon/commaleon.rb
56
+ - examples/btree/commaleon/sample_data/ticket_count.csv
57
+ - examples/btree/commaleon/sample_data/ticket_count2.csv
34
58
  - examples/centered_pdf_text_box.rb
35
- - examples/data
59
+ - examples/data/tattle.dump
36
60
  - examples/example.csv
37
61
  - examples/line_plotter.rb
38
62
  - examples/pdf_report_with_common_base.rb
39
63
  - examples/png_embed.rb
40
64
  - examples/roadmap.png
41
65
  - examples/row_renderer.rb
42
- - examples/RWEmerson.jpg
43
66
  - examples/simple_pdf_lines.rb
44
67
  - examples/simple_templating_example.rb
45
68
  - examples/tattle_ruby_version.rb
46
69
  - examples/tattle_rubygems_version.rb
47
70
  - examples/trac_ticket_status.rb
48
- - examples/btree/commaleon
49
- - examples/btree/commaleon/commaleon.rb
50
- - examples/btree/commaleon/sample_data
51
- - examples/btree/commaleon/sample_data/ticket_count.csv
52
- - examples/btree/commaleon/sample_data/ticket_count2.csv
53
- - examples/data/tattle.dump
54
- - lib/ruport
55
71
  - lib/ruport.rb
56
- - lib/uport.rb
57
- - lib/ruport/controller
58
72
  - lib/ruport/controller.rb
59
- - lib/ruport/data
60
- - lib/ruport/data.rb
61
- - lib/ruport/extensions.rb
62
- - lib/ruport/formatter
63
- - lib/ruport/formatter.rb
64
73
  - lib/ruport/controller/grouping.rb
65
74
  - lib/ruport/controller/table.rb
75
+ - lib/ruport/data.rb
66
76
  - lib/ruport/data/feeder.rb
67
77
  - lib/ruport/data/grouping.rb
68
78
  - lib/ruport/data/record.rb
69
79
  - lib/ruport/data/table.rb
80
+ - lib/ruport/extensions.rb
81
+ - lib/ruport/formatter.rb
70
82
  - lib/ruport/formatter/csv.rb
71
83
  - lib/ruport/formatter/html.rb
72
84
  - lib/ruport/formatter/pdf.rb
73
85
  - lib/ruport/formatter/template.rb
74
86
  - lib/ruport/formatter/text.rb
87
+ - lib/ruport/version.rb
88
+ - lib/uport.rb
75
89
  - test/controller_test.rb
76
90
  - test/csv_formatter_test.rb
77
91
  - test/data_feeder_test.rb
@@ -80,11 +94,6 @@ files:
80
94
  - test/html_formatter_test.rb
81
95
  - test/pdf_formatter_test.rb
82
96
  - test/record_test.rb
83
- - test/samples
84
- - test/table_pivot_test.rb
85
- - test/table_test.rb
86
- - test/template_test.rb
87
- - test/text_formatter_test.rb
88
97
  - test/samples/addressbook.csv
89
98
  - test/samples/data.csv
90
99
  - test/samples/data.tsv
@@ -95,11 +104,10 @@ files:
95
104
  - test/samples/test.sql
96
105
  - test/samples/test.yaml
97
106
  - test/samples/ticket_count.csv
98
- - util/bench/data
99
- - util/bench/formatter
100
- - util/bench/samples
101
- - util/bench/data/record
102
- - util/bench/data/table
107
+ - test/table_pivot_test.rb
108
+ - test/table_test.rb
109
+ - test/template_test.rb
110
+ - test/text_formatter_test.rb
103
111
  - util/bench/data/record/bench_as_vs_to.rb
104
112
  - util/bench/data/record/bench_constructor.rb
105
113
  - util/bench/data/record/bench_indexing.rb
@@ -114,54 +122,60 @@ files:
114
122
  - util/bench/formatter/bench_pdf.rb
115
123
  - util/bench/formatter/bench_text.rb
116
124
  - util/bench/samples/tattle.csv
117
- - Rakefile
118
- - README
119
- - LICENSE
120
- - AUTHORS
125
+ - util/release/freshmeat.rb
126
+ - util/release/raa.rb
127
+ has_rdoc: true
128
+ homepage: http://rubyreports.org
129
+ licenses: []
130
+
131
+ post_install_message:
132
+ rdoc_options:
133
+ - --title Ruport Documentation
134
+ - --main README
135
+ - -q
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: "0"
143
+ version:
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: "0"
149
+ version:
150
+ requirements: []
151
+
152
+ rubyforge_project: ruport
153
+ rubygems_version: 1.3.5
154
+ signing_key:
155
+ specification_version: 3
156
+ summary: A generalized Ruby report generation and templating engine.
121
157
  test_files:
122
- - test/controller_test.rb
158
+ - test/template_test.rb
159
+ - test/record_test.rb
123
160
  - test/csv_formatter_test.rb
124
161
  - test/data_feeder_test.rb
125
- - test/grouping_test.rb
126
- - test/html_formatter_test.rb
127
- - test/pdf_formatter_test.rb
128
- - test/record_test.rb
129
162
  - test/table_pivot_test.rb
163
+ - test/helpers.rb
130
164
  - test/table_test.rb
131
- - test/template_test.rb
132
165
  - test/text_formatter_test.rb
133
- rdoc_options:
134
- - --title
135
- - Ruport Documentation
136
- - --main
137
- - README
138
- - -q
139
- extra_rdoc_files:
140
- - README
141
- - LICENSE
142
- - AUTHORS
143
- executables: []
144
-
145
- extensions: []
146
-
147
- requirements: []
148
-
149
- dependencies:
150
- - !ruby/object:Gem::Dependency
151
- name: fastercsv
152
- version_requirement:
153
- version_requirements: !ruby/object:Gem::Version::Requirement
154
- requirements:
155
- - - "="
156
- - !ruby/object:Gem::Version
157
- version: 1.2.3
158
- version:
159
- - !ruby/object:Gem::Dependency
160
- name: pdf-writer
161
- version_requirement:
162
- version_requirements: !ruby/object:Gem::Version::Requirement
163
- requirements:
164
- - - "="
165
- - !ruby/object:Gem::Version
166
- version: 1.1.8
167
- version:
166
+ - test/html_formatter_test.rb
167
+ - test/grouping_test.rb
168
+ - test/controller_test.rb
169
+ - test/pdf_formatter_test.rb
170
+ - examples/centered_pdf_text_box.rb
171
+ - examples/line_plotter.rb
172
+ - examples/btree/commaleon/commaleon.rb
173
+ - examples/anon.rb
174
+ - examples/pdf_report_with_common_base.rb
175
+ - examples/row_renderer.rb
176
+ - examples/tattle_ruby_version.rb
177
+ - examples/simple_pdf_lines.rb
178
+ - examples/png_embed.rb
179
+ - examples/trac_ticket_status.rb
180
+ - examples/tattle_rubygems_version.rb
181
+ - examples/simple_templating_example.rb