paperback 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/tests.yml +46 -0
  3. data/.rubocop-disables.yml +26 -9
  4. data/CHANGELOG.md +7 -0
  5. data/README.md +4 -1
  6. data/lib/paperback/cli.rb +17 -0
  7. data/lib/paperback/document.rb +74 -11
  8. data/lib/paperback/preparer.rb +76 -21
  9. data/lib/paperback/version.rb +2 -1
  10. data/lib/paperback.rb +12 -0
  11. data/paperback.gemspec +10 -7
  12. data/sorbet/config +3 -0
  13. data/sorbet/rbi/annotations/rainbow.rbi +269 -0
  14. data/sorbet/rbi/gems/ast@2.4.2.rbi +584 -0
  15. data/sorbet/rbi/gems/chunky_png@1.4.0.rbi +4498 -0
  16. data/sorbet/rbi/gems/coderay@1.1.3.rbi +3426 -0
  17. data/sorbet/rbi/gems/diff-lcs@1.5.0.rbi +1083 -0
  18. data/sorbet/rbi/gems/method_source@1.0.0.rbi +272 -0
  19. data/sorbet/rbi/gems/netrc@0.11.0.rbi +158 -0
  20. data/sorbet/rbi/gems/parallel@1.22.1.rbi +277 -0
  21. data/sorbet/rbi/gems/parser@3.2.0.0.rbi +6963 -0
  22. data/sorbet/rbi/gems/pdf-core@0.4.0.rbi +1682 -0
  23. data/sorbet/rbi/gems/prawn@1.3.0.rbi +5567 -0
  24. data/sorbet/rbi/gems/pry@0.14.1.rbi +9990 -0
  25. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +408 -0
  26. data/sorbet/rbi/gems/rake@13.0.6.rbi +3023 -0
  27. data/sorbet/rbi/gems/rbi@0.0.16.rbi +3008 -0
  28. data/sorbet/rbi/gems/regexp_parser@2.6.1.rbi +3481 -0
  29. data/sorbet/rbi/gems/rexml@3.2.5.rbi +4717 -0
  30. data/sorbet/rbi/gems/rqrcode@0.10.1.rbi +617 -0
  31. data/sorbet/rbi/gems/rspec-core@3.12.0.rbi +10791 -0
  32. data/sorbet/rbi/gems/rspec-expectations@3.12.1.rbi +8106 -0
  33. data/sorbet/rbi/gems/rspec-mocks@3.12.1.rbi +5305 -0
  34. data/sorbet/rbi/gems/rspec-support@3.12.0.rbi +1617 -0
  35. data/sorbet/rbi/gems/rspec@3.12.0.rbi +88 -0
  36. data/sorbet/rbi/gems/rubocop-ast@1.24.1.rbi +6617 -0
  37. data/sorbet/rbi/gems/rubocop@0.93.1.rbi +40848 -0
  38. data/sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi +1234 -0
  39. data/sorbet/rbi/gems/sixword@0.4.0.rbi +536 -0
  40. data/sorbet/rbi/gems/spoom@1.1.15.rbi +2383 -0
  41. data/sorbet/rbi/gems/subprocess@1.5.6.rbi +391 -0
  42. data/sorbet/rbi/gems/tapioca@0.10.5.rbi +3207 -0
  43. data/sorbet/rbi/gems/thor@1.2.1.rbi +3956 -0
  44. data/sorbet/rbi/gems/ttfunk@1.4.0.rbi +1951 -0
  45. data/sorbet/rbi/gems/unicode-display_width@1.8.0.rbi +40 -0
  46. data/sorbet/rbi/gems/unparser@0.6.7.rbi +4524 -0
  47. data/sorbet/rbi/gems/webrick@1.7.0.rbi +2555 -0
  48. data/sorbet/rbi/gems/yard-sorbet@0.8.0.rbi +441 -0
  49. data/sorbet/rbi/gems/yard@0.9.28.rbi +17816 -0
  50. data/sorbet/tapioca/config.yml +13 -0
  51. data/sorbet/tapioca/require.rb +4 -0
  52. data/spec/functional/paperback/cli_spec.rb +54 -25
  53. data/spec/spec_helper.rb +1 -0
  54. data/spec/unit/paperback_spec.rb +1 -0
  55. metadata +89 -13
  56. data/sample/aes.key +0 -1
  57. data/sample/aes.pdf +0 -14413
  58. data/sample/aes.pdf.passphrase.txt +0 -1
  59. data/sample/rsa2048.pdf +0 -106803
  60. data/sample/rsa2048.pdf.passphrase.txt +0 -1
  61. data/sample/rsa2048.pem +0 -27
@@ -0,0 +1,13 @@
1
+ gem:
2
+ # Add your `gem` command parameters here:
3
+ #
4
+ # exclude:
5
+ # - gem_name
6
+ # doc: true
7
+ # workers: 5
8
+ dsl:
9
+ # Add your `dsl` command parameters here:
10
+ #
11
+ # exclude:
12
+ # - SomeGeneratorName
13
+ # workers: 5
@@ -0,0 +1,4 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ # Add your extra requires here (`bin/tapioca require` can be used to bootstrap this list)
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require 'digest/sha2'
@@ -9,10 +10,40 @@ require 'subprocess'
9
10
  RSpec.describe Paperback::CLI do
10
11
  Executable = File.dirname(__FILE__) + '/../../bin/paperback'
11
12
 
13
+ SupportedPopplerVersions = [
14
+ /\A0\.86\..*\z/,
15
+ /\A22\.02\..*\z/,
16
+ ]
17
+
18
+ def get_pdftotext_version
19
+ output = Subprocess.check_output(
20
+ ['pdftotext', '-v'], stderr: Subprocess::STDOUT
21
+ )
22
+ first_line = output.lines(chomp: true)[0]
23
+ if first_line.nil?
24
+ raise Exception('Unexpected version line from pdftotext: ' + output.inspect)
25
+ end
26
+
27
+ parts = first_line.split(' ')
28
+ if parts[0] != 'pdftotext' || parts[1] != 'version'
29
+ raise Exception('Bad version line from pdftotext: ' + first_line.inspect)
30
+ end
31
+
32
+ return parts[2..].join(' ')
33
+ end
34
+
12
35
  # pdftotext from poppler is a test dependency
13
36
  it 'finds system pdftotext installed (test dependency)' do
14
37
  expect(Subprocess.check_output(%w[which pdftotext])
15
38
  ).to match(/pdftotext/)
39
+
40
+ version = get_pdftotext_version
41
+
42
+ expect(version).to match(/\A\d+\..*/)
43
+
44
+ unless SupportedPopplerVersions.any? {|regex| regex.match(version) }
45
+ Paperback.log.warn("#{File.basename(__FILE__)}: Unsupported poppler-utils pdftotext version #{version}, tests may fail!")
46
+ end
16
47
  end
17
48
 
18
49
  describe 'end-to-end test:' do
@@ -40,25 +71,19 @@ RSpec.describe Paperback::CLI do
40
71
 
41
72
  expected = <<-EOM
42
73
  This is a paper backup produced by `paperback`. https://github.com/ab/paperback
43
- Filename:
44
- Backed up:
45
- Mtime:
46
- Bytes:
47
- Comment:
48
- SHA256:
49
- Encrypted:
50
-
51
- fox.txt
52
- #{timestamp}
53
- #{timestamp}
54
- 45
55
- Some comment
56
- b47cc0f104b62d4c7c30bcd68fd8e67613e287dc4ad8c310ef10cbadea9c4380
57
- no
58
-
59
- 1 of 2
60
74
 
75
+ Filename: fox.txt
76
+ Backed up: #{timestamp}
77
+ Mtime: #{timestamp}
78
+ Bytes: 45
79
+ Comment: Some comment
80
+ SHA256: b47cc0f104b62d4c7c30bcd68fd8e67613e287dc4ad8c310ef10cbadea9c4380
81
+ Encrypted: no
82
+
83
+
84
+ 1 of 2
61
85
  \fThis sixword text encodes 45 bytes in 6 six-word sentences. Decode with `sixword -d`.
86
+
62
87
  1: beak us ache sour bern lola
63
88
  2: core arc hulk slid drew due
64
89
  3: chub ends bog russ bess mast
@@ -66,16 +91,18 @@ no
66
91
  5: coat mod hit need knew grim
67
92
  6: cave ella raft fir a act3
68
93
 
94
+
69
95
  This base64 text encodes 45 bytes in 61 characters. Decode with `base64 --decode`.
96
+
70
97
  VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4K
71
98
 
72
- 2 of 2
73
99
 
100
+ 2 of 2
74
101
  \f
75
102
  EOM
76
103
 
77
- # strip trailing newline
78
- expected = expected[0...-1]
104
+ # strip trailing newline and extra runs of spaces or newlines
105
+ expected = expected[0...-1].gsub(/ +/, ' ').gsub(/\n\n+/, "\n")
79
106
 
80
107
  # create the backup file!
81
108
  Paperback::CLI.create_backup(
@@ -88,14 +115,16 @@ VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4K
88
115
  expect(File.read('fox.pdf', 20)).to start_with("%PDF-1.3\n")
89
116
 
90
117
  # convert to text to see what's in it
91
- Subprocess.check_call(%w[pdftotext fox.pdf fox.pdftotext.txt])
118
+ Subprocess.check_call(%w[pdftotext -layout fox.pdf fox.pdftotext.txt])
92
119
 
93
120
  expect(File.size('fox.pdftotext.txt')).to be > 100
94
121
 
95
- # This test is likely to break given even minor changes to paperback, so it
96
- # may not be particularly useful. However, it's nice to at least have some
97
- # kind of end-to-end test.
98
- expect(File.read('fox.pdftotext.txt')).to eq(expected)
122
+ # This test is likely to break given even minor changes to paperback or
123
+ # pdftotext, so it may not be particularly useful. However, it's nice to
124
+ # at least have some kind of end-to-end test.
125
+ converted_text = File.read('fox.pdftotext.txt')
126
+ converted_text_stripped = converted_text.gsub(/ +/, ' ').gsub(/\n\n+/, "\n")
127
+ expect(converted_text_stripped).to eq(expected)
99
128
  end
100
129
 
101
130
  it 'backs up encrypted content correctly' do
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # typed: strict
1
2
  require_relative '../lib/paperback'
2
3
 
3
4
  # Given that it is always loaded, you are encouraged to keep this file as
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  RSpec.describe Paperback do
2
3
  it 'should have a version number' do
3
4
  expect(Paperback::VERSION).to be_a(String)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paperback
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Brody
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-26 00:00:00.000000000 Z
11
+ date: 2023-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '2.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pry
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.50'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sorbet
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.5'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.5'
97
+ - !ruby/object:Gem::Dependency
98
+ name: tapioca
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.10'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.10'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: yard
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +164,20 @@ dependencies:
136
164
  - - "~>"
137
165
  - !ruby/object:Gem::Version
138
166
  version: '0.3'
167
+ - !ruby/object:Gem::Dependency
168
+ name: sorbet-runtime
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.5'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.5'
139
181
  - !ruby/object:Gem::Dependency
140
182
  name: subprocess
141
183
  requirement: !ruby/object:Gem::Requirement
@@ -160,6 +202,7 @@ executables:
160
202
  extensions: []
161
203
  extra_rdoc_files: []
162
204
  files:
205
+ - ".github/workflows/tests.yml"
163
206
  - ".gitignore"
164
207
  - ".rspec"
165
208
  - ".rubocop-disables.yml"
@@ -177,12 +220,46 @@ files:
177
220
  - lib/paperback/preparer.rb
178
221
  - lib/paperback/version.rb
179
222
  - paperback.gemspec
180
- - sample/aes.key
181
- - sample/aes.pdf
182
- - sample/aes.pdf.passphrase.txt
183
- - sample/rsa2048.pdf
184
- - sample/rsa2048.pdf.passphrase.txt
185
- - sample/rsa2048.pem
223
+ - sorbet/config
224
+ - sorbet/rbi/annotations/rainbow.rbi
225
+ - sorbet/rbi/gems/ast@2.4.2.rbi
226
+ - sorbet/rbi/gems/chunky_png@1.4.0.rbi
227
+ - sorbet/rbi/gems/coderay@1.1.3.rbi
228
+ - sorbet/rbi/gems/diff-lcs@1.5.0.rbi
229
+ - sorbet/rbi/gems/method_source@1.0.0.rbi
230
+ - sorbet/rbi/gems/netrc@0.11.0.rbi
231
+ - sorbet/rbi/gems/parallel@1.22.1.rbi
232
+ - sorbet/rbi/gems/parser@3.2.0.0.rbi
233
+ - sorbet/rbi/gems/pdf-core@0.4.0.rbi
234
+ - sorbet/rbi/gems/prawn@1.3.0.rbi
235
+ - sorbet/rbi/gems/pry@0.14.1.rbi
236
+ - sorbet/rbi/gems/rainbow@3.1.1.rbi
237
+ - sorbet/rbi/gems/rake@13.0.6.rbi
238
+ - sorbet/rbi/gems/rbi@0.0.16.rbi
239
+ - sorbet/rbi/gems/regexp_parser@2.6.1.rbi
240
+ - sorbet/rbi/gems/rexml@3.2.5.rbi
241
+ - sorbet/rbi/gems/rqrcode@0.10.1.rbi
242
+ - sorbet/rbi/gems/rspec-core@3.12.0.rbi
243
+ - sorbet/rbi/gems/rspec-expectations@3.12.1.rbi
244
+ - sorbet/rbi/gems/rspec-mocks@3.12.1.rbi
245
+ - sorbet/rbi/gems/rspec-support@3.12.0.rbi
246
+ - sorbet/rbi/gems/rspec@3.12.0.rbi
247
+ - sorbet/rbi/gems/rubocop-ast@1.24.1.rbi
248
+ - sorbet/rbi/gems/rubocop@0.93.1.rbi
249
+ - sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi
250
+ - sorbet/rbi/gems/sixword@0.4.0.rbi
251
+ - sorbet/rbi/gems/spoom@1.1.15.rbi
252
+ - sorbet/rbi/gems/subprocess@1.5.6.rbi
253
+ - sorbet/rbi/gems/tapioca@0.10.5.rbi
254
+ - sorbet/rbi/gems/thor@1.2.1.rbi
255
+ - sorbet/rbi/gems/ttfunk@1.4.0.rbi
256
+ - sorbet/rbi/gems/unicode-display_width@1.8.0.rbi
257
+ - sorbet/rbi/gems/unparser@0.6.7.rbi
258
+ - sorbet/rbi/gems/webrick@1.7.0.rbi
259
+ - sorbet/rbi/gems/yard-sorbet@0.8.0.rbi
260
+ - sorbet/rbi/gems/yard@0.9.28.rbi
261
+ - sorbet/tapioca/config.yml
262
+ - sorbet/tapioca/require.rb
186
263
  - spec/functional/paperback/cli_spec.rb
187
264
  - spec/spec_helper.rb
188
265
  - spec/unit/paperback_spec.rb
@@ -198,15 +275,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
198
275
  requirements:
199
276
  - - ">="
200
277
  - !ruby/object:Gem::Version
201
- version: '2.0'
278
+ version: '2.7'
202
279
  required_rubygems_version: !ruby/object:Gem::Requirement
203
280
  requirements:
204
281
  - - ">="
205
282
  - !ruby/object:Gem::Version
206
283
  version: '0'
207
284
  requirements: []
208
- rubyforge_project:
209
- rubygems_version: 2.5.2.3
285
+ rubygems_version: 3.3.26
210
286
  signing_key:
211
287
  specification_version: 4
212
288
  summary: Create paper backups of sensitive data
data/sample/aes.key DELETED
@@ -1 +0,0 @@
1
- d˥�������z�D2�&L�:��B� �y�d�