beardley 1.3.0 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/beardley.rb +21 -22
- data/lib/beardley/report.rb +51 -50
- data/lib/beardley/version.rb +4 -4
- metadata +17 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f58f515d166e39603ec3f4728ec495dfc01d7fe
|
4
|
+
data.tar.gz: a4a30e2b36d687576a5b5b6cc14d20d8bda182ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6b12e641c0392c07aab5cae431909070cce792cfaf564e0d8690a9e07609267a5d705d096a2fa5c588a8aa796f2ec5e1d68265352fcff3eb850c5f1868532bb
|
7
|
+
data.tar.gz: f3a7b78287225a60b9a24ca638841a5ae0c4b56e0400e5f71902d4847b9dbef51f9e5397947f57f2aa9401eb6d332007016508d79e46aa9f08e05de4b1d9755c
|
data/lib/beardley.rb
CHANGED
@@ -21,31 +21,29 @@
|
|
21
21
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
|
24
|
-
require
|
25
|
-
require
|
26
|
-
require
|
27
|
-
require
|
28
|
-
require
|
29
|
-
|
24
|
+
require 'beardley/version'
|
25
|
+
require 'pathname'
|
26
|
+
require 'digest'
|
27
|
+
require 'rjb'
|
28
|
+
require 'rjb-loader' if ENV['DISABLED_JAVA'].to_i.zero?
|
30
29
|
|
31
30
|
module Beardley
|
32
|
-
|
33
31
|
class << self
|
34
32
|
attr_accessor :config, :exporters
|
35
33
|
|
36
34
|
# Changes the level of verbosity
|
37
35
|
def with_warnings(flag = nil)
|
38
|
-
old_verbose
|
36
|
+
old_verbose = $VERBOSE
|
37
|
+
$VERBOSE = flag
|
39
38
|
yield
|
40
39
|
ensure
|
41
40
|
$VERBOSE = old_verbose
|
42
41
|
end
|
43
|
-
|
44
42
|
end
|
45
43
|
|
46
44
|
# Default report params
|
47
45
|
self.config = {
|
48
|
-
report_params: {}
|
46
|
+
report_params: {}
|
49
47
|
}
|
50
48
|
self.exporters = {
|
51
49
|
odt: 'net.sf.jasperreports.engine.export.oasis.JROdtExporter',
|
@@ -54,21 +52,22 @@ module Beardley
|
|
54
52
|
docx: 'net.sf.jasperreports.engine.export.ooxml.JRDocxExporter',
|
55
53
|
xlsx: 'net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter'
|
56
54
|
}
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
55
|
+
|
56
|
+
if ENV['DISABLED_JAVA'].to_i.zero?
|
57
|
+
RjbLoader.before_load do |config|
|
58
|
+
Dir[Pathname.new(__FILE__).dirname.join('..', 'vendor', 'java', '*.jar')].each do |path|
|
59
|
+
config.classpath << File::PATH_SEPARATOR + File.expand_path(path)
|
60
|
+
end
|
61
61
|
end
|
62
|
-
end
|
63
62
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
63
|
+
RjbLoader.after_load do |_config|
|
64
|
+
_Locale = Rjb.import('java.util.Locale')
|
65
|
+
Beardley.config[:report_params]['REPORT_LOCALE'] = _Locale.new('en', 'US')
|
66
|
+
Beardley.config[:report_params]['XML_LOCALE'] = _Locale.new('en', 'US')
|
67
|
+
Beardley.config[:report_params]['XML_DATE_PATTERN'] = "yyyy-MM-dd'T'HH:mm:ss"
|
68
|
+
Beardley.config[:report_params]['XML_NUMBER_PATTERN'] = '###0.00'
|
69
|
+
end
|
70
70
|
end
|
71
71
|
|
72
72
|
autoload :Report, 'beardley/report'
|
73
|
-
|
74
73
|
end
|
data/lib/beardley/report.rb
CHANGED
@@ -22,33 +22,33 @@
|
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
|
24
24
|
module Beardley
|
25
|
-
|
26
25
|
# This class permit to produce reports in PDF, ODT and DOCX using Jasper
|
27
26
|
class Report
|
28
27
|
attr_reader :source_file, :object_file
|
29
|
-
|
28
|
+
|
30
29
|
# Constructor for a report generator
|
31
30
|
def initialize(report, options = {})
|
32
31
|
@parameters = options.delete(:report) || {}
|
33
|
-
@source_file
|
32
|
+
@source_file = nil
|
33
|
+
@object_file = nil
|
34
34
|
if report.is_a?(Pathname)
|
35
|
-
@source_file = report if report.extname.
|
36
|
-
@object_file = report if report.extname.
|
35
|
+
@source_file = report if report.extname.casecmp('.jrxml').zero? || report.extname.casecmp('.xml').zero?
|
36
|
+
@object_file = report if report.extname.casecmp('.jasper').zero?
|
37
37
|
elsif report.is_a?(String)
|
38
38
|
hash = Digest::SHA256.hexdigest(report)
|
39
|
-
@source_file = Pathname.new(options[:tmp_dir] ||
|
39
|
+
@source_file = Pathname.new(options[:tmp_dir] || '/tmp').join('report-' + hash + '.jrxml')
|
40
40
|
File.open(@source_file, 'wb') do |f|
|
41
41
|
f.write(report)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
if locale = options.delete(:locale)
|
45
|
-
locale_parts = locale.split(
|
46
|
-
_Locale = Rjb
|
47
|
-
@parameters[
|
45
|
+
locale_parts = locale.split('-')[0..2]
|
46
|
+
_Locale = Rjb.import('java.util.Locale')
|
47
|
+
@parameters['REPORT_LOCALE'] = _Locale.new(*locale_parts)
|
48
48
|
end
|
49
|
-
@object_file ||= @source_file.dirname.join(@source_file.basename.to_s +
|
49
|
+
@object_file ||= @source_file.dirname.join(@source_file.basename.to_s + '.jasper')
|
50
50
|
unless @object_file.is_a?(Pathname)
|
51
|
-
raise ArgumentError,
|
51
|
+
raise ArgumentError, 'An object must be given at least'
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -56,34 +56,34 @@ module Beardley
|
|
56
56
|
def to_pdf(*args)
|
57
57
|
options = extract_options!(args)
|
58
58
|
datasource = args[0]
|
59
|
-
_JasperPrint = Rjb
|
60
|
-
_JasperExportManager = Rjb
|
61
|
-
|
59
|
+
_JasperPrint = Rjb.import('net.sf.jasperreports.engine.JasperPrint')
|
60
|
+
_JasperExportManager = Rjb.import('net.sf.jasperreports.engine.JasperExportManager')
|
61
|
+
_JasperExportManager._invoke('exportReportToPdf', 'Lnet.sf.jasperreports.engine.JasperPrint;', prepare(datasource))
|
62
62
|
end
|
63
63
|
|
64
64
|
# Export report to ODT with given datasource
|
65
65
|
def to_odt(*args)
|
66
|
-
|
66
|
+
to(:odt, *args)
|
67
67
|
end
|
68
68
|
|
69
69
|
# Export report to ODS with given datasource
|
70
70
|
def to_ods(*args)
|
71
|
-
|
71
|
+
to(:ods, *args)
|
72
72
|
end
|
73
73
|
|
74
74
|
# Export report to CSV with given datasource
|
75
75
|
def to_csv(*args)
|
76
|
-
|
76
|
+
to(:csv, *args)
|
77
77
|
end
|
78
78
|
|
79
79
|
# Export report to DOCX with given datasource
|
80
80
|
def to_docx(*args)
|
81
|
-
|
81
|
+
to(:docx, *args)
|
82
82
|
end
|
83
83
|
|
84
84
|
# Export report to XLSX with given datasource
|
85
85
|
def to_xlsx(*args)
|
86
|
-
|
86
|
+
to(:xlsx, *args)
|
87
87
|
end
|
88
88
|
|
89
89
|
# Generic method to export to some format like ODT and DOCX as file in the given place
|
@@ -92,21 +92,27 @@ module Beardley
|
|
92
92
|
datasource = args[0]
|
93
93
|
path = options[:path] || File.join(Dir.tmpdir, "beardley_#{Time.now.to_i.to_s(36)}_#{rand(100_000_000_000).to_s(36)}.#{format}")
|
94
94
|
if format == :pdf
|
95
|
-
_JasperPrint = Rjb
|
96
|
-
_JasperExportManager = Rjb
|
97
|
-
_JasperExportManager._invoke('exportReportToPdfFile', 'Lnet.sf.jasperreports.engine.JasperPrint;Ljava.lang.String;', prepare(datasource), Rjb
|
95
|
+
_JasperPrint = Rjb.import('net.sf.jasperreports.engine.JasperPrint')
|
96
|
+
_JasperExportManager = Rjb.import('net.sf.jasperreports.engine.JasperExportManager')
|
97
|
+
_JasperExportManager._invoke('exportReportToPdfFile', 'Lnet.sf.jasperreports.engine.JasperPrint;Ljava.lang.String;', prepare(datasource), Rjb.import('java.lang.String').new(path.to_s))
|
98
98
|
elsif Beardley.exporters[format]
|
99
|
-
exporter = Beardley.with_warnings { Rjb
|
100
|
-
_JRExporterParameter = Rjb
|
99
|
+
exporter = Beardley.with_warnings { Rjb.import(Beardley.exporters[format]) }.new
|
100
|
+
_JRExporterParameter = Rjb.import('net.sf.jasperreports.engine.JRExporterParameter')
|
101
101
|
exporter.setParameter(_JRExporterParameter.JASPER_PRINT, prepare(datasource))
|
102
102
|
exporter.setParameter(_JRExporterParameter.OUTPUT_FILE_NAME, path.to_s)
|
103
103
|
exporter.exportReport
|
104
104
|
else
|
105
105
|
raise "Invalid export format: #{format.inspect}"
|
106
106
|
end
|
107
|
-
|
107
|
+
path
|
108
108
|
end
|
109
109
|
|
110
|
+
def compile(xml_path, compiled_path)
|
111
|
+
if File.exist?(xml_path)
|
112
|
+
_JasperCompileManager = Rjb.import('net.sf.jasperreports.engine.JasperCompileManager')
|
113
|
+
_JasperCompileManager.compileReportToFile(xml_path, compiled_path)
|
114
|
+
end
|
115
|
+
end
|
110
116
|
|
111
117
|
# XLS and RTF are not suitable anymore
|
112
118
|
# NOTE: JasperReports can not produce DOC files
|
@@ -118,64 +124,63 @@ module Beardley
|
|
118
124
|
options = extract_options!(args)
|
119
125
|
datasource = args[0]
|
120
126
|
file = Tempfile.new("to_#{format}")
|
121
|
-
exporter = Beardley.with_warnings { Rjb
|
122
|
-
_JRExporterParameter = Rjb
|
127
|
+
exporter = Beardley.with_warnings { Rjb.import(Beardley.exporters[format]) }.new
|
128
|
+
_JRExporterParameter = Rjb.import('net.sf.jasperreports.engine.JRExporterParameter')
|
123
129
|
exporter.setParameter(_JRExporterParameter.JASPER_PRINT, prepare(datasource))
|
124
130
|
exporter.setParameter(_JRExporterParameter.OUTPUT_FILE_NAME, file.path.to_s)
|
125
131
|
exporter.exportReport
|
126
132
|
file.rewind
|
127
133
|
report = file.read
|
128
134
|
file.close(true)
|
129
|
-
|
135
|
+
report
|
130
136
|
end
|
131
137
|
|
132
138
|
# Extract options from a list of arguments
|
133
139
|
def extract_options!(args)
|
134
|
-
|
140
|
+
(args[-1].is_a?(Hash) ? args.delete_at(-1) : {})
|
135
141
|
end
|
136
142
|
|
137
143
|
# Create object file if not exist and load datasource
|
138
144
|
def prepare(datasource = nil)
|
139
145
|
# Compile it, if needed
|
140
146
|
if @source_file && ((!@object_file.exist? && @source_file.exist?) || (@source_file.exist? && @source_file.mtime > @object_file.mtime))
|
141
|
-
_JasperCompileManager = Rjb
|
147
|
+
_JasperCompileManager = Rjb.import('net.sf.jasperreports.engine.JasperCompileManager')
|
142
148
|
_JasperCompileManager.compileReportToFile(@source_file.to_s, @object_file.to_s)
|
143
149
|
end
|
144
150
|
load_datasource(datasource)
|
145
151
|
end
|
146
152
|
|
147
|
-
|
148
153
|
# Build the default parameters Hash for printing
|
149
154
|
def prepare_params
|
150
|
-
_HashMap = Rjb
|
151
|
-
_JavaString = Rjb
|
155
|
+
_HashMap = Rjb.import('java.util.HashMap')
|
156
|
+
_JavaString = Rjb.import('java.lang.String')
|
152
157
|
|
153
158
|
# Converting default report params to java HashMap
|
154
159
|
params = _HashMap.new
|
155
|
-
Beardley.config[:report_params].each do |k,v|
|
160
|
+
Beardley.config[:report_params].each do |k, v|
|
156
161
|
params.put(k, v)
|
157
162
|
end
|
158
|
-
|
163
|
+
|
159
164
|
# Convert the ruby parameters' hash to a java HashMap, but keeps it as
|
160
165
|
# default when they already represent a JRB entity.
|
161
166
|
# Pay attention that, for now, all other parameters are converted to string!
|
162
167
|
@parameters.each do |key, value|
|
163
168
|
params.put(_JavaString.new(key.to_s), parameter_value_of(value))
|
164
169
|
end
|
165
|
-
|
166
|
-
|
170
|
+
|
171
|
+
params
|
167
172
|
end
|
168
173
|
|
169
174
|
# Load parseable XML datasource with java component
|
170
175
|
def load_datasource(datasource = nil)
|
171
176
|
jasper_params = prepare_params
|
172
177
|
|
173
|
-
# Parse and load XML as datasource
|
178
|
+
# Parse and load XML as datasource
|
174
179
|
if datasource
|
175
|
-
_InputSource = Rjb
|
176
|
-
_StringReader = Rjb
|
177
|
-
_JRXmlUtils = Rjb
|
178
|
-
_JRXPathQueryExecuterFactory = Beardley.with_warnings { Rjb
|
180
|
+
_InputSource = Rjb.import('org.xml.sax.InputSource')
|
181
|
+
_StringReader = Rjb.import('java.io.StringReader')
|
182
|
+
_JRXmlUtils = Rjb.import('net.sf.jasperreports.engine.util.JRXmlUtils')
|
183
|
+
_JRXPathQueryExecuterFactory = Beardley.with_warnings { Rjb.import('net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory') }
|
179
184
|
input_source = _InputSource.new
|
180
185
|
input_source.setCharacterStream(_StringReader.new(datasource.to_s))
|
181
186
|
data_document = Beardley.with_warnings do
|
@@ -185,21 +190,19 @@ module Beardley
|
|
185
190
|
end
|
186
191
|
|
187
192
|
# Build JasperPrint
|
188
|
-
|
193
|
+
fill_report(jasper_params, datasource)
|
189
194
|
end
|
190
195
|
|
191
|
-
|
192
196
|
# Fill the report with valid method depending on datasource
|
193
197
|
def fill_report(params, datasource = nil)
|
194
|
-
_JasperFillManager
|
198
|
+
_JasperFillManager = Rjb.import('net.sf.jasperreports.engine.JasperFillManager')
|
195
199
|
if datasource
|
196
200
|
return _JasperFillManager.fillReport(@object_file.to_s, params)
|
197
201
|
else
|
198
|
-
_JREmptyDataSource
|
202
|
+
_JREmptyDataSource = Rjb.import('net.sf.jasperreports.engine.JREmptyDataSource')
|
199
203
|
return _JasperFillManager.fillReport(@object_file.to_s, params, _JREmptyDataSource.new)
|
200
204
|
end
|
201
205
|
end
|
202
|
-
|
203
206
|
|
204
207
|
# Returns the value without conversion when it's converted to Java Types.
|
205
208
|
# When isn't a Rjb class, returns a Java String of it.
|
@@ -209,10 +212,8 @@ module Beardley
|
|
209
212
|
if param.class.parent == Rjb
|
210
213
|
param
|
211
214
|
else
|
212
|
-
Rjb
|
215
|
+
Rjb.import('java.lang.String').new(param.to_s)
|
213
216
|
end
|
214
217
|
end
|
215
|
-
|
216
218
|
end
|
217
|
-
|
218
219
|
end
|
data/lib/beardley/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beardley
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brice Texier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rjb
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: term-ansicolor
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1'
|
97
111
|
description: Generate reports using JasperReports reporting tool
|
98
112
|
email: burisu@oneiros.fr
|
99
113
|
executables: []
|
@@ -133,9 +147,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
147
|
version: '0'
|
134
148
|
requirements: []
|
135
149
|
rubyforge_project:
|
136
|
-
rubygems_version: 2.
|
150
|
+
rubygems_version: 2.5.2
|
137
151
|
signing_key:
|
138
152
|
specification_version: 4
|
139
153
|
summary: JasperReports integration
|
140
154
|
test_files: []
|
141
|
-
has_rdoc:
|