obf 0.9.8.18 → 0.9.8.19
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.
- checksums.yaml +4 -4
- data/lib/obf/external.rb +1 -0
- data/lib/obf/pdf.rb +36 -16
- data/lib/obf/utils.rb +13 -18
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0e5d0262b2cc796234c4178adfe3f88bc38dfcf393a154b1bc2de1448334b61b
|
|
4
|
+
data.tar.gz: d40fe3b676d0adbd132b9156c0e123749029635b072caeb33dff06f11cf2045b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 227928642c1f9afa5951d893850698a7b1341bb9fa43de23319234e1f47a17a8131ad26c59362edb54053c65296347a37f13b24257fae059d1ed1e7558f95648
|
|
7
|
+
data.tar.gz: cfc750c84d1bdc5f29612d28543987073e40a1d8198d717725003f20ba52fc80b885bc93d8b5e8457296749119bd48b7d2b1883f1ee1f890f329d2098d7ec88e
|
data/lib/obf/external.rb
CHANGED
data/lib/obf/pdf.rb
CHANGED
|
@@ -126,6 +126,7 @@ module OBF::PDF
|
|
|
126
126
|
@res ||= /[#{RTL_SCRIPTS.map{ |script| "\\p{#{script}}" }.join}]/
|
|
127
127
|
end
|
|
128
128
|
|
|
129
|
+
# b.generate_download('1_2', 'pdf', {'include' => 'all', 'headerless' => true, 'symbol_background' => 'transparent'})
|
|
129
130
|
def self.build_page(pdf, obj, options)
|
|
130
131
|
OBF::Utils.as_progress_percent(0, 1.0) do
|
|
131
132
|
pdf.font(options['font']) if options['font'] && File.exists?(options['font'])
|
|
@@ -191,36 +192,52 @@ module OBF::PDF
|
|
|
191
192
|
obj['buttons'].each do |btn|
|
|
192
193
|
image = (obj['images_hash'] || {})[btn['image_id']]
|
|
193
194
|
if image && image['url'] && !image['data'] && !(image['path'] && options['zipper'])
|
|
195
|
+
# download the raw data from the remote URL
|
|
194
196
|
url = image['url']
|
|
195
197
|
res = OBF::Utils.get_url(url, true)
|
|
196
198
|
if res['request']
|
|
197
199
|
hydra.queue(res['request'])
|
|
198
200
|
grabs << {url: url, res: res, req: res['request'], image: image, fill: btn['background_color'] ? OBF::Utils.fix_color(btn['background_color'], 'hex') : "ffffff"}
|
|
199
201
|
end
|
|
200
|
-
elsif image && image['data']
|
|
202
|
+
elsif image && (image['data'] || (image['path'] && options['zipper']))
|
|
203
|
+
# process the data-uri or zipped image
|
|
201
204
|
grabs << {image: image, fill: btn['background_color'] ? OBF::Utils.fix_color(btn['background_color'], 'hex') : "ffffff"}
|
|
202
205
|
end
|
|
203
206
|
end
|
|
204
207
|
hydra.run
|
|
205
|
-
|
|
208
|
+
blocks = []
|
|
209
|
+
block = {}
|
|
206
210
|
grabs.each do |grab|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
+
# prevent too many svg converts from happening at the same time
|
|
212
|
+
block = block || {grabs: []}
|
|
213
|
+
block[:grabs] << grab
|
|
214
|
+
block[:has_svg] = true if grab[:type] == 'svg'
|
|
215
|
+
if block[:grabs].length > 5 && block[:has_svg]
|
|
216
|
+
blocks << block
|
|
217
|
+
block = nil
|
|
211
218
|
end
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
219
|
+
end
|
|
220
|
+
blocks.each do |block|
|
|
221
|
+
threads = []
|
|
222
|
+
block[:grabs].each do |grab|
|
|
223
|
+
if grab[:res] && grab[:res]['data']
|
|
224
|
+
grab[:image]['raw_data'] = grab[:res]['data']
|
|
225
|
+
grab[:image]['content_type'] ||= grab[:res]['content_type']
|
|
226
|
+
grab[:image]['extension'] ||= grab[:res]['extension']
|
|
227
|
+
end
|
|
228
|
+
grab[:image]['threadable'] = true
|
|
229
|
+
bg = 'white'
|
|
230
|
+
if options['transparent_background'] || options['symbol_background'] == 'transparent'
|
|
231
|
+
bg = "\##{grab[:fill]}"
|
|
232
|
+
elsif options['symbol_background'] == 'black'
|
|
233
|
+
bg = 'black'
|
|
234
|
+
end
|
|
235
|
+
res = OBF::Utils.save_image(grab[:image], options['zipper'], bg)
|
|
236
|
+
threads << res if res && !res.is_a?(String)
|
|
218
237
|
end
|
|
219
|
-
|
|
220
|
-
threads << res if res && !res.is_a?(String)
|
|
238
|
+
threads.each{|t| t[:thred].join }
|
|
221
239
|
end
|
|
222
|
-
|
|
223
|
-
grabs.each{|g| g[:image].delete('threadable') }
|
|
240
|
+
grabs.each{|g| g[:image].delete('threadable'); g[:image].delete('local_path') unless File.exist?(g[:image]['local_path']) }
|
|
224
241
|
OBF::Utils.log " done with #{grabs.length} remote images!"
|
|
225
242
|
|
|
226
243
|
obj['grid']['order'].each_with_index do |buttons, row|
|
|
@@ -273,11 +290,14 @@ module OBF::PDF
|
|
|
273
290
|
elsif options['symbol_background'] == 'black'
|
|
274
291
|
bg = 'black'
|
|
275
292
|
end
|
|
293
|
+
image['threadable'] = false
|
|
276
294
|
image_local_path = image['local_path'] if image && image['local_path'] && File.exist?(image['local_path'])
|
|
277
295
|
image_local_path ||= image && OBF::Utils.save_image(image, options['zipper'], bg)
|
|
278
296
|
if image_local_path && File.exist?(image_local_path)
|
|
279
297
|
pdf.image(image_local_path, :fit => [button_width - 10, button_height - text_height - 5], :position => :center, :vposition => :center) rescue nil
|
|
280
298
|
File.unlink image_local_path
|
|
299
|
+
else
|
|
300
|
+
OBF::Utils.log(" missing image #{image['id']} #{image_local_path}")
|
|
281
301
|
end
|
|
282
302
|
end
|
|
283
303
|
end
|
data/lib/obf/utils.rb
CHANGED
|
@@ -160,7 +160,7 @@ module OBF::Utils
|
|
|
160
160
|
end
|
|
161
161
|
|
|
162
162
|
def self.hydra
|
|
163
|
-
Typhoeus::Hydra.new(max_concurrency:
|
|
163
|
+
Typhoeus::Hydra.new(max_concurrency: 10)
|
|
164
164
|
end
|
|
165
165
|
|
|
166
166
|
def self.save_image(image, zipper=nil, background=nil)
|
|
@@ -217,39 +217,34 @@ module OBF::Utils
|
|
|
217
217
|
if image['content_type'] && image['content_type'].match(/svg/)
|
|
218
218
|
cmd = "convert -background \"#{background}\" -density 300 -resize #{size}x#{size} -gravity center -extent #{size}x#{size} #{file.path} -flatten #{file.path}.jpg"
|
|
219
219
|
OBF::Utils.log " #{cmd}"
|
|
220
|
+
image['local_path'] = "#{file.path}.jpg"
|
|
220
221
|
if image['threadable']
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
image['local_path'] = "#{file.path}.jpg"
|
|
226
|
-
end
|
|
227
|
-
end
|
|
228
|
-
return {thread: thr, image: image, type: 'svg'}
|
|
222
|
+
pid = Process.spawn(cmd)
|
|
223
|
+
thr = Process.detach(pid)
|
|
224
|
+
OBF::Utils.log " scheduled image"
|
|
225
|
+
return {thread: thr, image: image, type: 'svg', pid: pid}
|
|
229
226
|
else
|
|
230
227
|
`#{cmd}`
|
|
228
|
+
OBF::Utils.log " finished image #{File.size(image['local_path'])}"
|
|
231
229
|
end
|
|
232
230
|
# `convert -background "#{background}" -density 300 -resize #{size}x#{size} -gravity center -extent #{size}x#{size} #{file.path} -flatten #{file.path}.jpg`
|
|
233
231
|
# `rsvg-convert -w #{size} -h #{size} -a #{file.path} > #{file.path}.png`
|
|
234
232
|
else
|
|
235
233
|
cmd = "convert #{path} -density 300 -resize #{size}x#{size} -background \"#{background}\" -gravity center -extent #{size}x#{size} -flatten #{path}.jpg"
|
|
236
234
|
OBF::Utils.log " #{cmd}"
|
|
235
|
+
image['local_path'] = "#{path}.jpg"
|
|
237
236
|
if image['threadable']
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
image['local_path'] = "#{path}.jpg"
|
|
243
|
-
end
|
|
244
|
-
end
|
|
245
|
-
return {thread: thr, image: image, type: 'not_svg'}
|
|
237
|
+
pid = Process.spawn(cmd)
|
|
238
|
+
thr = Process.detach(pid)
|
|
239
|
+
OBF::Utils.log " scheduled image"
|
|
240
|
+
return {thread: thr, image: image, type: 'not_svg', pid: pid}
|
|
246
241
|
else
|
|
247
242
|
`#{cmd}`
|
|
243
|
+
OBF::Utils.log " finished image #{File.size(image['local_path'])}"
|
|
248
244
|
end
|
|
249
245
|
# `convert #{path} -density 300 -resize #{size}x#{size} -background "#{background}" -gravity center -extent #{size}x#{size} -flatten #{path}.jpg`
|
|
250
246
|
end
|
|
251
247
|
|
|
252
|
-
OBF::Utils.log " finished image"
|
|
253
248
|
image['local_path']
|
|
254
249
|
end
|
|
255
250
|
image['local_path']
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: obf
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.8.
|
|
4
|
+
version: 0.9.8.19
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brian Whitmer
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-01-
|
|
11
|
+
date: 2020-01-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: json
|