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.
- checksums.yaml +5 -5
- data/.github/workflows/tests.yml +43 -0
- data/.rubocop-disables.yml +26 -9
- data/CHANGELOG.md +13 -0
- data/README.md +4 -1
- data/lib/paperback/cli.rb +17 -0
- data/lib/paperback/document.rb +78 -11
- data/lib/paperback/preparer.rb +77 -22
- data/lib/paperback/version.rb +2 -1
- data/lib/paperback.rb +14 -0
- data/paperback.gemspec +13 -9
- data/sorbet/config +3 -0
- data/sorbet/rbi/annotations/rainbow.rbi +269 -0
- data/sorbet/rbi/gems/ast@2.4.2.rbi +584 -0
- data/sorbet/rbi/gems/chunky_png@1.4.0.rbi +4498 -0
- data/sorbet/rbi/gems/coderay@1.1.3.rbi +3426 -0
- data/sorbet/rbi/gems/diff-lcs@1.5.0.rbi +1083 -0
- data/sorbet/rbi/gems/method_source@1.0.0.rbi +272 -0
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +158 -0
- data/sorbet/rbi/gems/parallel@1.22.1.rbi +277 -0
- data/sorbet/rbi/gems/parser@3.2.0.0.rbi +6963 -0
- data/sorbet/rbi/gems/pdf-core@0.4.0.rbi +1682 -0
- data/sorbet/rbi/gems/prawn@1.3.0.rbi +5567 -0
- data/sorbet/rbi/gems/pry@0.14.1.rbi +9990 -0
- data/sorbet/rbi/gems/rainbow@3.1.1.rbi +408 -0
- data/sorbet/rbi/gems/rake@13.0.6.rbi +3023 -0
- data/sorbet/rbi/gems/rbi@0.0.16.rbi +3008 -0
- data/sorbet/rbi/gems/regexp_parser@2.6.1.rbi +3481 -0
- data/sorbet/rbi/gems/rexml@3.2.5.rbi +4717 -0
- data/sorbet/rbi/gems/rqrcode@0.10.1.rbi +617 -0
- data/sorbet/rbi/gems/rspec-core@3.12.0.rbi +10791 -0
- data/sorbet/rbi/gems/rspec-expectations@3.12.1.rbi +8106 -0
- data/sorbet/rbi/gems/rspec-mocks@3.12.1.rbi +5305 -0
- data/sorbet/rbi/gems/rspec-support@3.12.0.rbi +1617 -0
- data/sorbet/rbi/gems/rspec@3.12.0.rbi +88 -0
- data/sorbet/rbi/gems/rubocop-ast@1.24.1.rbi +6617 -0
- data/sorbet/rbi/gems/rubocop@0.93.1.rbi +40848 -0
- data/sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi +1234 -0
- data/sorbet/rbi/gems/sixword@0.4.0.rbi +536 -0
- data/sorbet/rbi/gems/spoom@1.1.15.rbi +2383 -0
- data/sorbet/rbi/gems/subprocess@1.5.6.rbi +391 -0
- data/sorbet/rbi/gems/tapioca@0.10.5.rbi +3207 -0
- data/sorbet/rbi/gems/thor@1.2.1.rbi +3956 -0
- data/sorbet/rbi/gems/ttfunk@1.4.0.rbi +1951 -0
- data/sorbet/rbi/gems/unicode-display_width@1.8.0.rbi +40 -0
- data/sorbet/rbi/gems/unparser@0.6.7.rbi +4524 -0
- data/sorbet/rbi/gems/webrick@1.7.0.rbi +2555 -0
- data/sorbet/rbi/gems/yard-sorbet@0.8.0.rbi +441 -0
- data/sorbet/rbi/gems/yard@0.9.28.rbi +17816 -0
- data/sorbet/tapioca/config.yml +13 -0
- data/sorbet/tapioca/require.rb +4 -0
- data/spec/functional/paperback/cli_spec.rb +55 -25
- data/spec/spec_helper.rb +1 -0
- data/spec/unit/paperback_spec.rb +1 -0
- metadata +107 -20
- data/sample/aes.key +0 -1
- data/sample/aes.pdf +0 -14413
- data/sample/aes.pdf.passphrase.txt +0 -1
- data/sample/rsa2048.pdf +0 -106803
- data/sample/rsa2048.pdf.passphrase.txt +0 -1
- data/sample/rsa2048.pem +0 -27
@@ -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
|
96
|
-
# may not be particularly useful. However, it's nice to
|
97
|
-
# kind of end-to-end test.
|
98
|
-
|
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
data/spec/unit/paperback_spec.rb
CHANGED
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
|
+
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:
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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
|
-
-
|
181
|
-
-
|
182
|
-
-
|
183
|
-
-
|
184
|
-
-
|
185
|
-
-
|
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: '
|
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
|
-
|
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�
|