paperback 0.0.4 → 0.0.6

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.
Files changed (61) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/tests.yml +43 -0
  3. data/.rubocop-disables.yml +26 -9
  4. data/CHANGELOG.md +13 -0
  5. data/README.md +4 -1
  6. data/lib/paperback/cli.rb +17 -0
  7. data/lib/paperback/document.rb +78 -11
  8. data/lib/paperback/preparer.rb +77 -22
  9. data/lib/paperback/version.rb +2 -1
  10. data/lib/paperback.rb +14 -0
  11. data/paperback.gemspec +13 -9
  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 +55 -25
  53. data/spec/spec_helper.rb +1 -0
  54. data/spec/unit/paperback_spec.rb +1 -0
  55. metadata +107 -20
  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,41 @@ 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
+ /\A24\..*\z/,
17
+ ]
18
+
19
+ def get_pdftotext_version
20
+ output = Subprocess.check_output(
21
+ ['pdftotext', '-v'], stderr: Subprocess::STDOUT
22
+ )
23
+ first_line = output.lines(chomp: true)[0]
24
+ if first_line.nil?
25
+ raise Exception('Unexpected version line from pdftotext: ' + output.inspect)
26
+ end
27
+
28
+ parts = first_line.split(' ')
29
+ if parts[0] != 'pdftotext' || parts[1] != 'version'
30
+ raise Exception('Bad version line from pdftotext: ' + first_line.inspect)
31
+ end
32
+
33
+ return parts[2..].join(' ')
34
+ end
35
+
12
36
  # pdftotext from poppler is a test dependency
13
37
  it 'finds system pdftotext installed (test dependency)' do
14
38
  expect(Subprocess.check_output(%w[which pdftotext])
15
39
  ).to match(/pdftotext/)
40
+
41
+ version = get_pdftotext_version
42
+
43
+ expect(version).to match(/\A\d+\..*/)
44
+
45
+ unless SupportedPopplerVersions.any? {|regex| regex.match(version) }
46
+ Paperback.log.warn("#{File.basename(__FILE__)}: Unsupported poppler-utils pdftotext version #{version}, tests may fail!")
47
+ end
16
48
  end
17
49
 
18
50
  describe 'end-to-end test:' do
@@ -40,25 +72,19 @@ RSpec.describe Paperback::CLI do
40
72
 
41
73
  expected = <<-EOM
42
74
  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
75
 
76
+ Filename: fox.txt
77
+ Backed up: #{timestamp}
78
+ Mtime: #{timestamp}
79
+ Bytes: 45
80
+ Comment: Some comment
81
+ SHA256: b47cc0f104b62d4c7c30bcd68fd8e67613e287dc4ad8c310ef10cbadea9c4380
82
+ Encrypted: no
83
+
84
+
85
+ 1 of 2
61
86
  \fThis sixword text encodes 45 bytes in 6 six-word sentences. Decode with `sixword -d`.
87
+
62
88
  1: beak us ache sour bern lola
63
89
  2: core arc hulk slid drew due
64
90
  3: chub ends bog russ bess mast
@@ -66,16 +92,18 @@ no
66
92
  5: coat mod hit need knew grim
67
93
  6: cave ella raft fir a act3
68
94
 
95
+
69
96
  This base64 text encodes 45 bytes in 61 characters. Decode with `base64 --decode`.
97
+
70
98
  VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4K
71
99
 
72
- 2 of 2
73
100
 
101
+ 2 of 2
74
102
  \f
75
103
  EOM
76
104
 
77
- # strip trailing newline
78
- expected = expected[0...-1]
105
+ # strip trailing newline and extra runs of spaces or newlines
106
+ expected = expected[0...-1].gsub(/ +/, ' ').gsub(/\n\n+/, "\n")
79
107
 
80
108
  # create the backup file!
81
109
  Paperback::CLI.create_backup(
@@ -88,14 +116,16 @@ VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4K
88
116
  expect(File.read('fox.pdf', 20)).to start_with("%PDF-1.3\n")
89
117
 
90
118
  # convert to text to see what's in it
91
- Subprocess.check_call(%w[pdftotext fox.pdf fox.pdftotext.txt])
119
+ Subprocess.check_call(%w[pdftotext -layout fox.pdf fox.pdftotext.txt])
92
120
 
93
121
  expect(File.size('fox.pdftotext.txt')).to be > 100
94
122
 
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)
123
+ # This test is likely to break given even minor changes to paperback or
124
+ # pdftotext, so it may not be particularly useful. However, it's nice to
125
+ # at least have some kind of end-to-end test.
126
+ converted_text = File.read('fox.pdftotext.txt')
127
+ converted_text_stripped = converted_text.gsub(/ +/, ' ').gsub(/\n\n+/, "\n")
128
+ expect(converted_text_stripped).to eq(expected)
99
129
  end
100
130
 
101
131
  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,13 @@
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.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Brody
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2019-02-26 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -16,14 +15,14 @@ dependencies:
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: '1.3'
18
+ version: '2.0'
20
19
  type: :development
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
- version: '1.3'
25
+ version: '2.0'
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: pry
29
28
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +79,34 @@ dependencies:
80
79
  - - "~>"
81
80
  - !ruby/object:Gem::Version
82
81
  version: '0.50'
82
+ - !ruby/object:Gem::Dependency
83
+ name: sorbet
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.5'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.5'
96
+ - !ruby/object:Gem::Dependency
97
+ name: tapioca
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.10'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.10'
83
110
  - !ruby/object:Gem::Dependency
84
111
  name: yard
85
112
  requirement: !ruby/object:Gem::Requirement
@@ -94,34 +121,48 @@ dependencies:
94
121
  - - ">="
95
122
  - !ruby/object:Gem::Version
96
123
  version: '0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: base64
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
97
138
  - !ruby/object:Gem::Dependency
98
139
  name: prawn
99
140
  requirement: !ruby/object:Gem::Requirement
100
141
  requirements:
101
142
  - - "~>"
102
143
  - !ruby/object:Gem::Version
103
- version: '1.3'
144
+ version: '2.5'
104
145
  type: :runtime
105
146
  prerelease: false
106
147
  version_requirements: !ruby/object:Gem::Requirement
107
148
  requirements:
108
149
  - - "~>"
109
150
  - !ruby/object:Gem::Version
110
- version: '1.3'
151
+ version: '2.5'
111
152
  - !ruby/object:Gem::Dependency
112
153
  name: rqrcode
113
154
  requirement: !ruby/object:Gem::Requirement
114
155
  requirements:
115
156
  - - "~>"
116
157
  - !ruby/object:Gem::Version
117
- version: '0.10'
158
+ version: '3.1'
118
159
  type: :runtime
119
160
  prerelease: false
120
161
  version_requirements: !ruby/object:Gem::Requirement
121
162
  requirements:
122
163
  - - "~>"
123
164
  - !ruby/object:Gem::Version
124
- version: '0.10'
165
+ version: '3.1'
125
166
  - !ruby/object:Gem::Dependency
126
167
  name: sixword
127
168
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +177,20 @@ dependencies:
136
177
  - - "~>"
137
178
  - !ruby/object:Gem::Version
138
179
  version: '0.3'
180
+ - !ruby/object:Gem::Dependency
181
+ name: sorbet-runtime
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '0.5'
187
+ type: :runtime
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '0.5'
139
194
  - !ruby/object:Gem::Dependency
140
195
  name: subprocess
141
196
  requirement: !ruby/object:Gem::Requirement
@@ -160,6 +215,7 @@ executables:
160
215
  extensions: []
161
216
  extra_rdoc_files: []
162
217
  files:
218
+ - ".github/workflows/tests.yml"
163
219
  - ".gitignore"
164
220
  - ".rspec"
165
221
  - ".rubocop-disables.yml"
@@ -177,12 +233,46 @@ files:
177
233
  - lib/paperback/preparer.rb
178
234
  - lib/paperback/version.rb
179
235
  - 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
236
+ - sorbet/config
237
+ - sorbet/rbi/annotations/rainbow.rbi
238
+ - sorbet/rbi/gems/ast@2.4.2.rbi
239
+ - sorbet/rbi/gems/chunky_png@1.4.0.rbi
240
+ - sorbet/rbi/gems/coderay@1.1.3.rbi
241
+ - sorbet/rbi/gems/diff-lcs@1.5.0.rbi
242
+ - sorbet/rbi/gems/method_source@1.0.0.rbi
243
+ - sorbet/rbi/gems/netrc@0.11.0.rbi
244
+ - sorbet/rbi/gems/parallel@1.22.1.rbi
245
+ - sorbet/rbi/gems/parser@3.2.0.0.rbi
246
+ - sorbet/rbi/gems/pdf-core@0.4.0.rbi
247
+ - sorbet/rbi/gems/prawn@1.3.0.rbi
248
+ - sorbet/rbi/gems/pry@0.14.1.rbi
249
+ - sorbet/rbi/gems/rainbow@3.1.1.rbi
250
+ - sorbet/rbi/gems/rake@13.0.6.rbi
251
+ - sorbet/rbi/gems/rbi@0.0.16.rbi
252
+ - sorbet/rbi/gems/regexp_parser@2.6.1.rbi
253
+ - sorbet/rbi/gems/rexml@3.2.5.rbi
254
+ - sorbet/rbi/gems/rqrcode@0.10.1.rbi
255
+ - sorbet/rbi/gems/rspec-core@3.12.0.rbi
256
+ - sorbet/rbi/gems/rspec-expectations@3.12.1.rbi
257
+ - sorbet/rbi/gems/rspec-mocks@3.12.1.rbi
258
+ - sorbet/rbi/gems/rspec-support@3.12.0.rbi
259
+ - sorbet/rbi/gems/rspec@3.12.0.rbi
260
+ - sorbet/rbi/gems/rubocop-ast@1.24.1.rbi
261
+ - sorbet/rbi/gems/rubocop@0.93.1.rbi
262
+ - sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi
263
+ - sorbet/rbi/gems/sixword@0.4.0.rbi
264
+ - sorbet/rbi/gems/spoom@1.1.15.rbi
265
+ - sorbet/rbi/gems/subprocess@1.5.6.rbi
266
+ - sorbet/rbi/gems/tapioca@0.10.5.rbi
267
+ - sorbet/rbi/gems/thor@1.2.1.rbi
268
+ - sorbet/rbi/gems/ttfunk@1.4.0.rbi
269
+ - sorbet/rbi/gems/unicode-display_width@1.8.0.rbi
270
+ - sorbet/rbi/gems/unparser@0.6.7.rbi
271
+ - sorbet/rbi/gems/webrick@1.7.0.rbi
272
+ - sorbet/rbi/gems/yard-sorbet@0.8.0.rbi
273
+ - sorbet/rbi/gems/yard@0.9.28.rbi
274
+ - sorbet/tapioca/config.yml
275
+ - sorbet/tapioca/require.rb
186
276
  - spec/functional/paperback/cli_spec.rb
187
277
  - spec/spec_helper.rb
188
278
  - spec/unit/paperback_spec.rb
@@ -190,7 +280,6 @@ homepage: https://github.com/ab/paperback
190
280
  licenses:
191
281
  - GPL-3
192
282
  metadata: {}
193
- post_install_message:
194
283
  rdoc_options: []
195
284
  require_paths:
196
285
  - lib
@@ -198,16 +287,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
198
287
  requirements:
199
288
  - - ">="
200
289
  - !ruby/object:Gem::Version
201
- version: '2.0'
290
+ version: '3.0'
202
291
  required_rubygems_version: !ruby/object:Gem::Requirement
203
292
  requirements:
204
293
  - - ">="
205
294
  - !ruby/object:Gem::Version
206
295
  version: '0'
207
296
  requirements: []
208
- rubyforge_project:
209
- rubygems_version: 2.5.2.3
210
- signing_key:
297
+ rubygems_version: 3.6.9
211
298
  specification_version: 4
212
299
  summary: Create paper backups of sensitive data
213
300
  test_files:
data/sample/aes.key DELETED
@@ -1 +0,0 @@
1
- d˥�������z�D2�&L�:��B� �y�d�