quick_and_ruby 0.6.0 → 0.7.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f694bf17e5634da7e5f13228b072538f39f2ea252ec354579a075367199afc01
4
- data.tar.gz: ab9726131a26e889a39a7130bb96b52846a84b8213e2a979ce04dd566e1754a1
3
+ metadata.gz: 7ca92f547a72562016dbe6ae7c6565066c2b4677133db05202de86d5471c228b
4
+ data.tar.gz: 9f60ad5846b8102a14b5a9de65b9a8e5db4bc71aaba14280196ec3739d83cb41
5
5
  SHA512:
6
- metadata.gz: 4df216e8b4b49e9e23c2362ac1ece88e0ef4485715af358000e1d72f29dcbeeea3f3e0439f233264fbb46921642277139cdd816fbe116924395a27e70e8549aa
7
- data.tar.gz: 5a2e34b0b1b9f95aa40f558cd4bd3c2ab2ed457372a60b5e17a952f1e23963409241c40429f6b44b1928cc4927bb4ac15392774b67ff19f8958a9c0907227956
6
+ metadata.gz: 2d093d56fb8ccb86f8f6a9b37e2caf034a89742d8aae6cadaa7fc200c24f1ace18cd8fbee4e536f94e39364bb551335be14e6818892b671990a3024f49968680
7
+ data.tar.gz: 60884d29f116d6adf7f41d59795d4a33ff6153fc089b4365ae57d6f1f4f3bbcb87f14d0aef95a70eb6d6b95121bb06e978aaadcace76e20e76a906cb3bd2a48d
data/.rubocop.yml CHANGED
@@ -1,10 +1,12 @@
1
+ ---
2
+
1
3
  plugins:
2
4
  - rubocop-rake
3
5
  - rubocop-rspec
4
6
 
5
7
  AllCops:
6
8
  NewCops: enable
7
- TargetRubyVersion: 2.7
9
+ TargetRubyVersion: 3.1
8
10
 
9
11
  Gemspec/DevelopmentDependencies:
10
12
  Enabled: false
data/README.md CHANGED
@@ -8,7 +8,7 @@ Gem to group utilities in ruby.
8
8
  gem install quick_and_ruby
9
9
  ```
10
10
 
11
- ## bins
11
+ ## bin's
12
12
 
13
13
  ### proxy
14
14
 
@@ -25,6 +25,30 @@ datetime -o <offset> -i <incr> -f "<format>" <from>|now <to>|now
25
25
  datetime -o <offset> -i <incr> -f "<format>" <from>|now
26
26
  ```
27
27
 
28
+ ### epoch
29
+
30
+ Convert epoch and time.
31
+
32
+ Usage:
33
+
34
+ ``` shell
35
+ # time to epoch
36
+ epoch 2025-01-01T01:01:01.000Z
37
+ 1735693261
38
+
39
+ # epoch to time UTC
40
+ epoch -u 1735693261
41
+ 2025-01-01T01:01:01.000Z
42
+
43
+ # epoch to time (local time zone)
44
+ epoch 1735693261
45
+ 2025-01-01T02:01:01.000+01:00
46
+
47
+ # time to epoch millis
48
+ epoch -m 2025-01-01T01:01:01.123Z
49
+ 1735693261123
50
+ ```
51
+
28
52
  ### yaml2json
29
53
 
30
54
  Convert yaml formated string, file or stdin to json format.
data/bin/quickpdf ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'gli'
4
+ require 'quick_and_ruby'
5
+ require 'quick_and_ruby/pdf'
6
+
7
+ class App
8
+ extend GLI::App
9
+
10
+ program_desc 'A quick PDF utility.'
11
+
12
+ version QuickAndRuby::VERSION
13
+
14
+ subcommand_option_handling :normal
15
+ arguments :strict
16
+
17
+ desc 'Extract links from a PDF document'
18
+ arg_name 'pdf_file [pdf_file2 ...]'
19
+ command:'extract-links' do |c|
20
+ c.desc 'URL schemes to extract (http, https, ftp, etc.). Can be specified multiple times'
21
+ c.flag [:s, :scheme], multiple: true, default_value: ['http', 'https']
22
+
23
+ c.action do |global_options, options, args|
24
+ raise GLI::BadCommandLine, "Missing required argument <PDF_FILE>" if args.empty?
25
+
26
+ schemes = options[:scheme].map(&:downcase)
27
+
28
+ error_count = 0
29
+ args.each do |pdf_filepath|
30
+ puts QuickAndRuby::Pdf::Document
31
+ .new(pdf_filepath)
32
+ .extract_links(schemes: schemes)
33
+ .compact
34
+ rescue StandardError => e
35
+ error_count += 1
36
+ puts "error: while processing #{pdf_filepath}: #{e}"
37
+ end
38
+ raise "error: #{error_count} errors while processing" if error_count.positive?
39
+ end
40
+ end
41
+
42
+ pre do |global,command,options,args|
43
+ true
44
+ end
45
+
46
+ post do |global,command,options,args|
47
+ true
48
+ end
49
+
50
+ on_error do |exception|
51
+ true
52
+ end
53
+ end
54
+
55
+ exit App.run(ARGV)
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'uri'
4
+ require 'pdf-reader'
5
+
6
+ module QuickAndRuby
7
+ module Pdf
8
+ class Document
9
+ DEFAULT_SCHEMES = %w[http https].freeze
10
+
11
+ attr_reader :filepath
12
+
13
+ def initialize(filepath)
14
+ @filepath = filepath
15
+ end
16
+
17
+ def extract_links(schemes: DEFAULT_SCHEMES)
18
+ links = []
19
+
20
+ doc_reader.pages.each do |page|
21
+ text = page.text
22
+ links += URI.extract(text, schemes)
23
+
24
+ annots = page.attributes[:Annots] || []
25
+ annots.each do |annot_ref|
26
+ annot = doc_reader.objects.deref(annot_ref)
27
+ next unless annot.is_a?(Hash) && annot[:A] && annot[:A][:URI]
28
+
29
+ target_uri = annot[:A][:URI]
30
+
31
+ links += URI.extract(target_uri, schemes)
32
+ end
33
+ end
34
+ links.uniq
35
+ end
36
+
37
+ def doc_reader
38
+ @doc_reader ||= PDF::Reader.new(filepath)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'pdf/document'
4
+
5
+ module QuickAndRuby
6
+ module Pdf
7
+ end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module QuickAndRuby
2
- VERSION = '0.6.0'.freeze
2
+ VERSION = '0.7.0'.freeze
3
3
  end
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.homepage = 'https://github.com/ttych/quick_and_ruby'
16
16
  spec.license = 'MIT'
17
17
 
18
- spec.required_ruby_version = '> 2.7'
18
+ spec.required_ruby_version = '> 3.1'
19
19
 
20
20
  if spec.respond_to?(:metadata)
21
21
  spec.metadata['allowed_push_host'] = 'https://rubygems.org'
@@ -42,16 +42,22 @@ Gem::Specification.new do |spec|
42
42
  spec.executables = spec.files.grep(%r{^#{spec.bindir}/}) { |f| File.basename(f) }
43
43
  spec.require_paths = ['lib']
44
44
 
45
- spec.add_dependency 'ostruct', '~> 0.6.1'
45
+ spec.add_dependency 'gli', '~> 2.22', '>= 2.22.2'
46
+ # spec.add_dependency 'hexapdf', '~> 1.3'
47
+ spec.add_dependency 'ostruct', '~> 0.6', '>= 0.6.1'
48
+ spec.add_dependency 'pdf-reader', '~> 2.14', '>= 2.14.1'
46
49
  spec.add_dependency 'webrick', '~> 1.9', '>= 1.9.1'
47
50
 
48
- spec.add_development_dependency 'bump', '~> 0.10.0'
51
+ spec.add_development_dependency 'bump', '~> 0.10'
49
52
  spec.add_development_dependency 'bundler', '~> 2.6', '>= 2.6.5'
50
53
  spec.add_development_dependency 'byebug', '~> 11.1', '>= 11.1.3'
51
- spec.add_development_dependency 'rake', '~> 13.2', '>= 13.2.1'
52
- spec.add_development_dependency 'reek', '~> 6.4'
53
- spec.add_development_dependency 'rspec', '~> 3.13'
54
- spec.add_development_dependency 'rubocop', '~> 1.72', '>= 1.72.2'
55
- spec.add_development_dependency 'rubocop-rake', '~> 0.7.1'
56
- spec.add_development_dependency 'rubocop-rspec', '~> 3.5'
54
+ spec.add_development_dependency 'rake', '~> 13.3', '>= 13.3.0'
55
+ spec.add_development_dependency 'reek', '~> 6.5'
56
+ spec.add_development_dependency 'rspec', '~> 3.13', '>= 3.13.1'
57
+ spec.add_development_dependency 'rubocop', '~> 1.76', '>= 1.76.1'
58
+ spec.add_development_dependency 'rubocop-rake', '~> 0.7', '>= 0.7.1'
59
+ spec.add_development_dependency 'rubocop-rspec', '~> 3.6'
60
+ spec.add_development_dependency 'ruby-lsp', '~> 0.24'
61
+ spec.add_development_dependency 'ruby-lsp-reek', '~> 0.3', '>= 0.3.1'
62
+ spec.add_development_dependency 'ruby-lsp-rspec', '~> 0.1', '>= 0.1.25'
57
63
  end
metadata CHANGED
@@ -1,19 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quick_and_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ttych
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-02-25 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: gli
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.22'
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: 2.22.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '2.22'
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 2.22.2
12
32
  - !ruby/object:Gem::Dependency
13
33
  name: ostruct
14
34
  requirement: !ruby/object:Gem::Requirement
15
35
  requirements:
16
36
  - - "~>"
37
+ - !ruby/object:Gem::Version
38
+ version: '0.6'
39
+ - - ">="
17
40
  - !ruby/object:Gem::Version
18
41
  version: 0.6.1
19
42
  type: :runtime
@@ -21,8 +44,31 @@ dependencies:
21
44
  version_requirements: !ruby/object:Gem::Requirement
22
45
  requirements:
23
46
  - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '0.6'
49
+ - - ">="
24
50
  - !ruby/object:Gem::Version
25
51
  version: 0.6.1
52
+ - !ruby/object:Gem::Dependency
53
+ name: pdf-reader
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - "~>"
57
+ - !ruby/object:Gem::Version
58
+ version: '2.14'
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 2.14.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.14'
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: 2.14.1
26
72
  - !ruby/object:Gem::Dependency
27
73
  name: webrick
28
74
  requirement: !ruby/object:Gem::Requirement
@@ -49,14 +95,14 @@ dependencies:
49
95
  requirements:
50
96
  - - "~>"
51
97
  - !ruby/object:Gem::Version
52
- version: 0.10.0
98
+ version: '0.10'
53
99
  type: :development
54
100
  prerelease: false
55
101
  version_requirements: !ruby/object:Gem::Requirement
56
102
  requirements:
57
103
  - - "~>"
58
104
  - !ruby/object:Gem::Version
59
- version: 0.10.0
105
+ version: '0.10'
60
106
  - !ruby/object:Gem::Dependency
61
107
  name: bundler
62
108
  requirement: !ruby/object:Gem::Requirement
@@ -103,34 +149,34 @@ dependencies:
103
149
  requirements:
104
150
  - - "~>"
105
151
  - !ruby/object:Gem::Version
106
- version: '13.2'
152
+ version: '13.3'
107
153
  - - ">="
108
154
  - !ruby/object:Gem::Version
109
- version: 13.2.1
155
+ version: 13.3.0
110
156
  type: :development
111
157
  prerelease: false
112
158
  version_requirements: !ruby/object:Gem::Requirement
113
159
  requirements:
114
160
  - - "~>"
115
161
  - !ruby/object:Gem::Version
116
- version: '13.2'
162
+ version: '13.3'
117
163
  - - ">="
118
164
  - !ruby/object:Gem::Version
119
- version: 13.2.1
165
+ version: 13.3.0
120
166
  - !ruby/object:Gem::Dependency
121
167
  name: reek
122
168
  requirement: !ruby/object:Gem::Requirement
123
169
  requirements:
124
170
  - - "~>"
125
171
  - !ruby/object:Gem::Version
126
- version: '6.4'
172
+ version: '6.5'
127
173
  type: :development
128
174
  prerelease: false
129
175
  version_requirements: !ruby/object:Gem::Requirement
130
176
  requirements:
131
177
  - - "~>"
132
178
  - !ruby/object:Gem::Version
133
- version: '6.4'
179
+ version: '6.5'
134
180
  - !ruby/object:Gem::Dependency
135
181
  name: rspec
136
182
  requirement: !ruby/object:Gem::Requirement
@@ -138,6 +184,9 @@ dependencies:
138
184
  - - "~>"
139
185
  - !ruby/object:Gem::Version
140
186
  version: '3.13'
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: 3.13.1
141
190
  type: :development
142
191
  prerelease: false
143
192
  version_requirements: !ruby/object:Gem::Requirement
@@ -145,31 +194,37 @@ dependencies:
145
194
  - - "~>"
146
195
  - !ruby/object:Gem::Version
147
196
  version: '3.13'
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: 3.13.1
148
200
  - !ruby/object:Gem::Dependency
149
201
  name: rubocop
150
202
  requirement: !ruby/object:Gem::Requirement
151
203
  requirements:
152
204
  - - "~>"
153
205
  - !ruby/object:Gem::Version
154
- version: '1.72'
206
+ version: '1.76'
155
207
  - - ">="
156
208
  - !ruby/object:Gem::Version
157
- version: 1.72.2
209
+ version: 1.76.1
158
210
  type: :development
159
211
  prerelease: false
160
212
  version_requirements: !ruby/object:Gem::Requirement
161
213
  requirements:
162
214
  - - "~>"
163
215
  - !ruby/object:Gem::Version
164
- version: '1.72'
216
+ version: '1.76'
165
217
  - - ">="
166
218
  - !ruby/object:Gem::Version
167
- version: 1.72.2
219
+ version: 1.76.1
168
220
  - !ruby/object:Gem::Dependency
169
221
  name: rubocop-rake
170
222
  requirement: !ruby/object:Gem::Requirement
171
223
  requirements:
172
224
  - - "~>"
225
+ - !ruby/object:Gem::Version
226
+ version: '0.7'
227
+ - - ">="
173
228
  - !ruby/object:Gem::Version
174
229
  version: 0.7.1
175
230
  type: :development
@@ -177,6 +232,9 @@ dependencies:
177
232
  version_requirements: !ruby/object:Gem::Requirement
178
233
  requirements:
179
234
  - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '0.7'
237
+ - - ">="
180
238
  - !ruby/object:Gem::Version
181
239
  version: 0.7.1
182
240
  - !ruby/object:Gem::Dependency
@@ -185,14 +243,68 @@ dependencies:
185
243
  requirements:
186
244
  - - "~>"
187
245
  - !ruby/object:Gem::Version
188
- version: '3.5'
246
+ version: '3.6'
189
247
  type: :development
190
248
  prerelease: false
191
249
  version_requirements: !ruby/object:Gem::Requirement
192
250
  requirements:
193
251
  - - "~>"
194
252
  - !ruby/object:Gem::Version
195
- version: '3.5'
253
+ version: '3.6'
254
+ - !ruby/object:Gem::Dependency
255
+ name: ruby-lsp
256
+ requirement: !ruby/object:Gem::Requirement
257
+ requirements:
258
+ - - "~>"
259
+ - !ruby/object:Gem::Version
260
+ version: '0.24'
261
+ type: :development
262
+ prerelease: false
263
+ version_requirements: !ruby/object:Gem::Requirement
264
+ requirements:
265
+ - - "~>"
266
+ - !ruby/object:Gem::Version
267
+ version: '0.24'
268
+ - !ruby/object:Gem::Dependency
269
+ name: ruby-lsp-reek
270
+ requirement: !ruby/object:Gem::Requirement
271
+ requirements:
272
+ - - "~>"
273
+ - !ruby/object:Gem::Version
274
+ version: '0.3'
275
+ - - ">="
276
+ - !ruby/object:Gem::Version
277
+ version: 0.3.1
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - "~>"
283
+ - !ruby/object:Gem::Version
284
+ version: '0.3'
285
+ - - ">="
286
+ - !ruby/object:Gem::Version
287
+ version: 0.3.1
288
+ - !ruby/object:Gem::Dependency
289
+ name: ruby-lsp-rspec
290
+ requirement: !ruby/object:Gem::Requirement
291
+ requirements:
292
+ - - "~>"
293
+ - !ruby/object:Gem::Version
294
+ version: '0.1'
295
+ - - ">="
296
+ - !ruby/object:Gem::Version
297
+ version: 0.1.25
298
+ type: :development
299
+ prerelease: false
300
+ version_requirements: !ruby/object:Gem::Requirement
301
+ requirements:
302
+ - - "~>"
303
+ - !ruby/object:Gem::Version
304
+ version: '0.1'
305
+ - - ">="
306
+ - !ruby/object:Gem::Version
307
+ version: 0.1.25
196
308
  description: Set of small and standalone utilities in Ruby.
197
309
  email:
198
310
  - thomas.tych@gmail.com
@@ -204,6 +316,7 @@ executables:
204
316
  - jb
205
317
  - json2yaml
206
318
  - proxy
319
+ - quickpdf
207
320
  - yaml2json
208
321
  - yb
209
322
  extensions: []
@@ -226,6 +339,7 @@ files:
226
339
  - bin/jb
227
340
  - bin/json2yaml
228
341
  - bin/proxy
342
+ - bin/quickpdf
229
343
  - bin/yaml2json
230
344
  - bin/yb
231
345
  - lib/quick_and_ruby.rb
@@ -239,6 +353,8 @@ files:
239
353
  - lib/quick_and_ruby/distinguished_name/attribute.rb
240
354
  - lib/quick_and_ruby/distinguished_name/openssl_format.rb
241
355
  - lib/quick_and_ruby/distinguished_name/rfc_format.rb
356
+ - lib/quick_and_ruby/pdf.rb
357
+ - lib/quick_and_ruby/pdf/document.rb
242
358
  - lib/quick_and_ruby/proxy/arg_parser.rb
243
359
  - lib/quick_and_ruby/proxy/env_parser.rb
244
360
  - lib/quick_and_ruby/proxy/proxy.rb
@@ -268,14 +384,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
268
384
  requirements:
269
385
  - - ">"
270
386
  - !ruby/object:Gem::Version
271
- version: '2.7'
387
+ version: '3.1'
272
388
  required_rubygems_version: !ruby/object:Gem::Requirement
273
389
  requirements:
274
390
  - - ">="
275
391
  - !ruby/object:Gem::Version
276
392
  version: '0'
277
393
  requirements: []
278
- rubygems_version: 3.6.4
394
+ rubygems_version: 3.6.8
279
395
  specification_version: 4
280
396
  summary: Quick and Ruby utilities.
281
397
  test_files: []