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 +4 -4
- data/.rubocop.yml +3 -1
- data/README.md +25 -1
- data/bin/quickpdf +55 -0
- data/lib/quick_and_ruby/pdf/document.rb +42 -0
- data/lib/quick_and_ruby/pdf.rb +8 -0
- data/lib/quick_and_ruby/version.rb +1 -1
- data/quick_and_ruby.gemspec +15 -9
- metadata +134 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ca92f547a72562016dbe6ae7c6565066c2b4677133db05202de86d5471c228b
|
4
|
+
data.tar.gz: 9f60ad5846b8102a14b5a9de65b9a8e5db4bc71aaba14280196ec3739d83cb41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d093d56fb8ccb86f8f6a9b37e2caf034a89742d8aae6cadaa7fc200c24f1ace18cd8fbee4e536f94e39364bb551335be14e6818892b671990a3024f49968680
|
7
|
+
data.tar.gz: 60884d29f116d6adf7f41d59795d4a33ff6153fc089b4365ae57d6f1f4f3bbcb87f14d0aef95a70eb6d6b95121bb06e978aaadcace76e20e76a906cb3bd2a48d
|
data/.rubocop.yml
CHANGED
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
|
-
##
|
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
|
data/quick_and_ruby.gemspec
CHANGED
@@ -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 = '>
|
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 '
|
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
|
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.
|
52
|
-
spec.add_development_dependency 'reek', '~> 6.
|
53
|
-
spec.add_development_dependency 'rspec', '~> 3.13'
|
54
|
-
spec.add_development_dependency 'rubocop', '~> 1.
|
55
|
-
spec.add_development_dependency 'rubocop-rake', '~> 0.7.1'
|
56
|
-
spec.add_development_dependency 'rubocop-rspec', '~> 3.
|
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.
|
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:
|
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
|
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
|
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.
|
152
|
+
version: '13.3'
|
107
153
|
- - ">="
|
108
154
|
- !ruby/object:Gem::Version
|
109
|
-
version: 13.
|
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.
|
162
|
+
version: '13.3'
|
117
163
|
- - ">="
|
118
164
|
- !ruby/object:Gem::Version
|
119
|
-
version: 13.
|
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.
|
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.
|
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.
|
206
|
+
version: '1.76'
|
155
207
|
- - ">="
|
156
208
|
- !ruby/object:Gem::Version
|
157
|
-
version: 1.
|
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.
|
216
|
+
version: '1.76'
|
165
217
|
- - ">="
|
166
218
|
- !ruby/object:Gem::Version
|
167
|
-
version: 1.
|
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.
|
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.
|
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: '
|
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.
|
394
|
+
rubygems_version: 3.6.8
|
279
395
|
specification_version: 4
|
280
396
|
summary: Quick and Ruby utilities.
|
281
397
|
test_files: []
|