reportbuilder 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/History.txt +4 -1
- data/Manifest.txt +2 -0
- data/Rakefile +3 -1
- data/lib/reportbuilder.rb +18 -4
- data/lib/reportbuilder/builder.rb +1 -1
- data/lib/reportbuilder/builder/pdf.rb +67 -0
- data/lib/reportbuilder/builder/rtf.rb +7 -2
- data/lib/reportbuilder/image.rb +46 -13
- data/lib/reportbuilder/section.rb +6 -1
- data/lib/reportbuilder/table.rb +13 -6
- data/lib/reportbuilder/table/pdfbuilder.rb +36 -0
- data/test/helper_test.rb +11 -0
- data/test/test_image.rb +0 -2
- metadata +47 -13
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
-
=== 1.
|
1
|
+
=== 1.4.0 / 2010-11-26
|
2
|
+
* Basic support for pdf creation, using Prawn. SVG insertion could be realized using Prawn-svg (as vectors) or Rmagick (as bitmap)
|
3
|
+
* Added SimpleCov support
|
2
4
|
|
5
|
+
=== 1.3.0 / 2010-11-24
|
3
6
|
* Implemented loading of images via blobs and filenames.
|
4
7
|
* SVG are converted to raster before inserted of RTFs
|
5
8
|
* First (almost) complete support for Graph API on jqPlot and Flot. Test for Graph and jqPlot wrapper for html
|
data/Manifest.txt
CHANGED
@@ -385,6 +385,7 @@ examples/using_a_block.rb
|
|
385
385
|
lib/reportbuilder.rb
|
386
386
|
lib/reportbuilder/builder.rb
|
387
387
|
lib/reportbuilder/builder/html.rb
|
388
|
+
lib/reportbuilder/builder/pdf.rb
|
388
389
|
lib/reportbuilder/builder/rtf.rb
|
389
390
|
lib/reportbuilder/builder/text.rb
|
390
391
|
lib/reportbuilder/graph.rb
|
@@ -394,6 +395,7 @@ lib/reportbuilder/image.rb
|
|
394
395
|
lib/reportbuilder/section.rb
|
395
396
|
lib/reportbuilder/table.rb
|
396
397
|
lib/reportbuilder/table/htmlbuilder.rb
|
398
|
+
lib/reportbuilder/table/pdfbuilder.rb
|
397
399
|
lib/reportbuilder/table/rtfbuilder.rb
|
398
400
|
lib/reportbuilder/table/textbuilder.rb
|
399
401
|
test/helper_test.rb
|
data/Rakefile
CHANGED
@@ -12,8 +12,10 @@ Hoe.spec 'reportbuilder' do
|
|
12
12
|
self.rubyforge_name = 'ruby-statsample'
|
13
13
|
self.developer('Claudio Bustos', 'clbustos_at_gmail.com')
|
14
14
|
self.url = "http://ruby-statsample.rubyforge.org/reportbuilder/"
|
15
|
-
self.extra_deps << ["clbustos-rtf","~>0.
|
15
|
+
self.extra_deps << ["clbustos-rtf","~>0.4.0"] << ['text-table', "~>1.2"] << ["prawn", "~>0.8.4"] << ["prawn-svg","~>0.9.1"]
|
16
16
|
self.extra_dev_deps << ["nokogiri", "~>1.4"]
|
17
17
|
end
|
18
18
|
|
19
|
+
|
20
|
+
|
19
21
|
# vim: syntax=ruby
|
data/lib/reportbuilder.rb
CHANGED
@@ -52,7 +52,7 @@ class ReportBuilder
|
|
52
52
|
# Doesn't print a title if set to true
|
53
53
|
attr_accessor :no_title
|
54
54
|
# ReportBuilder version
|
55
|
-
VERSION = '1.
|
55
|
+
VERSION = '1.4.0'
|
56
56
|
DATA_DIR=File.dirname(__FILE__)+"/../data"
|
57
57
|
FormatNotFound=Class.new(Exception)
|
58
58
|
# Available formats
|
@@ -118,17 +118,22 @@ class ReportBuilder
|
|
118
118
|
self
|
119
119
|
end
|
120
120
|
# Returns an Html output
|
121
|
-
def to_html
|
121
|
+
def to_html
|
122
122
|
gen = Builder::Html.new(self,@options)
|
123
123
|
gen.parse
|
124
124
|
gen.out
|
125
125
|
end
|
126
126
|
# Returns a RTF output
|
127
|
-
def to_rtf
|
127
|
+
def to_rtf
|
128
128
|
gen = Builder::Rtf.new(self, @options)
|
129
129
|
gen.parse
|
130
130
|
gen.out
|
131
|
-
end
|
131
|
+
end
|
132
|
+
def to_pdf
|
133
|
+
gen = Builder::Pdf.new(self, @options)
|
134
|
+
gen.parse
|
135
|
+
gen.out
|
136
|
+
end
|
132
137
|
# Save a rtf file
|
133
138
|
def save_rtf(filename)
|
134
139
|
gen = Builder::Rtf.new(self,@options)
|
@@ -143,6 +148,14 @@ class ReportBuilder
|
|
143
148
|
gen.parse
|
144
149
|
gen.save(file)
|
145
150
|
end
|
151
|
+
# Save a pdf file
|
152
|
+
def save_pdf(file)
|
153
|
+
options=@options.dup
|
154
|
+
gen=Builder::Pdf.new(self, options)
|
155
|
+
gen.parse
|
156
|
+
gen.save(file)
|
157
|
+
end
|
158
|
+
|
146
159
|
# Returns a Text output
|
147
160
|
def to_text()
|
148
161
|
gen=Builder::Text.new(self, @options)
|
@@ -154,5 +167,6 @@ class ReportBuilder
|
|
154
167
|
gen.parse
|
155
168
|
gen.save(file)
|
156
169
|
end
|
170
|
+
|
157
171
|
alias_method :to_s, :to_text
|
158
172
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'prawn'
|
2
|
+
require 'prawn-svg'
|
3
|
+
require 'pp'
|
4
|
+
class ReportBuilder
|
5
|
+
class Builder
|
6
|
+
# Rtf Builder.
|
7
|
+
# Based on Prawn[http://prawn.majesticseacreature.com/]
|
8
|
+
#
|
9
|
+
class Pdf < Builder
|
10
|
+
# Pdf object.
|
11
|
+
attr_accessor :pdf
|
12
|
+
# Creates a new Pdf object
|
13
|
+
# Params:
|
14
|
+
# * <tt>builder</tt>: A ReportBuilder::Builder object or other with same interface
|
15
|
+
# * <tt>options</tt>: Hash of options.
|
16
|
+
def initialize(builder, options)
|
17
|
+
super
|
18
|
+
@pdf=Prawn::Document.new(options)
|
19
|
+
@pdf.font_size=@options[:font_size]
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.code
|
23
|
+
%w{pdf}
|
24
|
+
end
|
25
|
+
def parse
|
26
|
+
unless @builder.no_title
|
27
|
+
header(0,@builder.name)
|
28
|
+
end
|
29
|
+
parse_cycle(@builder)
|
30
|
+
end
|
31
|
+
|
32
|
+
def default_options
|
33
|
+
{
|
34
|
+
:font_size=>12
|
35
|
+
}
|
36
|
+
end
|
37
|
+
# Add a paragraph of text.
|
38
|
+
def text(t)
|
39
|
+
|
40
|
+
@pdf.text(t)
|
41
|
+
end
|
42
|
+
# Add a header of level <tt>level</tt> with text <tt>t</tt>
|
43
|
+
# Level works similar to h
|
44
|
+
def header(level, t)
|
45
|
+
@pdf.text t, :size=>15-level
|
46
|
+
end
|
47
|
+
# Add preformatted text.
|
48
|
+
def preformatted(t)
|
49
|
+
@pdf.font("Courier") do
|
50
|
+
@pdf.text t
|
51
|
+
end
|
52
|
+
end
|
53
|
+
# Returns pdf code for report
|
54
|
+
def out
|
55
|
+
@pdf.render
|
56
|
+
end
|
57
|
+
# Save pdf file
|
58
|
+
def save(filename)
|
59
|
+
@pdf.render_file(filename)
|
60
|
+
end
|
61
|
+
# Do nothing on this builder
|
62
|
+
def html(t)
|
63
|
+
# Nothing
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -33,14 +33,19 @@ class ReportBuilder
|
|
33
33
|
@header_styles=Hash.new {|h,k|
|
34
34
|
cs=CharacterStyle.new
|
35
35
|
cs.font=@font
|
36
|
-
cs.font_size=@options[:font_size]+(8-k)*
|
36
|
+
cs.font_size=@options[:font_size]+(8-k)*1.5
|
37
37
|
cs.bold=true
|
38
38
|
ps=ParagraphStyle.new
|
39
39
|
ps.justification = ParagraphStyle::CENTER_JUSTIFY
|
40
40
|
h[k]={:cs=>cs, :ps=>ps}
|
41
41
|
}
|
42
42
|
end
|
43
|
-
|
43
|
+
def parse
|
44
|
+
unless @builder.no_title
|
45
|
+
header(0,@builder.name)
|
46
|
+
end
|
47
|
+
parse_cycle(@builder)
|
48
|
+
end
|
44
49
|
def self.code
|
45
50
|
%w{rtf}
|
46
51
|
end
|
data/lib/reportbuilder/image.rb
CHANGED
@@ -10,6 +10,7 @@ class ReportBuilder
|
|
10
10
|
attr_accessor :font_cols
|
11
11
|
attr_accessor :width
|
12
12
|
attr_accessor :height
|
13
|
+
attr_accessor :svg_raster
|
13
14
|
attr_accessor :type
|
14
15
|
attr_reader :filename
|
15
16
|
attr_reader :url
|
@@ -22,7 +23,7 @@ class ReportBuilder
|
|
22
23
|
@name="Image #{@@n}"
|
23
24
|
@@n+=1
|
24
25
|
else
|
25
|
-
@name=options
|
26
|
+
@name=options.delete :name
|
26
27
|
end
|
27
28
|
|
28
29
|
default_options={
|
@@ -31,17 +32,23 @@ class ReportBuilder
|
|
31
32
|
':', '~', '.', ' ' ],
|
32
33
|
:font_rows => 8,
|
33
34
|
:font_cols => 4,
|
34
|
-
:width=>
|
35
|
-
:height=>
|
35
|
+
:width=>nil,
|
36
|
+
:height=>nil,
|
37
|
+
:svg_raster=>false
|
36
38
|
}
|
37
|
-
@options=default_options.merge
|
39
|
+
@options=default_options.merge options
|
38
40
|
@options.each {|k,v|
|
39
41
|
self.send("#{k}=",v) if self.respond_to? k
|
40
42
|
}
|
41
43
|
end
|
42
44
|
# Get image_magick version of the image
|
43
45
|
def image_magick
|
44
|
-
|
46
|
+
if ReportBuilder.has_rmagick?
|
47
|
+
_image_magick if respond_to? :_image_magick
|
48
|
+
|
49
|
+
else
|
50
|
+
raise "Requires RMagick"
|
51
|
+
end
|
45
52
|
end
|
46
53
|
# Based on http://rubyquiz.com/quiz50.html
|
47
54
|
def report_building_text(builder)
|
@@ -97,16 +104,20 @@ class ReportBuilder
|
|
97
104
|
end
|
98
105
|
# Generate the code for images on html
|
99
106
|
def generate_tag_html(builder)
|
107
|
+
attrs=""
|
108
|
+
attrs+=" height='#{:height}' " if :height
|
109
|
+
attrs+=" width='#{:width}' " if :width
|
110
|
+
|
100
111
|
if @type=='svg'
|
101
112
|
builder.html("
|
102
113
|
<div class='image'>
|
103
114
|
<!--[if IE]>
|
104
|
-
<embed class='svg'
|
115
|
+
<embed class='svg' src='#{@url}' #{attrs}'></embed>
|
105
116
|
<![endif]-->
|
106
|
-
<object class='svg' data='#{@url}'
|
117
|
+
<object class='svg' data='#{@url}' type='image/svg+xml' #{attrs} ></object>
|
107
118
|
</div>")
|
108
119
|
else
|
109
|
-
builder.html
|
120
|
+
builder.html "<img src='#{@url}' alt='#{alt}' #{attrs} />"
|
110
121
|
end
|
111
122
|
end
|
112
123
|
def create_file(directory)
|
@@ -116,13 +127,29 @@ class ReportBuilder
|
|
116
127
|
create_file(builder.directory)
|
117
128
|
generate_tag_html(builder)
|
118
129
|
end
|
130
|
+
def report_building_pdf(builder)
|
131
|
+
require 'tmpdir'
|
132
|
+
dir=Dir::mktmpdir
|
133
|
+
create_file(dir)
|
134
|
+
if @type=='svg'
|
135
|
+
if svg_raster
|
136
|
+
builder.pdf.image(generate_raster_from_svg(dir))
|
137
|
+
else
|
138
|
+
# Prawn-svg is not ready for production.
|
139
|
+
y=builder.pdf.y
|
140
|
+
builder.pdf.svg File.read(@filename), :at=>[0, y-60]
|
141
|
+
end
|
142
|
+
else
|
143
|
+
builder.pdf.image(filename, @options)
|
144
|
+
end
|
145
|
+
end
|
119
146
|
# return filename
|
120
147
|
def generate_raster_from_svg(dir)
|
121
|
-
|
122
148
|
out_file="#{dir}/#{@id}.png"
|
123
|
-
|
149
|
+
image_magick.write(out_file)
|
124
150
|
out_file
|
125
151
|
end
|
152
|
+
|
126
153
|
def report_building_rtf(builder)
|
127
154
|
require 'tmpdir'
|
128
155
|
directory=Dir::mktmpdir
|
@@ -149,8 +176,14 @@ class ReportBuilder
|
|
149
176
|
end
|
150
177
|
end
|
151
178
|
end
|
152
|
-
def
|
153
|
-
|
179
|
+
def _image_magick
|
180
|
+
that=self
|
181
|
+
img=Magick::Image.from_blob(@blob) {
|
182
|
+
if that.type=='svg'
|
183
|
+
self.format='SVG'
|
184
|
+
end
|
185
|
+
}
|
186
|
+
img.first
|
154
187
|
end
|
155
188
|
def create_file(directory)
|
156
189
|
FileUtils.mkdir_p directory+"/images"
|
@@ -171,7 +204,7 @@ class ReportBuilder
|
|
171
204
|
File.basename(@filename)=~/\.(.+)$/
|
172
205
|
@type=File.basename($1)
|
173
206
|
end
|
174
|
-
def
|
207
|
+
def _image_magick
|
175
208
|
Magick::Image.read(@filename).first
|
176
209
|
end
|
177
210
|
def create_file(directory)
|
@@ -40,9 +40,14 @@ class ReportBuilder::Section
|
|
40
40
|
end
|
41
41
|
def report_building_rtf(g)
|
42
42
|
level=g.parse_level
|
43
|
-
g.header(level,name)
|
43
|
+
g.header(level, name)
|
44
44
|
g.parse_cycle(self)
|
45
45
|
end
|
46
|
+
def report_building_pdf(g)
|
47
|
+
level=g.parse_level
|
48
|
+
g.header(level, name)
|
49
|
+
g.parse_cycle(self)
|
50
|
+
end
|
46
51
|
def add(element)
|
47
52
|
if element.is_a? ReportBuilder::Section
|
48
53
|
element.parent=self
|
data/lib/reportbuilder/table.rb
CHANGED
@@ -28,23 +28,24 @@ class ReportBuilder
|
|
28
28
|
# Array of headers
|
29
29
|
attr_accessor :header, :name
|
30
30
|
# Size for each column
|
31
|
-
attr_reader
|
31
|
+
attr_reader :max_cols
|
32
32
|
# Array of rows
|
33
|
-
attr_reader
|
33
|
+
attr_reader :rows
|
34
|
+
attr_accessor :options
|
34
35
|
# Create a new table.
|
35
36
|
# Options: :name, :header
|
36
37
|
# Use:
|
37
38
|
# table=ReportBuilder::Table.new(:header =>["var1","var2"])
|
38
39
|
def initialize(opts=Hash.new, &block)
|
39
40
|
raise ArgumentError,"opts should be a Hash" if !opts.is_a? Hash
|
40
|
-
|
41
|
-
if
|
41
|
+
@options=DEFAULT_OPTIONS.merge opts
|
42
|
+
if @options[:name].nil?
|
42
43
|
@name= "Table #{@@n}"
|
43
44
|
@@n+=1
|
44
45
|
else
|
45
|
-
@name
|
46
|
+
@name=@options.delete :name
|
46
47
|
end
|
47
|
-
@header
|
48
|
+
@header=@options.delete :header
|
48
49
|
@rows=[]
|
49
50
|
@max_cols=[]
|
50
51
|
if block
|
@@ -124,6 +125,12 @@ class ReportBuilder
|
|
124
125
|
table_builder=ReportBuilder::Table::RtfBuilder.new(builder, self)
|
125
126
|
table_builder.generate
|
126
127
|
end
|
128
|
+
def report_building_pdf(builder)
|
129
|
+
require 'reportbuilder/table/pdfbuilder'
|
130
|
+
table_builder=ReportBuilder::Table::PdfBuilder.new(builder, self)
|
131
|
+
table_builder.generate
|
132
|
+
end
|
133
|
+
|
127
134
|
def total_width # :nodoc:
|
128
135
|
if @max_cols.size>0
|
129
136
|
@max_cols.inject(0){|a,v| a+(v+3)}+1
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'text-table'
|
2
|
+
require 'prawn/table'
|
3
|
+
class ReportBuilder
|
4
|
+
class Table
|
5
|
+
# Text Builder for ReportBuilder::Table objects.
|
6
|
+
#
|
7
|
+
# Uses Aaron Tinio's text-table gem[http://github.com/aptinio/text-table]
|
8
|
+
|
9
|
+
class PdfBuilder < ElementBuilder
|
10
|
+
def generate()
|
11
|
+
t=@element
|
12
|
+
@pdf=@builder.pdf
|
13
|
+
@rowspans=[]
|
14
|
+
@pdf.text t.name, :size=>14
|
15
|
+
return if t.header.size+t.rows.size==0
|
16
|
+
has_header=t.header.size>0
|
17
|
+
if has_header
|
18
|
+
t_options=t.options.merge({:headers=>t.header})
|
19
|
+
@pdf.table(t.rows.map{|row| parse_row(row)}, t_options) do
|
20
|
+
row(0).style(:style => :bold, :background_color => 'cccccc')
|
21
|
+
end
|
22
|
+
else
|
23
|
+
@pdf.table(t.rows.map{|row| parse_row(row)}, t.options)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
# Parse a row
|
27
|
+
def parse_row(row)
|
28
|
+
if row==:hr
|
29
|
+
[]
|
30
|
+
else
|
31
|
+
row
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/test/helper_test.rb
CHANGED
@@ -1,4 +1,15 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__)+"/../lib")
|
2
|
+
begin
|
3
|
+
require 'simplecov'
|
4
|
+
|
5
|
+
SimpleCov.start do
|
6
|
+
add_filter '/test/'
|
7
|
+
add_filter '/examples/'
|
8
|
+
add_group 'Libraries', 'lib'
|
9
|
+
end
|
10
|
+
rescue LoadError
|
11
|
+
end
|
12
|
+
|
2
13
|
require "reportbuilder"
|
3
14
|
require 'nokogiri'
|
4
15
|
require 'minitest/unit'
|
data/test/test_image.rb
CHANGED
@@ -11,7 +11,6 @@ class TestReportbuilderImage < MiniTest::Unit::TestCase
|
|
11
11
|
end
|
12
12
|
def test_image_text
|
13
13
|
@rp.add(ReportBuilder::ImageFilename.new(@datadir+"/sheep.jpg"))
|
14
|
-
|
15
14
|
expected= <<-HERE
|
16
15
|
Test
|
17
16
|
+--------------------------------+
|
@@ -49,7 +48,6 @@ Test
|
|
49
48
|
assert_equal(out, File.read(image_blob.filename))
|
50
49
|
assert_match(/img src='#{image_blob.url}'/, @rp.to_html)
|
51
50
|
assert_match(/\\pict\\picw128\\pich112\\bliptag\d+\\jpegblip/, @rp.to_rtf)
|
52
|
-
|
53
51
|
end
|
54
52
|
def test_image_blob_svg
|
55
53
|
svg='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" width="200px" height="50px">
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reportbuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Claudio Bustos
|
@@ -36,7 +36,7 @@ cert_chain:
|
|
36
36
|
rpP0jjs0
|
37
37
|
-----END CERTIFICATE-----
|
38
38
|
|
39
|
-
date: 2010-11-
|
39
|
+
date: 2010-11-26 00:00:00 -03:00
|
40
40
|
default_executable:
|
41
41
|
dependencies:
|
42
42
|
- !ruby/object:Gem::Dependency
|
@@ -47,12 +47,12 @@ dependencies:
|
|
47
47
|
requirements:
|
48
48
|
- - ~>
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
hash:
|
50
|
+
hash: 15
|
51
51
|
segments:
|
52
52
|
- 0
|
53
|
-
-
|
53
|
+
- 4
|
54
54
|
- 0
|
55
|
-
version: 0.
|
55
|
+
version: 0.4.0
|
56
56
|
type: :runtime
|
57
57
|
version_requirements: *id001
|
58
58
|
- !ruby/object:Gem::Dependency
|
@@ -71,9 +71,41 @@ dependencies:
|
|
71
71
|
type: :runtime
|
72
72
|
version_requirements: *id002
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
|
-
name:
|
74
|
+
name: prawn
|
75
75
|
prerelease: false
|
76
76
|
requirement: &id003 !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ~>
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
hash: 55
|
82
|
+
segments:
|
83
|
+
- 0
|
84
|
+
- 8
|
85
|
+
- 4
|
86
|
+
version: 0.8.4
|
87
|
+
type: :runtime
|
88
|
+
version_requirements: *id003
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: prawn-svg
|
91
|
+
prerelease: false
|
92
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ~>
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
hash: 57
|
98
|
+
segments:
|
99
|
+
- 0
|
100
|
+
- 9
|
101
|
+
- 1
|
102
|
+
version: 0.9.1
|
103
|
+
type: :runtime
|
104
|
+
version_requirements: *id004
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
name: rubyforge
|
107
|
+
prerelease: false
|
108
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
77
109
|
none: false
|
78
110
|
requirements:
|
79
111
|
- - ">="
|
@@ -85,11 +117,11 @@ dependencies:
|
|
85
117
|
- 4
|
86
118
|
version: 2.0.4
|
87
119
|
type: :development
|
88
|
-
version_requirements: *
|
120
|
+
version_requirements: *id005
|
89
121
|
- !ruby/object:Gem::Dependency
|
90
122
|
name: nokogiri
|
91
123
|
prerelease: false
|
92
|
-
requirement: &
|
124
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
93
125
|
none: false
|
94
126
|
requirements:
|
95
127
|
- - ~>
|
@@ -100,11 +132,11 @@ dependencies:
|
|
100
132
|
- 4
|
101
133
|
version: "1.4"
|
102
134
|
type: :development
|
103
|
-
version_requirements: *
|
135
|
+
version_requirements: *id006
|
104
136
|
- !ruby/object:Gem::Dependency
|
105
137
|
name: hoe
|
106
138
|
prerelease: false
|
107
|
-
requirement: &
|
139
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
108
140
|
none: false
|
109
141
|
requirements:
|
110
142
|
- - ">="
|
@@ -116,7 +148,7 @@ dependencies:
|
|
116
148
|
- 0
|
117
149
|
version: 2.7.0
|
118
150
|
type: :development
|
119
|
-
version_requirements: *
|
151
|
+
version_requirements: *id007
|
120
152
|
description: Report Abstract Interface. Creates text, html and rtf output, based on a common framework.
|
121
153
|
email:
|
122
154
|
- clbustos_at_gmail.com
|
@@ -516,6 +548,7 @@ files:
|
|
516
548
|
- lib/reportbuilder.rb
|
517
549
|
- lib/reportbuilder/builder.rb
|
518
550
|
- lib/reportbuilder/builder/html.rb
|
551
|
+
- lib/reportbuilder/builder/pdf.rb
|
519
552
|
- lib/reportbuilder/builder/rtf.rb
|
520
553
|
- lib/reportbuilder/builder/text.rb
|
521
554
|
- lib/reportbuilder/graph.rb
|
@@ -525,6 +558,7 @@ files:
|
|
525
558
|
- lib/reportbuilder/section.rb
|
526
559
|
- lib/reportbuilder/table.rb
|
527
560
|
- lib/reportbuilder/table/htmlbuilder.rb
|
561
|
+
- lib/reportbuilder/table/pdfbuilder.rb
|
528
562
|
- lib/reportbuilder/table/rtfbuilder.rb
|
529
563
|
- lib/reportbuilder/table/textbuilder.rb
|
530
564
|
- test/helper_test.rb
|
metadata.gz.sig
CHANGED
Binary file
|