alego_pdf 2.0.1 → 3.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5234d9c582405d545e5beeb7ff2300374e532746609e7ca10302ba5fc7b2db03
4
- data.tar.gz: ecbc8915bfa7be910c9e7514d344d66a5278a385b4f8d3c5c0a996358f119f1f
3
+ metadata.gz: 2d12c47e9413bad6620a61d589ab7c2e739d42266978912d3808783a133ee43e
4
+ data.tar.gz: 8206d1a197fe6bf33c2cf60350d14a015fe2055695f13c62354ee550ca78d6ae
5
5
  SHA512:
6
- metadata.gz: 68ecf437cad98773176cd03e1692ac9a7b2df51f13c138c0712cd4c91b3db1ea8fa8389aadebcb17b2f9acb2c901a04741afda27fe75f2d74ae143b6b942875b
7
- data.tar.gz: 6becf57defb8b8b848f3842c406d97ff210c496c65743c7df5442ccac48e8760c9468b91da67ab9db9a83cfb3538fe92fdcce57a00c799c82da9bd007aed25ed
6
+ metadata.gz: b91b573155e8d17d5ba8f8a0fa2ca1dee2dd9044fd054c2715d4def4a44dfa32c3fd0fe7fd07fb5b46a49da5253f81e7f94ed6ac51c0a4ae199b443ff6afb881
7
+ data.tar.gz: 9068a35ab3ed0bacb15768eaaa05715145cd4104a40f1f8eac9b7786e82367d38275720da36f58031af97a0a3c53ba54007770589135bd62e6a5ddbce8c43658
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ v3.0.0 - 07/11/2022
2
+
3
+ Novidade:
4
+ 1) Gem alego_pdf que junta 1 ou mais PDF's num mesmo arquivo via model e ids e/ou urls passados por parâmetro.
5
+
6
+ ----
7
+
1
8
  v2.0.1 - 20/09/2022
2
9
 
3
10
  Ajuste:
data/README.md CHANGED
@@ -32,42 +32,71 @@ require 'hexapdf'
32
32
  require 'open-uri'
33
33
 
34
34
  module AlegoPdf
35
- class Merging
36
- attr_reader :ids, :model, :attribute, :filename
37
-
38
- def initialize(ids, model, attribute, filename = 'tmp/merge_files.pdf')
39
- @ids = ids
40
- @model = model
41
- @attribute = attribute
42
- @filename = filename
43
- end
35
+ class Merging
36
+ attr_reader :ids, :model, :attribute, :filename, :urls, :orderize, :target
37
+
38
+ def initialize(ids, model, attribute, filename = 'tmp/merge_files.pdf', urls = [], orderize = 'url')
39
+ @ids = ids
40
+ @model = model
41
+ @attribute = attribute
42
+ @filename = filename
43
+ @urls = urls
44
+ @orderize = orderize
45
+ @target = HexaPDF::Document.new
46
+ end
44
47
 
45
- def call
46
- array = model.is_a?(String) ? model.camelize.constantize.where(id: ids) : model.where(id: ids)
47
- target = HexaPDF::Document.new
48
+ def call
49
+ if orderize == 'url'
50
+ join_urls
51
+ join_array
52
+ else
53
+ join_array
54
+ join_urls
55
+ end
48
56
 
49
- array.each do |object|
50
- file = object[attribute]
51
- filepath = file.try(:url) || object.try(:arquivo_url)
57
+ target.write(filename, optimize: true)
58
+ end
52
59
 
53
- next if filepath.blank?
60
+ def join_urls
61
+ urls.each do |filepath|
62
+ next if filepath.blank?
54
63
 
55
- uri = URI.parse(filepath).open(&:read)
56
- tempfile = Tempfile.new
57
- tempfile.write(uri.force_encoding('UTF-8'))
58
- tempfile.close
64
+ uri = URI.parse(filepath).open(&:read)
65
+ tempfile = Tempfile.new
66
+ tempfile.write(uri.force_encoding('UTF-8'))
67
+ tempfile.close
59
68
 
60
- pdf = HexaPDF::Document.open(tempfile)
61
- pdf.pages.each { |page| target.pages << target.import(page) }
62
- end
69
+ pdf = HexaPDF::Document.open(tempfile)
70
+ pdf.pages.each { |page| target.pages << target.import(page) }
71
+ end
72
+ end
63
73
 
64
- target.write(filename, optimize: true)
65
- end
74
+ def join_array
75
+ array = model.is_a?(String) ? model.camelize.constantize.where(id: ids) : model.where(id: ids)
76
+
77
+ array.each do |object|
78
+ file = object[attribute]
79
+ filepath = file.try(:url) || object.try(:arquivo_url)
80
+
81
+ next if filepath.blank?
82
+
83
+ uri = URI.parse(filepath).open(&:read)
84
+ tempfile = Tempfile.new
85
+ tempfile.write(uri.force_encoding('UTF-8'))
86
+ tempfile.close
87
+
88
+ pdf = HexaPDF::Document.open(tempfile)
89
+ pdf.pages.each { |page| target.pages << target.import(page) }
90
+ end
66
91
  end
92
+ end
67
93
  end
68
94
  ```
69
95
  Obs.: Os parâmetros 'ids', 'model' e 'attribute' são obrigatórios. O parâmetro 'filename' é por default 'tmp/merge_files.pdf', porém pode-se atribuir um caminho pré-definido. o atributo 'filename' será o local e nome onde será salvo o arquivo temporário.
70
- Após instalar a gem 'alego_pdf', deve criar uma rota '/merge_arquivos' e deve buscar os ids dos arquivos e passá-los como parâmetro junto com o model e o atributo que onde é guardado os metadados dos arquivos. A gem procura também por um atributo chamado 'arquivo_url', caso não encontre a 'url' (ex.: attribute.try(:url)) Veja o exemplo a seguir:
96
+ O parâmetro 'urls' é um array de url's e serve para ler PDF's a partir de url e juntá-los num mesmo arquivo. Default = []. Utilizar os 'ids' e as 'urls', serve para juntar arquivos além de um model apenas, como acontece no projeto 'emendas-rails' da Alego.
97
+ Após instalar a gem 'alego_pdf', deve criar uma rota '/merge_arquivos' em seu projeto e deve buscar os ids dos arquivos e passá-los como parâmetro junto com o model, o atributo e as urls que onde é guardado os metadados dos arquivos. A gem procura também por um atributo chamado 'arquivo_url', caso não encontre a 'url' (ex.: attribute.try(:url)).
98
+ Ainda no método call, com o atributo 'orderize' podemos ordenar por urls ou ids no arquivo PDF. Default = 'url'.
99
+ Veja o exemplo a seguir:
71
100
  ```
72
101
  # organogramas_controller.rb
73
102
  def merge_arquivos
@@ -76,8 +105,9 @@ def merge_arquivos
76
105
  respond_to do |format|
77
106
  format.html
78
107
  format.pdf do
108
+ url = 'https://teste.com/teste.pdf' # url precisa ser um PDF
79
109
  filename = 'tmp/organogramas.pdf' # nome e local onde será salvo o arquivo temporário
80
- AlegoPdf::Merging.new(organograma_ids, ::Transparencia::Organograma, :arquivo, filename).call
110
+ AlegoPdf::Merging.new(organograma_ids, ::Transparencia::Organograma, :arquivo, filename, [url].compact).call
81
111
 
82
112
  pdf_filename = File.join(Rails.root, filename)
83
113
  send_file(pdf_filename, filename: 'organogramas.pdf', type: 'application/pdf')
@@ -3,18 +3,46 @@ require 'open-uri'
3
3
 
4
4
  module AlegoPdf
5
5
  class Merging
6
- attr_reader :ids, :model, :attribute, :filename
6
+ attr_reader :ids, :model, :attribute, :filename, :urls, :orderize, :target
7
7
 
8
- def initialize(ids, model, attribute, filename = 'tmp/merge_files.pdf')
8
+ def initialize(ids, model, attribute, filename = 'tmp/merge_files.pdf', urls = [], orderize = 'url')
9
9
  @ids = ids
10
10
  @model = model
11
11
  @attribute = attribute
12
12
  @filename = filename
13
+ @urls = urls
14
+ @orderize = orderize
15
+ @target = HexaPDF::Document.new
13
16
  end
14
17
 
15
18
  def call
19
+ if orderize == 'url'
20
+ join_urls
21
+ join_array
22
+ else
23
+ join_array
24
+ join_urls
25
+ end
26
+
27
+ target.write(filename, optimize: true)
28
+ end
29
+
30
+ def join_urls
31
+ urls.each do |filepath|
32
+ next if filepath.blank?
33
+
34
+ uri = URI.parse(filepath).open(&:read)
35
+ tempfile = Tempfile.new
36
+ tempfile.write(uri.force_encoding('UTF-8'))
37
+ tempfile.close
38
+
39
+ pdf = HexaPDF::Document.open(tempfile)
40
+ pdf.pages.each { |page| target.pages << target.import(page) }
41
+ end
42
+ end
43
+
44
+ def join_array
16
45
  array = model.is_a?(String) ? model.camelize.constantize.where(id: ids) : model.where(id: ids)
17
- target = HexaPDF::Document.new
18
46
 
19
47
  array.each do |object|
20
48
  file = object[attribute]
@@ -30,8 +58,6 @@ module AlegoPdf
30
58
  pdf = HexaPDF::Document.open(tempfile)
31
59
  pdf.pages.each { |page| target.pages << target.import(page) }
32
60
  end
33
-
34
- target.write(filename, optimize: true)
35
61
  end
36
62
  end
37
63
  end
@@ -1,3 +1,3 @@
1
1
  module AlegoPdf
2
- VERSION = '2.0.1'
2
+ VERSION = '3.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alego_pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo de Sá
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-20 00:00:00.000000000 Z
11
+ date: 2022-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -93,8 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
93
  - !ruby/object:Gem::Version
94
94
  version: '0'
95
95
  requirements: []
96
- rubyforge_project:
97
- rubygems_version: 2.7.6
96
+ rubygems_version: 3.3.22
98
97
  signing_key:
99
98
  specification_version: 4
100
99
  summary: Gem responsible for joining 1 or more PDF in the same file.