alego_pdf 1.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: af1c4d29195fc9f0cc0648b710923a8e63bf63c6e7d48feaf9373bf76ae7c536
4
- data.tar.gz: f67c101c414c719d10c695504ca4454d1e3c41924304c3c4b30d6dd96d184bde
3
+ metadata.gz: 5234d9c582405d545e5beeb7ff2300374e532746609e7ca10302ba5fc7b2db03
4
+ data.tar.gz: ecbc8915bfa7be910c9e7514d344d66a5278a385b4f8d3c5c0a996358f119f1f
5
5
  SHA512:
6
- metadata.gz: 998a826b0368b40fa1a1d43964f241dc2229d8423096a73f25d930b9ae49cfaa4ab15369dcd28da21dc2d4f7599500c84b0572d1654549f3d752121c288af071
7
- data.tar.gz: 40f26d1de7c0cbd1b0b07df2b7136a4d9defa0405017960de99d007b35a2f39b9d300f38d62e0b75577a5bf192024c24256f8f43e375dd47f2222b60af95adc2
6
+ metadata.gz: 68ecf437cad98773176cd03e1692ac9a7b2df51f13c138c0712cd4c91b3db1ea8fa8389aadebcb17b2f9acb2c901a04741afda27fe75f2d74ae143b6b942875b
7
+ data.tar.gz: 6becf57defb8b8b848f3842c406d97ff210c496c65743c7df5442ccac48e8760c9468b91da67ab9db9a83cfb3538fe92fdcce57a00c799c82da9bd007aed25ed
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.7.3
1
+ 2.5.1
data/CHANGELOG CHANGED
@@ -0,0 +1,18 @@
1
+ v2.0.1 - 20/09/2022
2
+
3
+ Ajuste:
4
+ 1) Corrigindo gemspec e README
5
+
6
+ ----
7
+
8
+ v2.0.0 - 12/09/2022
9
+
10
+ Novidade:
11
+ 1) Gem alego_pdf que junta 1 ou mais PDF's num mesmo arquivo via model e ids passados por parâmetro.
12
+
13
+ ----
14
+
15
+ v1.0.0 - 09/09/2022
16
+
17
+ Lançamento:
18
+ 1) Nova gem alego_pdf que junta 1 ou mais PDF's num mesmo arquivo via URL's.
data/Gemfile CHANGED
@@ -2,5 +2,3 @@ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in alego_pdf.gemspec
4
4
  gemspec
5
-
6
- gem "rake", "~> 12.0"
data/Gemfile.lock CHANGED
@@ -1,112 +1,34 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- alego_pdf (1.0.0)
5
- factory_bot_rails
4
+ alego_pdf (2.0.1)
6
5
  hexapdf
7
6
  open-uri
8
- rspec-rails
9
7
 
10
8
  GEM
11
9
  remote: https://rubygems.org/
12
10
  specs:
13
- actionpack (7.0.3.1)
14
- actionview (= 7.0.3.1)
15
- activesupport (= 7.0.3.1)
16
- rack (~> 2.0, >= 2.2.0)
17
- rack-test (>= 0.6.3)
18
- rails-dom-testing (~> 2.0)
19
- rails-html-sanitizer (~> 1.0, >= 1.2.0)
20
- actionview (7.0.3.1)
21
- activesupport (= 7.0.3.1)
22
- builder (~> 3.1)
23
- erubi (~> 1.4)
24
- rails-dom-testing (~> 2.0)
25
- rails-html-sanitizer (~> 1.1, >= 1.2.0)
26
- activesupport (7.0.3.1)
27
- concurrent-ruby (~> 1.0, >= 1.0.2)
28
- i18n (>= 1.6, < 2)
29
- minitest (>= 5.1)
30
- tzinfo (~> 2.0)
31
- builder (3.2.4)
32
11
  cmdparse (3.0.7)
33
- concurrent-ruby (1.1.10)
34
- crass (1.0.6)
35
12
  date (3.2.2)
36
- diff-lcs (1.5.0)
37
- erubi (1.11.0)
38
- factory_bot (6.2.1)
39
- activesupport (>= 5.0.0)
40
- factory_bot_rails (6.2.0)
41
- factory_bot (~> 6.2.0)
42
- railties (>= 5.0.0)
43
13
  geom2d (0.3.1)
44
14
  hexapdf (0.24.2)
45
15
  cmdparse (~> 3.0, >= 3.0.3)
46
16
  geom2d (~> 0.3)
47
- i18n (1.12.0)
48
- concurrent-ruby (~> 1.0)
49
- loofah (2.18.0)
50
- crass (~> 1.0.2)
51
- nokogiri (>= 1.5.9)
52
- method_source (1.0.0)
53
- minitest (5.16.3)
54
- nokogiri (1.13.8-x86_64-darwin)
55
- racc (~> 1.4)
56
17
  open-uri (0.2.0)
57
18
  stringio
58
19
  time
59
20
  uri
60
- racc (1.6.0)
61
- rack (2.2.4)
62
- rack-test (2.0.2)
63
- rack (>= 1.3)
64
- rails-dom-testing (2.0.3)
65
- activesupport (>= 4.2.0)
66
- nokogiri (>= 1.6)
67
- rails-html-sanitizer (1.4.3)
68
- loofah (~> 2.3)
69
- railties (7.0.3.1)
70
- actionpack (= 7.0.3.1)
71
- activesupport (= 7.0.3.1)
72
- method_source
73
- rake (>= 12.2)
74
- thor (~> 1.0)
75
- zeitwerk (~> 2.5)
76
- rake (12.3.3)
77
- rspec-core (3.11.0)
78
- rspec-support (~> 3.11.0)
79
- rspec-expectations (3.11.0)
80
- diff-lcs (>= 1.2.0, < 2.0)
81
- rspec-support (~> 3.11.0)
82
- rspec-mocks (3.11.1)
83
- diff-lcs (>= 1.2.0, < 2.0)
84
- rspec-support (~> 3.11.0)
85
- rspec-rails (5.1.2)
86
- actionpack (>= 5.2)
87
- activesupport (>= 5.2)
88
- railties (>= 5.2)
89
- rspec-core (~> 3.10)
90
- rspec-expectations (~> 3.10)
91
- rspec-mocks (~> 3.10)
92
- rspec-support (~> 3.10)
93
- rspec-support (3.11.0)
94
21
  stringio (3.0.2)
95
- thor (1.2.1)
96
22
  time (0.2.0)
97
23
  date
98
- tzinfo (2.0.5)
99
- concurrent-ruby (~> 1.0)
100
24
  uri (0.11.0)
101
- zeitwerk (2.6.0)
102
25
 
103
26
  PLATFORMS
104
- x86_64-darwin-19
27
+ ruby
105
28
 
106
29
  DEPENDENCIES
107
30
  alego_pdf!
108
31
  bundler
109
- rake (~> 12.0)
110
32
 
111
33
  BUNDLED WITH
112
- 2.2.21
34
+ 2.1.4
data/README.md CHANGED
@@ -25,50 +25,80 @@ Ou instale isto você mesmo usando o comando:
25
25
 
26
26
  ## Uso
27
27
  A gem 'alego_pdf' depende da gem 'hexapdf' para fazer a juntada de arquivos.
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
-
28
+ Veja mais sobre a gem 'hexapdf' no Github: https://github.com/gettalong/hexapdf.
29
+ A gem 'alego_pdf' busca os objetos, 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
- def call
33
- target = HexaPDF::Document.new
34
-
35
- # filepaths é um array com as url's dos arquivos
36
- filepaths.each do |filepath|
37
- uri = URI.parse(filepath).open(&:read) # leitura do arquivo
38
- tempfile = Tempfile.new
39
- tempfile.write(uri.force_encoding('UTF-8')) # escrita no arquivo Tempfile
40
- tempfile.close # fecha o arquivo
41
-
42
- pdf = HexaPDF::Document.open(tempfile)
43
- pdf.pages.each { |page| target.pages << target.import(page) } # junta os arquivos em um novo HexaPDF
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
- target.write(filename, optimize: true)
47
- end
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
49
48
 
50
- Após instalar a gem 'alego_pdf', deve buscar a URL dos arquivos e passar estas URL's como parâmetro. Veja o exemplo a seguir:
49
+ array.each do |object|
50
+ file = object[attribute]
51
+ filepath = file.try(:url) || object.try(:arquivo_url)
51
52
 
52
- ```
53
- def merge_arquivos
54
- # O atributo "arquivo_url" deve ser a url onde o arquivo está armazenado.
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
53
+ next if filepath.blank?
56
54
 
57
- filepaths = Model.order('id desc').map(&:arquivo_url)
55
+ uri = URI.parse(filepath).open(&:read)
56
+ tempfile = Tempfile.new
57
+ tempfile.write(uri.force_encoding('UTF-8'))
58
+ tempfile.close
58
59
 
59
- respond_to do |format|
60
- format.html
61
- format.pdf do
62
- filename = 'tmp/arquivos.pdf'
63
- AlegoPdf::Merging.new(filepaths, filename).call
64
-
65
- pdf_filename = File.join(Rails.root, filename)
66
- send_file(pdf_filename, filename: 'merge-arquivos.pdf', type: 'application/pdf')
60
+ pdf = HexaPDF::Document.open(tempfile)
61
+ pdf.pages.each { |page| target.pages << target.import(page) }
67
62
  end
63
+
64
+ target.write(filename, optimize: true)
68
65
  end
69
66
  end
67
+ end
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. 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:
71
+ ```
72
+ # organogramas_controller.rb
73
+ def merge_arquivos
74
+ organograma_ids = ::Transparencia::Organograma.order('data desc').map(&:id)
75
+
76
+ respond_to do |format|
77
+ format.html
78
+ format.pdf do
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
81
+
82
+ pdf_filename = File.join(Rails.root, filename)
83
+ send_file(pdf_filename, filename: 'organogramas.pdf', type: 'application/pdf')
84
+ end
85
+ end
86
+ end
87
+ ```
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 de 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 %>
70
101
  ```
71
-
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.gemspec CHANGED
@@ -1,18 +1,18 @@
1
1
  require_relative 'lib/alego_pdf/version'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
- spec.name = 'alego_pdf'
5
- spec.version = AlegoPdf::VERSION
6
- spec.authors = ['Rodrigo de Sá']
7
- spec.email = ['rodrigo.sa@al.go.leg.br']
8
- spec.homepage = 'https://gitlab.al.go.leg.br/gem/alego_pdf'
9
- spec.summary = 'Summary of AlegoPdf.'
10
- spec.description = 'Description of AlegoPdf.'
11
- spec.license = 'MIT'
4
+ spec.name = 'alego_pdf'
5
+ spec.version = AlegoPdf::VERSION
6
+ spec.author = 'Rodrigo de Sá'
7
+ spec.email = ['rodrigo.sa@al.go.leg.br']
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
+ spec.license = 'MIT'
12
12
  spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
13
13
 
14
14
  begin
15
- s.metadata['allowed_push_host'] = ENV['GEM_SERVER'] || ''
15
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
16
16
  rescue StandardError
17
17
  end
18
18
 
@@ -30,12 +30,8 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ['lib']
32
32
 
33
- spec.add_development_dependency 'bundler' # , '~> 1.2', '>= 1.2.0'
34
- spec.add_development_dependency 'rake' # , "~> 11.2.2"
35
-
36
- spec.add_runtime_dependency 'factory_bot_rails' # , "~> 4.4.1"
33
+ spec.add_development_dependency 'bundler'
37
34
 
38
35
  spec.add_dependency 'hexapdf' # , "~> 0.24.0"
39
36
  spec.add_dependency 'open-uri' # , "~> 0.2.0"
40
- spec.add_dependency 'rspec-rails' # , "~> 3.0.0.beta"
41
37
  end
@@ -3,17 +3,25 @@ require 'open-uri'
3
3
 
4
4
  module AlegoPdf
5
5
  class Merging
6
- attr_reader :filepaths, :filename
6
+ attr_reader :ids, :model, :attribute, :filename
7
7
 
8
- def initialize(filepaths, filename)
9
- @filepaths = filepaths
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
- filepaths.each do |filepath|
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'))
@@ -1,3 +1,3 @@
1
1
  module AlegoPdf
2
- VERSION = '1.0.0'
2
+ VERSION = '2.0.1'
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: 1.0.0
4
+ version: 2.0.1
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-09 00:00:00.000000000 Z
11
+ date: 2022-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,34 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: factory_bot_rails
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
27
  - !ruby/object:Gem::Dependency
56
28
  name: hexapdf
57
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,29 +52,13 @@ dependencies:
80
52
  - - ">="
81
53
  - !ruby/object:Gem::Version
82
54
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: rspec-rails
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- description: Description of AlegoPdf.
55
+ description: Gem responsible for joining 1 or more PDF in the same file.
98
56
  email:
99
57
  - rodrigo.sa@al.go.leg.br
100
58
  executables: []
101
59
  extensions: []
102
60
  extra_rdoc_files: []
103
61
  files:
104
- - ".gitignore"
105
- - ".gitlab-ci.yml"
106
62
  - ".ruby-version"
107
63
  - CHANGELOG
108
64
  - Gemfile
@@ -116,12 +72,13 @@ files:
116
72
  - lib/alego_pdf.rb
117
73
  - lib/alego_pdf/merging.rb
118
74
  - lib/alego_pdf/version.rb
119
- homepage: https://gitlab.al.go.leg.br/gem/alego_pdf
75
+ homepage: https://gitlab.al.go.leg.br/sistemas/gem/alego_pdf
120
76
  licenses:
121
77
  - MIT
122
78
  metadata:
123
- homepage_uri: https://gitlab.al.go.leg.br/gem/alego_pdf
124
- post_install_message:
79
+ allowed_push_host: https://rubygems.org
80
+ homepage_uri: https://gitlab.al.go.leg.br/sistemas/gem/alego_pdf
81
+ post_install_message:
125
82
  rdoc_options: []
126
83
  require_paths:
127
84
  - lib
@@ -136,8 +93,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
93
  - !ruby/object:Gem::Version
137
94
  version: '0'
138
95
  requirements: []
139
- rubygems_version: 3.1.6
140
- signing_key:
96
+ rubyforge_project:
97
+ rubygems_version: 2.7.6
98
+ signing_key:
141
99
  specification_version: 4
142
- summary: Summary of AlegoPdf.
100
+ summary: Gem responsible for joining 1 or more PDF in the same file.
143
101
  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