combine_pdf 1.0.21 → 1.0.24

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: 6ee7f4bb8ca8b2a51a7f42251d9a3faa6c1d91d19ed3d91db8ce470a1b1995a9
4
- data.tar.gz: 5be4868dcb9f1b834fc12e5316d5a46b6fee97104c8509cbcdb13908b499d79f
3
+ metadata.gz: e4c508088d852d177d9e360d9c9b2327d4964e3126ceb61c8e652788bf0e2ffb
4
+ data.tar.gz: 0451512bbe0f7b61bbb2154fda45542e088bc1cee4bb905654ffde17cc196243
5
5
  SHA512:
6
- metadata.gz: 751d04258815d32076eccc5bb2905cfed641b2942721900dfa5826b0cf902a35bbf60178501a81617ce0979b1be87554666320423c4066b375dced68927e8aea
7
- data.tar.gz: 7171c0c987646b6336984fff497fa40f02ae7b6079cd8a29b58cb7659c1b527179b44f0c7210edeb63dcc931c634320ae93d0513579852ee28beca23896a085e
6
+ metadata.gz: f1eb1830a1cca67729c8b4161df3aabcd23b5cd993d9392051aeb6f93b5ac129dbd4e37c37ff3513cc426fa4bbca6682c9954f18f51f090f9b47da775ce0847f
7
+ data.tar.gz: ef9a12eb9eb0314973a3e76b6d69cb01bf2c0ee9d05e876824e88b657a771b00839a147d7d98e77f18a1d5f81196c92528958d2ac6b18f3b6cc9423d47d35c53
@@ -0,0 +1,28 @@
1
+ name: Main
2
+ on:
3
+ push:
4
+
5
+ jobs:
6
+ tests:
7
+ name: Tests
8
+ runs-on: ubuntu-latest
9
+ strategy:
10
+ fail-fast: false
11
+ matrix:
12
+ ruby: ["2.7", "3.0", "3.1", "3.2"]
13
+
14
+ steps:
15
+ - name: Checkout code
16
+ uses: actions/checkout@v3
17
+
18
+ - name: Setup Ruby
19
+ uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: ${{ matrix.ruby }}
22
+ bundler-cache: true
23
+
24
+ - name: Generate lockfile
25
+ run: bundle lock
26
+
27
+ - name: Run tests
28
+ run: bundle exec rake test
data/.travis.yml ADDED
@@ -0,0 +1 @@
1
+ language: ruby
data/CHANGELOG.md CHANGED
@@ -1,6 +1,20 @@
1
1
  # Change Log
2
2
 
3
- ***
3
+ #### Change log v.1.0.24 (2023-10-19)
4
+
5
+ **Fix**: possible `nil` in loop. Credit to @jkowens for PR #231 and adding a quick fix using a simple guard.
6
+
7
+ **Fix**: preserve file creation date metadata where relevant.
8
+
9
+ #### Change log v.1.0.23 (2023-04-04)
10
+
11
+ **Feature**: merged PR #177 for the `raise_on_encrypted: true` option support. Credit to @leviwilson and @kimyu92 for the PR.
12
+
13
+ #### Change log v.1.0.22
14
+
15
+ **Fix**: fix `fonts` dereferencing issue (#203), credit to @MarcWeber (Marc Weber) for identifying the issue.
16
+
17
+ **Fix**: fix `metrix` dependency, credit to @casperisfine (Jean byroot Boussier) for PR #195.
4
18
 
5
19
  #### Change log v.1.0.21
6
20
 
data/README.md CHANGED
@@ -39,7 +39,7 @@ Quick rundown:
39
39
 
40
40
  Some links will be lost when ripping pages out of PDF files and merging them with another PDF.
41
41
 
42
- * Some encrypted PDF files (usually the ones you can't view without a password) will fail quietly instead of noisily.
42
+ * Some encrypted PDF files (usually the ones you can't view without a password) will fail quietly instead of noisily. If you prefer to choose the noisy route, you can specify the `raise_on_encrypted` option using `CombinePDF.load(pdf_file, raise_on_encrypted: true)` which will raise a `CombinePDF::EncryptionError`.
43
43
 
44
44
  * Sometimes the CombinePDF will raise an exception even if the PDF could be parsed (i.e., when PDF optional content exists)... I find it better to err on the side of caution, although for optional content PDFs an exception is avoidable using `CombinePDF.load(pdf_file, allow_optional_content: true)`.
45
45
 
data/Rakefile CHANGED
@@ -1,2 +1,9 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ task default: 'test'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
2
9
 
data/combine_pdf.gemspec CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
7
7
  spec.name = "combine_pdf"
8
8
  spec.version = CombinePDF::VERSION
9
9
  spec.authors = ["Boaz Segev"]
10
- spec.email = ["boaz@2be.co.il"]
10
+ spec.email = ["bo@bowild.com"]
11
11
  spec.summary = %q{Combine, stamp and watermark PDF files in pure Ruby.}
12
12
  spec.description = %q{A nifty gem, in pure Ruby, to parse PDF files and combine (merge) them with other PDF files, number the pages, watermark them or stamp them, create tables, add basic text objects etc` (all using the PDF file format).}
13
13
  spec.homepage = "https://github.com/boazsegev/combine_pdf"
@@ -19,8 +19,10 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_runtime_dependency 'ruby-rc4', '>= 0.1.5'
22
+ spec.add_runtime_dependency 'matrix'
22
23
 
23
24
  # spec.add_development_dependency "bundler", ">= 1.7"
24
25
  spec.add_development_dependency "rake", ">= 12.3.3"
25
26
  spec.add_development_dependency "minitest"
27
+ spec.add_development_dependency "minitest-around"
26
28
  end
@@ -33,7 +33,7 @@ module CombinePDF
33
33
  # they are mainly to used to know if the file is (was) encrypted and to get more details.
34
34
  attr_reader :info_object, :root_object, :names_object, :forms_object, :outlines_object, :metadata
35
35
 
36
- attr_reader :allow_optional_content
36
+ attr_reader :allow_optional_content, :raise_on_encrypted
37
37
  # when creating a parser, it is important to set the data (String) we wish to parse.
38
38
  #
39
39
  # <b>the data is required and it is not possible to set the data at a later stage</b>
@@ -58,6 +58,7 @@ module CombinePDF
58
58
  @version = nil
59
59
  @scanner = nil
60
60
  @allow_optional_content = options[:allow_optional_content]
61
+ @raise_on_encrypted = options[:raise_on_encrypted]
61
62
  end
62
63
 
63
64
  # parse the data in the new parser (the data already set through the initialize / new method)
@@ -96,6 +97,7 @@ module CombinePDF
96
97
  end
97
98
 
98
99
  if @root_object[:Encrypt]
100
+ raise EncryptionError, 'the file is encrypted' if @raise_on_encrypted
99
101
  # change_references_to_actual_values @root_object
100
102
  warn 'PDF is Encrypted! Attempting to decrypt - not yet fully supported.'
101
103
  decryptor = PDFDecrypt.new @parsed, @root_object
@@ -321,8 +323,8 @@ module CombinePDF
321
323
  str << 12
322
324
  when 48..57 # octal notation for byte?
323
325
  rep -= 48
324
- rep = (rep << 3) + (str_bytes.shift-48) if str_bytes[0].between?(48, 57)
325
- rep = (rep << 3) + (str_bytes.shift-48) if str_bytes[0].between?(48, 57) && (((rep << 3) + (str_bytes[0] - 48)) <= 255)
326
+ rep = (rep << 3) + (str_bytes.shift-48) if str_bytes[0]&.between?(48, 57)
327
+ rep = (rep << 3) + (str_bytes.shift-48) if str_bytes[0]&.between?(48, 57) && (((rep << 3) + (str_bytes[0] - 48)) <= 255)
326
328
  str << rep
327
329
  when 10 # new line, ignore
328
330
  str_bytes.shift if str_bytes[0] == 13
@@ -360,8 +362,8 @@ module CombinePDF
360
362
  @scanner.pos += 1 if @scanner.peek(1) == "\n".freeze && @scanner.matched[-1] != "\n".freeze
361
363
  # advance by the publshed stream length (if any)
362
364
  old_pos = @scanner.pos
363
- if(out.last.is_a?(Hash) && out.last[:Length].is_a?(Integer) && out.last[:Length].to_i > 2)
364
- @scanner.pos += out.last[:Length].to_i - 2
365
+ if(out.last.is_a?(Hash) && out.last[:Length].is_a?(Integer) && out.last[:Length] > 2)
366
+ @scanner.pos += out.last[:Length] - 2
365
367
  end
366
368
 
367
369
  # the following was dicarded because some PDF files didn't have an EOL marker as required
@@ -96,6 +96,7 @@ module CombinePDF
96
96
  parser ||= PDFParser.new('')
97
97
  raise TypeError, "initialization error, expecting CombinePDF::PDFParser or nil, but got #{parser.class.name}" unless parser.is_a? PDFParser
98
98
  @objects = parser.parse
99
+
99
100
  # remove any existing id's
100
101
  remove_old_ids
101
102
  # set data from parser
@@ -174,8 +175,12 @@ module CombinePDF
174
175
  def to_pdf(options = {})
175
176
  # reset version if not specified
176
177
  @version = 1.5 if @version.to_f == 0.0
178
+
177
179
  # set info for merged file
178
- @info[:ModDate] = @info[:CreationDate] = Time.now.strftime "D:%Y%m%d%H%M%S%:::z'00"
180
+ unless(@info[:CreationDate].is_a?(String))
181
+ @info[:CreationDate] = Time.now unless @info[:CreationDate].is_a?(Time)
182
+ @info[:CreationDate] = @info[:CreationDate].getgm.strftime("D:%Y%m%d%H%M%S%:::z'00")
183
+ end
179
184
  @info[:Subject] = options[:subject] if options[:subject]
180
185
  @info[:Producer] = options[:producer] if options[:producer]
181
186
  # rebuild_catalog
@@ -257,12 +262,18 @@ module CombinePDF
257
262
  def fonts(limit_to_type0 = false)
258
263
  fonts_array = []
259
264
  pages.each do |pg|
260
- if pg[:Resources][:Font]
261
- pg[:Resources][:Font].values.each do |f|
262
- f = f[:referenced_object] if f[:referenced_object]
263
- if (limit_to_type0 || f[:Subtype] == :Type0) && f[:Type] == :Font && !fonts_array.include?(f)
264
- fonts_array << f
265
- end
265
+ r = pg[:Resources]
266
+ next if !r
267
+ r = r[:referenced_object] if r[:referenced_object]
268
+ r = r[:Font]
269
+ next if !r
270
+ r = r[:referenced_object] if r[:referenced_object]
271
+ r.values.each do |f|
272
+ next if f.class != Hash
273
+ f = f[:referenced_object] if f[:referenced_object]
274
+ next if f.class != Hash
275
+ if (limit_to_type0 || f[:Subtype] == :Type0) && f[:Type] == :Font && !fonts_array.include?(f)
276
+ fonts_array << f
266
277
  end
267
278
  end
268
279
  end
@@ -1,3 +1,3 @@
1
1
  module CombinePDF
2
- VERSION = '1.0.21'.freeze
2
+ VERSION = '1.0.24'.freeze
3
3
  end
data/test/automated CHANGED
@@ -3,9 +3,10 @@
3
3
  $VERBOSE = true
4
4
 
5
5
  require 'benchmark'
6
- $LOAD_PATH.unshift File.expand_path(File.join('..', '..', 'lib'), __FILE__)
6
+ Dir.chdir File.expand_path(File.join('..', '..', 'lib'), __FILE__)
7
+ $LOAD_PATH.unshift Dir.pwd
7
8
  require 'combine_pdf'
8
- require 'bundler/setup'
9
+ # require 'bundler/setup'
9
10
 
10
11
  # You can add fixtures and/or initialization code here to make experimenting
11
12
  # with your gem easier. You can also use a different console, if you like.
@@ -14,54 +15,54 @@ require 'bundler/setup'
14
15
  # require "pry"
15
16
  # Pry.start
16
17
 
17
- pdf = CombinePDF.load "./Ruby/test\ pdfs/filled_form.pdf"
18
+ pdf = CombinePDF.load "../../test\ pdfs/filled_form.pdf"
18
19
  pdf.save '01_check_radio_buttuns.pdf'
19
- pdf = CombinePDF.load "./Ruby/test\ pdfs/filled_form.pdf"
20
- pdf << CombinePDF.load("./Ruby/test\ pdfs/empty_form.pdf")
21
- pdf << CombinePDF.load("./Ruby/test\ pdfs/filled_form.pdf")
20
+ pdf = CombinePDF.load "../../test\ pdfs/filled_form.pdf"
21
+ pdf << CombinePDF.load("../../test\ pdfs/empty_form.pdf")
22
+ pdf << CombinePDF.load("../../test\ pdfs/filled_form.pdf")
22
23
  pdf.save '02_check_form_unification_middle_is_empty.pdf'
23
24
 
24
- pdf = CombinePDF.load "./Ruby/test\ pdfs/check_form_data__objstreams_w_versions.pdf"
25
+ pdf = CombinePDF.load "../../test\ pdfs/check_form_data__objstreams_w_versions.pdf"
25
26
  pdf.save '02_01_check_form_data_ordering_issue.pdf'
26
27
 
27
28
 
28
- pdf = CombinePDF.load './Ruby/test pdfs/share-font-background.pdf'
29
- pdf2 = CombinePDF.load './Ruby/test pdfs/share-font-foreground.pdf'
29
+ pdf = CombinePDF.load '../../test pdfs/share-font-background.pdf'
30
+ pdf2 = CombinePDF.load '../../test pdfs/share-font-foreground.pdf'
30
31
  i = 0
31
32
  pdf.pages.each { |pg| pg << pdf2.pages[i] }
32
33
  pdf.save '03_check_font_conflict.pdf'
33
34
 
34
- pdf = CombinePDF.load './Ruby/test pdfs/nil_1.pdf'
35
- pdf2 = CombinePDF.load './Ruby/test pdfs/nil_2.pdf'
35
+ pdf = CombinePDF.load '../../test pdfs/nil_1.pdf'
36
+ pdf2 = CombinePDF.load '../../test pdfs/nil_2.pdf'
36
37
  pdf << pdf2
37
38
  pdf.save '03_01_nil_value_conflict.pdf'
38
39
 
39
- pdf = CombinePDF.load './Ruby/test pdfs/space_after_streram_keyword.pdf'
40
+ pdf = CombinePDF.load '../../test pdfs/space_after_streram_keyword.pdf'
40
41
  pdf.save '03_02_extra_space_after_stream_keyword.pdf'
41
42
 
42
- pdf = CombinePDF.load './Ruby/test pdfs/nested_difference.pdf'
43
+ pdf = CombinePDF.load '../../test pdfs/nested_difference.pdf'
43
44
  pdf.save '03_03_nested_difference.pdf'
44
45
 
45
- pdf = CombinePDF.load './Ruby/test pdfs/names_go_haywire_0.pdf'
46
- pdf << CombinePDF.load('./Ruby/test pdfs/names_go_haywire_1.pdf')
46
+ pdf = CombinePDF.load '../../test pdfs/names_go_haywire_0.pdf'
47
+ pdf << CombinePDF.load('../../test pdfs/names_go_haywire_1.pdf')
47
48
  pdf.save '04_check_view_and_names_reference.pdf'
48
49
 
49
- pdf = CombinePDF.load('./Ruby/test pdfs/outlines/self_merge_err.pdf')
50
+ pdf = CombinePDF.load('../../test pdfs/outlines/self_merge_err.pdf')
50
51
  pdf.save '05_x1_scribus_test.pdf'
51
- pdf = CombinePDF.load('./Ruby/test pdfs/outlines/self_merge_err.pdf')
52
- pdf << CombinePDF.load('./Ruby/test pdfs/outlines/self_merge_err.pdf')
52
+ pdf = CombinePDF.load('../../test pdfs/outlines/self_merge_err.pdf')
53
+ pdf << CombinePDF.load('../../test pdfs/outlines/self_merge_err.pdf')
53
54
  pdf.save '05_x2_scribus_test.pdf'
54
- # pdf = CombinePDF.load "./Ruby/test pdfs/named_dest.pdf";nil
55
- # pdf.save '05_check_named_dest_links.pdf' # this will take a while
56
- # pdf = CombinePDF.load "./Ruby/test pdfs/named_dest.pdf";nil
57
- pdf << CombinePDF.load('./Ruby/test pdfs/named_dest.pdf'); nil
55
+ pdf = CombinePDF.load "../../test pdfs/outlines/named_dest.pdf";nil
56
+ pdf.save '05_check_named_dest_links.pdf' # this will take a while
57
+ pdf = CombinePDF.load "../../test pdfs/outlines/named_dest.pdf";nil
58
+ pdf << CombinePDF.load('../../test pdfs/outlines/named_dest.pdf'); nil
58
59
  pdf.save '05_1_timeless_check_named_dest_links.pdf' # never ends... :-(
59
60
 
60
- pdf = CombinePDF.load './Ruby/test pdfs/outline_small.pdf'
61
- pdf << CombinePDF.load('./Ruby/test pdfs/outline_small.pdf')
61
+ pdf = CombinePDF.load '../../test pdfs/outline_small.pdf'
62
+ pdf << CombinePDF.load('../../test pdfs/outline_small.pdf')
62
63
  pdf.save '06_check_links_to_second_copy.pdf'
63
64
 
64
- lists = %w(./Ruby/test\ pdfs/outlines/self_merge_err.pdf ./Ruby/test\ pdfs/outlines/big_toc.pdf ./Ruby/test\ pdfs/outlines/bigger_toc.pdf ./Ruby/test\ pdfs/outlines/named_dest_no_toc.pdf ./Ruby/test\ pdfs/outlines/named_dest_no_toc2.pdf ./Ruby/test\ pdfs/outlines/named_dest.pdf ./Ruby/test\ pdfs/outlines/named_dest2.pdf)
65
+ lists = %w(../../test\ pdfs/outlines/self_merge_err.pdf ../../test\ pdfs/outlines/big_toc.pdf ../../test\ pdfs/outlines/bigger_toc.pdf ../../test\ pdfs/outlines/named_dest_no_toc.pdf ../../test\ pdfs/outlines/named_dest_no_toc2.pdf ../../test\ pdfs/outlines/named_dest.pdf ../../test\ pdfs/outlines/named_dest2.pdf)
65
66
 
66
67
  i = 0
67
68
  lists.each do |n|
@@ -92,19 +93,19 @@ pdf.number_pages(start_at: 1,
92
93
 
93
94
  pdf.save('07_named destinations_numbered.pdf')
94
95
 
95
- CombinePDF.load("./Ruby/test\ pdfs/Scribus-unknown_err.pdf").save '08_1-unknown-err-empty-str.pdf'
96
- CombinePDF.load("./Ruby/test\ pdfs/Scribus-unknown_err2.pdf").save '08_2-unknown-err-empty-str.pdf'
97
- CombinePDF.load("./Ruby/test\ pdfs/Scribus-unknown_err3.pdf").save '08_3-unknown-err-empty-str.pdf'
98
- CombinePDF.load("./Ruby/test\ pdfs/xref_in_middle.pdf").save '08_4-xref-in-middle.pdf'
99
- CombinePDF.load("./Ruby/test\ pdfs/xref_split.pdf").save '08_5-xref-fragmented.pdf'
96
+ CombinePDF.load("../../test\ pdfs/Scribus-unknown_err.pdf").save '08_1-unknown-err-empty-str.pdf'
97
+ CombinePDF.load("../../test\ pdfs/Scribus-unknown_err2.pdf").save '08_2-unknown-err-empty-str.pdf'
98
+ CombinePDF.load("../../test\ pdfs/Scribus-unknown_err3.pdf").save '08_3-unknown-err-empty-str.pdf'
99
+ CombinePDF.load("../../test\ pdfs/xref_in_middle.pdf").save '08_4-xref-in-middle.pdf'
100
+ CombinePDF.load("../../test\ pdfs/xref_split.pdf").save '08_5-xref-fragmented.pdf'
100
101
 
101
- CombinePDF.load("/Users/2Be/Ruby/test\ pdfs/nil_object.pdf").save('09_nil_in_parsed_array.pdf')
102
+ CombinePDF.load("../../test\ pdfs/nil_object.pdf").save('09_nil_in_parsed_array.pdf')
102
103
 
103
- encrypted = [ "./Ruby/test\ pdfs/pdf-reader/encrypted_version4_revision4_128bit_aes_user_pass_apples_enc_metadata.pdf",
104
- "./Ruby/test\ pdfs/AESv2\ encrypted.pdf",
105
- "./Ruby/test\ pdfs/pdf-reader/encrypted_version2_revision3_128bit_rc4_blank_user_pass.pdf",
106
- "./Ruby/test\ pdfs/AES\ enc.pdf",
107
- "./Ruby/test\ pdfs/RC4\ enc.pdf"]
104
+ encrypted = [ "../../test\ pdfs/pdf-reader/encrypted_version4_revision4_128bit_aes_user_pass_apples_enc_metadata.pdf",
105
+ "../../test\ pdfs/AESv2\ encrypted.pdf",
106
+ "../../test\ pdfs/pdf-reader/encrypted_version2_revision3_128bit_rc4_blank_user_pass.pdf",
107
+ "../../test\ pdfs/AES\ enc.pdf",
108
+ "../../test\ pdfs/RC4\ enc.pdf"]
108
109
 
109
110
  encrypted.length.times do |i|
110
111
  fname = File.basename encrypted[i]
@@ -132,17 +133,17 @@ pdf.save('11_AcrobatReader_is_unique_page.pdf')
132
133
 
133
134
  puts GC.stat.inspect
134
135
  # unify = [
135
- # "./Ruby/test\ pdfs/AESv2\ encrypted.pdf",
136
- # "./Ruby/test\ pdfs/data-in-comment.pdf",
137
- # "./Ruby/test\ pdfs/file_name.pdf",
138
- # "./Ruby/test\ pdfs/garbage_after_eof.pdf",
139
- # "./Ruby/test\ pdfs/Many\ comments.pdf",
140
- # "./Ruby/test\ pdfs/nested\ contents\ array.PDF",
141
- # "./Ruby/test\ pdfs/nested_resources.pdf",
142
- # "./Ruby/test\ pdfs/original-missing-endobje.pdf",
143
- # "./Ruby/test\ pdfs/original-multi-issue.pdf",
144
- # "./Ruby/test\ pdfs/page_stap_nil_secure.pdf",
145
- # "./Ruby/test\ pdfs/referenced\ decryption.pdf",
136
+ # "../../test\ pdfs/AESv2\ encrypted.pdf",
137
+ # "../../test\ pdfs/data-in-comment.pdf",
138
+ # "../../test\ pdfs/file_name.pdf",
139
+ # "../../test\ pdfs/garbage_after_eof.pdf",
140
+ # "../../test\ pdfs/Many\ comments.pdf",
141
+ # "../../test\ pdfs/nested\ contents\ array.PDF",
142
+ # "../../test\ pdfs/nested_resources.pdf",
143
+ # "../../test\ pdfs/original-missing-endobje.pdf",
144
+ # "../../test\ pdfs/original-multi-issue.pdf",
145
+ # "../../test\ pdfs/page_stap_nil_secure.pdf",
146
+ # "../../test\ pdfs/referenced\ decryption.pdf",
146
147
  # '',
147
148
  # '',
148
149
  # '',
@@ -0,0 +1,48 @@
1
+ require 'bundler/setup'
2
+ require 'minitest/autorun'
3
+ require 'minitest/around/spec'
4
+ require 'combine_pdf'
5
+
6
+ describe 'CombinePDF.load' do
7
+ let(:options) { {} }
8
+
9
+ subject { CombinePDF.load "test/fixtures/files/#{file}", options }
10
+
11
+ describe 'raise_on_encrypted option' do
12
+ let(:file) { 'sample_encrypted_pdf.pdf' }
13
+ let(:options) { { raise_on_encrypted: raise_on_encrypted } }
14
+
15
+ describe 'when raise_on_encrypted: true' do
16
+ let(:raise_on_encrypted) { true }
17
+
18
+ describe 'with encrypted file' do
19
+ it('raises an CombinePDF::EncryptionError') do
20
+ error = assert_raises(CombinePDF::EncryptionError) { subject }
21
+ assert_match 'the file is encrypted', error.message
22
+ end
23
+ end
24
+
25
+ describe 'with unencrypted file' do
26
+ let(:file) { 'sample_pdf.pdf' }
27
+
28
+ it('has a PDF') { assert_instance_of CombinePDF::PDF, subject }
29
+ end
30
+ end
31
+
32
+ describe 'when raise_on_encrypted: false' do
33
+ let(:raise_on_encrypted) { false }
34
+
35
+ describe 'with encrypted file' do
36
+ it('does not raise an CombinePDF::EncryptionError') do
37
+ assert_instance_of CombinePDF::PDF, subject
38
+ end
39
+ end
40
+
41
+ describe 'with unencrypted file' do
42
+ let(:file) { 'sample_pdf.pdf' }
43
+
44
+ it('has a PDF') { assert_instance_of CombinePDF::PDF, subject }
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,6 +1,4 @@
1
- require 'bundler/setup'
2
1
  require 'minitest/autorun'
3
- require 'combine_pdf/renderer'
4
2
 
5
3
  class CombinePDFRendererTest < Minitest::Test
6
4
 
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: combine_pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.21
4
+ version: 1.0.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Boaz Segev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-12 00:00:00.000000000 Z
11
+ date: 2023-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-rc4
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.1.5
27
+ - !ruby/object:Gem::Dependency
28
+ name: matrix
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,16 +66,32 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-around
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: A nifty gem, in pure Ruby, to parse PDF files and combine (merge) them
56
84
  with other PDF files, number the pages, watermark them or stamp them, create tables,
57
85
  add basic text objects etc` (all using the PDF file format).
58
86
  email:
59
- - boaz@2be.co.il
87
+ - bo@bowild.com
60
88
  executables: []
61
89
  extensions: []
62
90
  extra_rdoc_files: []
63
91
  files:
92
+ - ".github/workflows/main.yml"
64
93
  - ".gitignore"
94
+ - ".travis.yml"
65
95
  - CHANGELOG.md
66
96
  - Gemfile
67
97
  - LICENSE.txt
@@ -82,14 +112,17 @@ files:
82
112
  - lib/combine_pdf/renderer.rb
83
113
  - lib/combine_pdf/version.rb
84
114
  - test/automated
115
+ - test/combine_pdf/load_test.rb
85
116
  - test/combine_pdf/renderer_test.rb
86
117
  - test/console
118
+ - test/fixtures/files/sample_encrypted_pdf.pdf
119
+ - test/fixtures/files/sample_pdf.pdf
87
120
  - test/named_dest
88
121
  homepage: https://github.com/boazsegev/combine_pdf
89
122
  licenses:
90
123
  - MIT
91
124
  metadata: {}
92
- post_install_message:
125
+ post_install_message:
93
126
  rdoc_options: []
94
127
  require_paths:
95
128
  - lib
@@ -104,12 +137,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
137
  - !ruby/object:Gem::Version
105
138
  version: '0'
106
139
  requirements: []
107
- rubygems_version: 3.1.2
108
- signing_key:
140
+ rubygems_version: 3.3.26
141
+ signing_key:
109
142
  specification_version: 4
110
143
  summary: Combine, stamp and watermark PDF files in pure Ruby.
111
144
  test_files:
112
145
  - test/automated
146
+ - test/combine_pdf/load_test.rb
113
147
  - test/combine_pdf/renderer_test.rb
114
148
  - test/console
149
+ - test/fixtures/files/sample_encrypted_pdf.pdf
150
+ - test/fixtures/files/sample_pdf.pdf
115
151
  - test/named_dest