alego_pdf 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +56 -26
- data/alego_pdf-1.0.0.gem +0 -0
- data/alego_pdf.gemspec +3 -3
- data/lib/alego_pdf/merging.rb +12 -4
- data/lib/alego_pdf/version.rb +1 -1
- metadata +12 -13
- data/.gitignore +0 -18
- data/.gitlab-ci.yml +0 -28
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c18e67ee692d9a16b56d8a3d9cfde913dd5c344c
|
4
|
+
data.tar.gz: a769b0fd00f864c4f924c4242752ab28a62a02e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1911376a281719e8830569f0d890ebc2e6c21bb1cae6019d4cdaac44feabe02af644adbed26d3b61633c8ab3a7592d2bd81665e3c7c069b05c3cb096539c2e30
|
7
|
+
data.tar.gz: 0c9007c161e74d0ab7d362fd8b8dbc46a1a52578f92e8fc5ad188e7d47f71f0c29e8e4fdd5bd755c491bf0ebded17ed17bbc708b9bd58a5569f8c1614f03af45
|
data/README.md
CHANGED
@@ -26,49 +26,79 @@ Ou instale isto você mesmo usando o comando:
|
|
26
26
|
## Uso
|
27
27
|
A gem 'alego_pdf' depende da gem 'hexapdf' para fazer a juntada de arquivos.
|
28
28
|
Veja mais sobre a gem 'hexapdf' no Github: https://github.com/gettalong/hexapdf
|
29
|
-
A gem 'alego_pdf' faz a leitura dos arquivos via URI e Tempfile e a gem 'hexapdf' junta-os. Veja o exemplo na gem alego_pdf:
|
30
|
-
|
29
|
+
A gem 'alego_pdf' busca os objeto faz a leitura dos arquivos via URI e Tempfile e a gem 'hexapdf' junta-os. Veja o exemplo na gem alego_pdf:
|
31
30
|
```
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
31
|
+
require 'hexapdf'
|
32
|
+
require 'open-uri'
|
33
|
+
|
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
|
44
43
|
end
|
45
44
|
|
46
|
-
|
47
|
-
|
48
|
-
|
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
|
+
|
49
|
+
array.each do |objeto|
|
50
|
+
file = objeto[attribute]
|
51
|
+
filepath = file.try(:url) || objeto.try(:arquivo_url)
|
49
52
|
|
50
|
-
|
53
|
+
next if filepath.blank?
|
54
|
+
|
55
|
+
uri = URI.parse(filepath).open(&:read)
|
56
|
+
tempfile = Tempfile.new
|
57
|
+
tempfile.write(uri.force_encoding('UTF-8'))
|
58
|
+
tempfile.close
|
59
|
+
|
60
|
+
pdf = HexaPDF::Document.open(tempfile)
|
61
|
+
pdf.pages.each { |page| target.pages << target.import(page) }
|
62
|
+
end
|
51
63
|
|
64
|
+
target.write(filename, optimize: true)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
52
68
|
```
|
69
|
+
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.
|
70
|
+
Após instalar a gem 'alego_pdf', deve criar uma rota '/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:
|
71
|
+
```
|
72
|
+
# organogramas_controller.rb
|
53
73
|
def merge_arquivos
|
54
|
-
|
55
|
-
# Exemplo: https://spiderminio-dev.al.go.leg.br:9000/portal-rails/uploads/transparencia/organograma/arquivo/1/Manual_do_stimuus_-_6_Instalando_o_esti%CC%81mulo_no_seu_aplicativo.pdf?X-Amz-Expires=600&X-Amz-Date=20220909T165125Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=BUjuSkJYyf0wzRmG%2F20220909%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=791bbc7db8aac7bd0c61dc7a60d04ec3d39f6d63d60f9d971383c97b55e9815a
|
56
|
-
|
57
|
-
filepaths = Model.order('id desc').map(&:arquivo_url)
|
74
|
+
organograma_ids = ::Transparencia::Organograma.order('data desc').map(&:id)
|
58
75
|
|
59
76
|
respond_to do |format|
|
60
77
|
format.html
|
61
78
|
format.pdf do
|
62
|
-
filename = 'tmp/
|
63
|
-
AlegoPdf::Merging.new(
|
79
|
+
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
|
64
81
|
|
65
82
|
pdf_filename = File.join(Rails.root, filename)
|
66
|
-
send_file(pdf_filename, filename: '
|
83
|
+
send_file(pdf_filename, filename: 'organogramas.pdf', type: 'application/pdf')
|
67
84
|
end
|
68
85
|
end
|
69
86
|
end
|
70
87
|
```
|
71
|
-
|
88
|
+
PS: caso não exista nenhum arquivo, é feito download de uma página em branco, portanto certifique-se que contenha ao menos 1 objeto com upload PDF antes fazer a chamada AlegoPdf::Merging ou apresentar o botão na view que chama a rota e faz o download dos arquivos. Veja o exemplo:
|
89
|
+
```
|
90
|
+
// index.html.erb
|
91
|
+
<% @organograma_pdf_any = ::Transparencia::Organograma.any?(&:arquivo_url) # verifica se existe ao menos 1 url do arquivo %>
|
92
|
+
|
93
|
+
<% if @organograma_pdf_any %>
|
94
|
+
<a href="/organogramas/merge_arquivos.pdf" target="_blank" title="Juntar arquivos" class="bt bt--secundario">
|
95
|
+
Todos organogramas
|
96
|
+
<svg class="ico">
|
97
|
+
<use xlink:href="<%= asset_path('ico.svg#download') %>" />
|
98
|
+
</svg>
|
99
|
+
</a>
|
100
|
+
<% end %>
|
101
|
+
```
|
72
102
|
## Contribuição
|
73
103
|
|
74
104
|
Relatórios de bugs e pull requests são bem-vindos no GitLab em https://gitlab.al.go.leg.br/sistemas/gem/alego_pdf.
|
data/alego_pdf-1.0.0.gem
ADDED
Binary file
|
data/alego_pdf.gemspec
CHANGED
@@ -5,9 +5,9 @@ Gem::Specification.new do |spec|
|
|
5
5
|
spec.version = AlegoPdf::VERSION
|
6
6
|
spec.authors = ['Rodrigo de Sá']
|
7
7
|
spec.email = ['rodrigo.sa@al.go.leg.br']
|
8
|
-
spec.homepage = 'https://gitlab.al.go.leg.br/gem/alego_pdf'
|
9
|
-
spec.summary =
|
10
|
-
spec.description =
|
8
|
+
spec.homepage = 'https://gitlab.al.go.leg.br/sistemas/gem/alego_pdf'
|
9
|
+
spec.summary = "Gem responsible for joining 1 or more PDF in the same file."
|
10
|
+
spec.description = "Gem responsible for joining 1 or more PDF in the same file."
|
11
11
|
spec.license = 'MIT'
|
12
12
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
|
13
13
|
|
data/lib/alego_pdf/merging.rb
CHANGED
@@ -3,17 +3,25 @@ require 'open-uri'
|
|
3
3
|
|
4
4
|
module AlegoPdf
|
5
5
|
class Merging
|
6
|
-
attr_reader :
|
6
|
+
attr_reader :ids, :model, :attribute, :filename
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
8
|
+
def initialize(ids, model, attribute, filename = 'tmp/merge_files.pdf')
|
9
|
+
@ids = ids
|
10
|
+
@model = model
|
11
|
+
@attribute = attribute
|
10
12
|
@filename = filename
|
11
13
|
end
|
12
14
|
|
13
15
|
def call
|
16
|
+
array = model.is_a?(String) ? model.camelize.constantize.where(id: ids) : model.where(id: ids)
|
14
17
|
target = HexaPDF::Document.new
|
15
18
|
|
16
|
-
|
19
|
+
array.each do |object|
|
20
|
+
file = object[attribute]
|
21
|
+
filepath = file.try(:url) || object.try(:arquivo_url)
|
22
|
+
|
23
|
+
next if filepath.blank?
|
24
|
+
|
17
25
|
uri = URI.parse(filepath).open(&:read)
|
18
26
|
tempfile = Tempfile.new
|
19
27
|
tempfile.write(uri.force_encoding('UTF-8'))
|
data/lib/alego_pdf/version.rb
CHANGED
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:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rodrigo de Sá
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-09-
|
11
|
+
date: 2022-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,34 +94,32 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
-
description:
|
97
|
+
description: Gem responsible for joining 1 or more PDF in the same file.
|
98
98
|
email:
|
99
99
|
- rodrigo.sa@al.go.leg.br
|
100
100
|
executables: []
|
101
101
|
extensions: []
|
102
102
|
extra_rdoc_files: []
|
103
103
|
files:
|
104
|
-
- ".gitignore"
|
105
|
-
- ".gitlab-ci.yml"
|
106
|
-
- ".ruby-version"
|
107
104
|
- CHANGELOG
|
108
105
|
- Gemfile
|
109
106
|
- Gemfile.lock
|
110
107
|
- MIT-LICENSE
|
111
108
|
- README.md
|
112
109
|
- Rakefile
|
110
|
+
- alego_pdf-1.0.0.gem
|
113
111
|
- alego_pdf.gemspec
|
114
112
|
- bin/console
|
115
113
|
- bin/setup
|
116
114
|
- lib/alego_pdf.rb
|
117
115
|
- lib/alego_pdf/merging.rb
|
118
116
|
- lib/alego_pdf/version.rb
|
119
|
-
homepage: https://gitlab.al.go.leg.br/gem/alego_pdf
|
117
|
+
homepage: https://gitlab.al.go.leg.br/sistemas/gem/alego_pdf
|
120
118
|
licenses:
|
121
119
|
- MIT
|
122
120
|
metadata:
|
123
|
-
homepage_uri: https://gitlab.al.go.leg.br/gem/alego_pdf
|
124
|
-
post_install_message:
|
121
|
+
homepage_uri: https://gitlab.al.go.leg.br/sistemas/gem/alego_pdf
|
122
|
+
post_install_message:
|
125
123
|
rdoc_options: []
|
126
124
|
require_paths:
|
127
125
|
- lib
|
@@ -136,8 +134,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
134
|
- !ruby/object:Gem::Version
|
137
135
|
version: '0'
|
138
136
|
requirements: []
|
139
|
-
|
140
|
-
|
137
|
+
rubyforge_project:
|
138
|
+
rubygems_version: 2.6.14.4
|
139
|
+
signing_key:
|
141
140
|
specification_version: 4
|
142
|
-
summary:
|
141
|
+
summary: Gem responsible for joining 1 or more PDF in the same file.
|
143
142
|
test_files: []
|
data/.gitignore
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
/.bundle/
|
2
|
-
/.yardoc
|
3
|
-
/_yardoc/
|
4
|
-
/coverage/
|
5
|
-
/doc/
|
6
|
-
/pkg/
|
7
|
-
/spec/reports/
|
8
|
-
/tmp/
|
9
|
-
/.idea
|
10
|
-
/log/*.log
|
11
|
-
/test/dummy/db/*.sqlite3
|
12
|
-
/test/dummy/db/*.sqlite3-journal
|
13
|
-
/test/dummy/log/*.log
|
14
|
-
/test/dummy/node_modules/
|
15
|
-
/test/dummy/yarn-error.log
|
16
|
-
/test/dummy/storage/
|
17
|
-
/test/dummy/tmp/
|
18
|
-
/vendor/*
|
data/.gitlab-ci.yml
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
stages:
|
2
|
-
- build
|
3
|
-
|
4
|
-
#testes:
|
5
|
-
# stage: test
|
6
|
-
# script:
|
7
|
-
# - echo "Executanto testes automatizados"
|
8
|
-
# - export RAILS_ENV="test"
|
9
|
-
# - rbenv install -s
|
10
|
-
# - if ! rbenv which bundle; then gem install bundler --no-ri --no-rdoc; rbenv rehash; fi
|
11
|
-
# - bundle install
|
12
|
-
# - rspec spec
|
13
|
-
# tags:
|
14
|
-
# - tester
|
15
|
-
|
16
|
-
build:
|
17
|
-
stage: build
|
18
|
-
script:
|
19
|
-
- if ! rbenv shell 2.7.3; then rbenv install -s 2.7.3; rbenv rehash; fi
|
20
|
-
- if ! rbenv which bundle; then gem install bundler --no-ri --no-rdoc; rbenv rehash; fi
|
21
|
-
- bundle install
|
22
|
-
- rake build
|
23
|
-
- rake release
|
24
|
-
# - rake force_release
|
25
|
-
only:
|
26
|
-
- /^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}$/
|
27
|
-
tags:
|
28
|
-
- deployer
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.7.3
|