reportbuilder 1.3.0 → 1.4.0
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.
- 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
|