quick_and_ruby 0.6.0 → 0.8.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/bin/s3_web_indexer +28 -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/s3/web_index_renderer.rb +93 -0
- data/lib/quick_and_ruby/s3/web_indexer.rb +106 -0
- data/lib/quick_and_ruby/s3.rb +11 -0
- data/lib/quick_and_ruby/version.rb +1 -1
- data/quick_and_ruby.gemspec +19 -11
- metadata +179 -30
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2be4d68167ffdc0814b0a5bb3dfada60271de21a922ef4c7b927907c7beda8db
|
|
4
|
+
data.tar.gz: ea517d525d665fe46fffcee29b5b77c19fdc30d97ab74b5a2518fb08fc430fa2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f050a85a80ce18c11257021c298c9b11af23694c06dd1ae27bd0018de33006665ac1637c9555054a275d5389afd54c04ff1195c419a77a2d28ae124409312360
|
|
7
|
+
data.tar.gz: d28612a9521ba0825001eb8b5065fd366839211b91b7b69eb505d5aed074100b270cabcea3d3f9f0445bccf151c7f53390e2175806d8aeec13a290261138ef2c
|
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)
|
data/bin/s3_web_indexer
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env/ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'optparse'
|
|
5
|
+
require 'quick_and_ruby/s3'
|
|
6
|
+
|
|
7
|
+
options = {
|
|
8
|
+
path: '/',
|
|
9
|
+
nested: false
|
|
10
|
+
}
|
|
11
|
+
option_parser = OptionParser.new do |opt|
|
|
12
|
+
opt.banner = 'Usage: s3_web_indexer [options]'
|
|
13
|
+
|
|
14
|
+
opt.on('-b', '--bucket BUCKET', 'S3 bucket name') { |v| options[:bucket] = v }
|
|
15
|
+
opt.on('-u', '--url URL', 'S3 endpoint URL') { |v| options[:endpoint_url] = v }
|
|
16
|
+
opt.on('-a', '--access-key KEY', 'S3 access key') { |v| options[:access_key] = v }
|
|
17
|
+
opt.on('-s', '--secret-key KEY', 'S3 secret access key') { |v| options[:secret_key] = v }
|
|
18
|
+
opt.on('-N', '--nested', 'All nested objects') { |_v| options[:nested] = true }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
argv = ARGV.clone
|
|
22
|
+
option_parser.parse!(argv)
|
|
23
|
+
|
|
24
|
+
abort('Missing required arguments') unless options.values_at(
|
|
25
|
+
:bucket, :endpoint_url, :access_key, :secret_key
|
|
26
|
+
).all?
|
|
27
|
+
|
|
28
|
+
exit QuickAndRuby::S3::WebIndexer.new(**options).index(*argv, nested: options[:nested])
|
|
@@ -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,93 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'erb'
|
|
4
|
+
|
|
5
|
+
module QuickAndRuby
|
|
6
|
+
module S3
|
|
7
|
+
class WebIndexRenderer
|
|
8
|
+
DEFAULT_TEMPLATE = <<~HTML
|
|
9
|
+
<!DOCTYPE html>
|
|
10
|
+
<html>
|
|
11
|
+
<head>
|
|
12
|
+
<title><%= path %></title>
|
|
13
|
+
<style>
|
|
14
|
+
body { font-family: Arial, sans-serif; margin: 20px; }
|
|
15
|
+
h1 { color: #333; }
|
|
16
|
+
table { border-collapse: collapse; width: 100%; margin-top: 20px; }
|
|
17
|
+
th, td { padding: 8px 12px; text-align: left; border-bottom: 1px solid #ddd; }
|
|
18
|
+
th { background-color: #f4f4f4; font-weight: bold; }
|
|
19
|
+
tr:hover { background-color: #f9f9f9; }
|
|
20
|
+
a { color: #0066cc; text-decoration: none; }
|
|
21
|
+
a:hover { text-decoration: underline; }
|
|
22
|
+
.size { font-family: monospace; }
|
|
23
|
+
.date { color: #666; }
|
|
24
|
+
.dir { font-weight: bold; color: #228822; }
|
|
25
|
+
</style>
|
|
26
|
+
</head>
|
|
27
|
+
<body>
|
|
28
|
+
<h1><%= path %></h1>
|
|
29
|
+
|
|
30
|
+
<% unless path == '/' %>
|
|
31
|
+
<p><a class="dir" href="../index.html">../</a></p>
|
|
32
|
+
<% end %>
|
|
33
|
+
|
|
34
|
+
<% if files.empty? %>
|
|
35
|
+
<p>No files found.</p>
|
|
36
|
+
<% else %>
|
|
37
|
+
<table>
|
|
38
|
+
<tr>
|
|
39
|
+
<th>Filename</th>
|
|
40
|
+
<th>Last Modified</th>
|
|
41
|
+
<th>Size</th>
|
|
42
|
+
</tr>
|
|
43
|
+
<% files.each do |file| %>
|
|
44
|
+
<tr>
|
|
45
|
+
<% if file[:is_directory] %>
|
|
46
|
+
<td class="dir"><a href="<%= file[:filename_relative_path] %>index.html"><%= file[:filename] %></a></td>
|
|
47
|
+
<td class="date"></td>
|
|
48
|
+
<td class="size"></td>
|
|
49
|
+
<% else %>
|
|
50
|
+
<td><a href="<%= file[:filename_relative_path] %>"><%= file[:filename] %></a></td>
|
|
51
|
+
<td class="date"><%= format_date(file[:last_modified]) %></td>
|
|
52
|
+
<td class="size"><%= format_size(file[:size]) %></td>
|
|
53
|
+
<% end %>
|
|
54
|
+
</tr>
|
|
55
|
+
<% end %>
|
|
56
|
+
</table>
|
|
57
|
+
<p><%= files.size %> item(s)</p>
|
|
58
|
+
<% end %>
|
|
59
|
+
</body>
|
|
60
|
+
</html>
|
|
61
|
+
HTML
|
|
62
|
+
|
|
63
|
+
attr_reader :template
|
|
64
|
+
|
|
65
|
+
def initialize(template = DEFAULT_TEMPLATE)
|
|
66
|
+
@template = ERB.new(template)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def generate(path:, files:)
|
|
70
|
+
template.result(binding)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def format_date(date)
|
|
74
|
+
date.strftime('%Y-%m-%d %H:%M')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def format_size(bytes)
|
|
78
|
+
return '0 B' if bytes.zero?
|
|
79
|
+
|
|
80
|
+
units = %w[B KB MB GB TB]
|
|
81
|
+
size = bytes.to_f
|
|
82
|
+
unit = 0
|
|
83
|
+
|
|
84
|
+
while size >= 1024 && unit < units.size - 1
|
|
85
|
+
size /= 1024
|
|
86
|
+
unit += 1
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
format("%.2f #{units[unit]}", size)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'aws-sdk-s3'
|
|
4
|
+
|
|
5
|
+
require_relative 'web_index_renderer'
|
|
6
|
+
|
|
7
|
+
# rubocop:disable Metrics/ParameterLists, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity, Metrics/BlockLength
|
|
8
|
+
module QuickAndRuby
|
|
9
|
+
module S3
|
|
10
|
+
class WebIndexer
|
|
11
|
+
attr_reader :bucket, :endpoint_url, :access_key, :secret_key, :region, :index_template
|
|
12
|
+
|
|
13
|
+
def initialize(bucket:, endpoint_url:, access_key:, secret_key:, region: 'us-east-1',
|
|
14
|
+
index_template: WebIndexRenderer.new, **extra)
|
|
15
|
+
@bucket = bucket
|
|
16
|
+
@endpoint_url = endpoint_url
|
|
17
|
+
@access_key = access_key
|
|
18
|
+
@secret_key = secret_key
|
|
19
|
+
@region = region
|
|
20
|
+
@index_template = index_template
|
|
21
|
+
@extra = extra
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def index(*paths, nested: false)
|
|
25
|
+
paths.append('/') if paths.empty?
|
|
26
|
+
|
|
27
|
+
status = paths.inject(0) { |status, path| status + index_directory(path, nested: nested) }
|
|
28
|
+
status = 1 if status != 0
|
|
29
|
+
status
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def list_directory(path, recursive: false)
|
|
33
|
+
objects = []
|
|
34
|
+
continuation_token = nil
|
|
35
|
+
prefix = path.end_with?('/') ? path : "#{path}/"
|
|
36
|
+
loop do
|
|
37
|
+
resp = s3_client.list_objects_v2(
|
|
38
|
+
bucket: bucket,
|
|
39
|
+
prefix: prefix,
|
|
40
|
+
delimiter: (recursive ? nil : '/'),
|
|
41
|
+
continuation_token: continuation_token
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
resp.common_prefixes&.each do |cp|
|
|
45
|
+
next unless cp.prefix.start_with?(prefix)
|
|
46
|
+
|
|
47
|
+
relativepath = cp.prefix.delete_prefix(prefix)
|
|
48
|
+
|
|
49
|
+
objects.append(
|
|
50
|
+
{ filename: relativepath.chomp('/').split('/').last,
|
|
51
|
+
filename_relative_path: relativepath.to_s,
|
|
52
|
+
filename_realpath: "/#{bucket}/#{cp.prefix}",
|
|
53
|
+
last_modified: nil,
|
|
54
|
+
size: nil,
|
|
55
|
+
is_directory: true }
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
resp.contents.each do |object|
|
|
60
|
+
next if object.key == File.join(prefix, 'index.html')
|
|
61
|
+
|
|
62
|
+
relative_key = object.key.sub(prefix, '')
|
|
63
|
+
next if !recursive && relative_key.inlcude?('/') && !relative_key.empty?
|
|
64
|
+
|
|
65
|
+
objects.append(
|
|
66
|
+
{ filename: relative_key,
|
|
67
|
+
filename_relative_path: relative_key,
|
|
68
|
+
filename_realpath: "/#{bucket}/#{object.key}",
|
|
69
|
+
last_modified: object.last_modified,
|
|
70
|
+
size: object.size,
|
|
71
|
+
is_directory: false }
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
continuation_token = resp.next_continuation_token
|
|
76
|
+
break unless continuation_token
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
objects
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def index_directory(path, nested: false)
|
|
83
|
+
files = list_directory(path, recursive: nested)
|
|
84
|
+
index_content = index_template.generate(
|
|
85
|
+
path: path,
|
|
86
|
+
files: files
|
|
87
|
+
)
|
|
88
|
+
s3_client.put_object(bucket: bucket, key: "#{path}/index.html", body: index_content,
|
|
89
|
+
acl: 'public-read', content_type: 'text/html')
|
|
90
|
+
0
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def s3_client
|
|
94
|
+
@s3_client ||= Aws::S3::Client.new(
|
|
95
|
+
access_key_id: access_key,
|
|
96
|
+
secret_access_key: secret_key,
|
|
97
|
+
endpoint: endpoint_url,
|
|
98
|
+
region: region,
|
|
99
|
+
force_path_style: true,
|
|
100
|
+
ssl_verify_peer: false
|
|
101
|
+
)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
# rubocop:enable Metrics/ParameterLists, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity, Metrics/BlockLength
|
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 = '> 2
|
|
18
|
+
spec.required_ruby_version = '> 3.2'
|
|
19
19
|
|
|
20
20
|
if spec.respond_to?(:metadata)
|
|
21
21
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
|
@@ -42,16 +42,24 @@ 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 'aws-sdk-s3', '~> 1.205'
|
|
48
|
+
spec.add_dependency 'erb', '~> 6.0'
|
|
49
|
+
spec.add_dependency 'ostruct', '~> 0.6', '>= 0.6.1'
|
|
50
|
+
spec.add_dependency 'pdf-reader', '~> 2.14', '>= 2.14.1'
|
|
46
51
|
spec.add_dependency 'webrick', '~> 1.9', '>= 1.9.1'
|
|
47
52
|
|
|
48
|
-
spec.add_development_dependency 'bump', '~> 0.10
|
|
49
|
-
spec.add_development_dependency 'bundler', '~> 2.
|
|
50
|
-
spec.add_development_dependency 'byebug', '~>
|
|
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.
|
|
53
|
+
spec.add_development_dependency 'bump', '~> 0.10'
|
|
54
|
+
spec.add_development_dependency 'bundler', '~> 2.7', '>= 2.7.2'
|
|
55
|
+
spec.add_development_dependency 'byebug', '~> 12.0'
|
|
56
|
+
spec.add_development_dependency 'rake', '~> 13.3', '>= 13.3.1'
|
|
57
|
+
spec.add_development_dependency 'reek', '~> 6.5'
|
|
58
|
+
spec.add_development_dependency 'rspec', '~> 3.13', '>= 3.13.2'
|
|
59
|
+
spec.add_development_dependency 'rubocop', '~> 1.81', '>= 1.81.7'
|
|
60
|
+
spec.add_development_dependency 'rubocop-rake', '~> 0.7', '>= 0.7.1'
|
|
61
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 3.8'
|
|
62
|
+
spec.add_development_dependency 'ruby-lsp', '~> 0.26', '>= 0.26.4'
|
|
63
|
+
spec.add_development_dependency 'ruby-lsp-reek', '~> 0.3', '>= 0.3.1'
|
|
64
|
+
spec.add_development_dependency 'ruby-lsp-rspec', '~> 0.1', '>= 0.1.28'
|
|
57
65
|
end
|
metadata
CHANGED
|
@@ -1,19 +1,70 @@
|
|
|
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.8.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
|
|
32
|
+
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: aws-sdk-s3
|
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
|
35
|
+
requirements:
|
|
36
|
+
- - "~>"
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '1.205'
|
|
39
|
+
type: :runtime
|
|
40
|
+
prerelease: false
|
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - "~>"
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '1.205'
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: erb
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
requirements:
|
|
50
|
+
- - "~>"
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '6.0'
|
|
53
|
+
type: :runtime
|
|
54
|
+
prerelease: false
|
|
55
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
56
|
+
requirements:
|
|
57
|
+
- - "~>"
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: '6.0'
|
|
12
60
|
- !ruby/object:Gem::Dependency
|
|
13
61
|
name: ostruct
|
|
14
62
|
requirement: !ruby/object:Gem::Requirement
|
|
15
63
|
requirements:
|
|
16
64
|
- - "~>"
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: '0.6'
|
|
67
|
+
- - ">="
|
|
17
68
|
- !ruby/object:Gem::Version
|
|
18
69
|
version: 0.6.1
|
|
19
70
|
type: :runtime
|
|
@@ -21,8 +72,31 @@ dependencies:
|
|
|
21
72
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
73
|
requirements:
|
|
23
74
|
- - "~>"
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0.6'
|
|
77
|
+
- - ">="
|
|
24
78
|
- !ruby/object:Gem::Version
|
|
25
79
|
version: 0.6.1
|
|
80
|
+
- !ruby/object:Gem::Dependency
|
|
81
|
+
name: pdf-reader
|
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
|
83
|
+
requirements:
|
|
84
|
+
- - "~>"
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '2.14'
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: 2.14.1
|
|
90
|
+
type: :runtime
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '2.14'
|
|
97
|
+
- - ">="
|
|
98
|
+
- !ruby/object:Gem::Version
|
|
99
|
+
version: 2.14.1
|
|
26
100
|
- !ruby/object:Gem::Dependency
|
|
27
101
|
name: webrick
|
|
28
102
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -49,88 +123,82 @@ dependencies:
|
|
|
49
123
|
requirements:
|
|
50
124
|
- - "~>"
|
|
51
125
|
- !ruby/object:Gem::Version
|
|
52
|
-
version: 0.10
|
|
126
|
+
version: '0.10'
|
|
53
127
|
type: :development
|
|
54
128
|
prerelease: false
|
|
55
129
|
version_requirements: !ruby/object:Gem::Requirement
|
|
56
130
|
requirements:
|
|
57
131
|
- - "~>"
|
|
58
132
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: 0.10
|
|
133
|
+
version: '0.10'
|
|
60
134
|
- !ruby/object:Gem::Dependency
|
|
61
135
|
name: bundler
|
|
62
136
|
requirement: !ruby/object:Gem::Requirement
|
|
63
137
|
requirements:
|
|
64
138
|
- - "~>"
|
|
65
139
|
- !ruby/object:Gem::Version
|
|
66
|
-
version: '2.
|
|
140
|
+
version: '2.7'
|
|
67
141
|
- - ">="
|
|
68
142
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: 2.
|
|
143
|
+
version: 2.7.2
|
|
70
144
|
type: :development
|
|
71
145
|
prerelease: false
|
|
72
146
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
147
|
requirements:
|
|
74
148
|
- - "~>"
|
|
75
149
|
- !ruby/object:Gem::Version
|
|
76
|
-
version: '2.
|
|
150
|
+
version: '2.7'
|
|
77
151
|
- - ">="
|
|
78
152
|
- !ruby/object:Gem::Version
|
|
79
|
-
version: 2.
|
|
153
|
+
version: 2.7.2
|
|
80
154
|
- !ruby/object:Gem::Dependency
|
|
81
155
|
name: byebug
|
|
82
156
|
requirement: !ruby/object:Gem::Requirement
|
|
83
157
|
requirements:
|
|
84
158
|
- - "~>"
|
|
85
159
|
- !ruby/object:Gem::Version
|
|
86
|
-
version: '
|
|
87
|
-
- - ">="
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: 11.1.3
|
|
160
|
+
version: '12.0'
|
|
90
161
|
type: :development
|
|
91
162
|
prerelease: false
|
|
92
163
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
164
|
requirements:
|
|
94
165
|
- - "~>"
|
|
95
166
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
97
|
-
- - ">="
|
|
98
|
-
- !ruby/object:Gem::Version
|
|
99
|
-
version: 11.1.3
|
|
167
|
+
version: '12.0'
|
|
100
168
|
- !ruby/object:Gem::Dependency
|
|
101
169
|
name: rake
|
|
102
170
|
requirement: !ruby/object:Gem::Requirement
|
|
103
171
|
requirements:
|
|
104
172
|
- - "~>"
|
|
105
173
|
- !ruby/object:Gem::Version
|
|
106
|
-
version: '13.
|
|
174
|
+
version: '13.3'
|
|
107
175
|
- - ">="
|
|
108
176
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: 13.
|
|
177
|
+
version: 13.3.1
|
|
110
178
|
type: :development
|
|
111
179
|
prerelease: false
|
|
112
180
|
version_requirements: !ruby/object:Gem::Requirement
|
|
113
181
|
requirements:
|
|
114
182
|
- - "~>"
|
|
115
183
|
- !ruby/object:Gem::Version
|
|
116
|
-
version: '13.
|
|
184
|
+
version: '13.3'
|
|
117
185
|
- - ">="
|
|
118
186
|
- !ruby/object:Gem::Version
|
|
119
|
-
version: 13.
|
|
187
|
+
version: 13.3.1
|
|
120
188
|
- !ruby/object:Gem::Dependency
|
|
121
189
|
name: reek
|
|
122
190
|
requirement: !ruby/object:Gem::Requirement
|
|
123
191
|
requirements:
|
|
124
192
|
- - "~>"
|
|
125
193
|
- !ruby/object:Gem::Version
|
|
126
|
-
version: '6.
|
|
194
|
+
version: '6.5'
|
|
127
195
|
type: :development
|
|
128
196
|
prerelease: false
|
|
129
197
|
version_requirements: !ruby/object:Gem::Requirement
|
|
130
198
|
requirements:
|
|
131
199
|
- - "~>"
|
|
132
200
|
- !ruby/object:Gem::Version
|
|
133
|
-
version: '6.
|
|
201
|
+
version: '6.5'
|
|
134
202
|
- !ruby/object:Gem::Dependency
|
|
135
203
|
name: rspec
|
|
136
204
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -138,6 +206,9 @@ dependencies:
|
|
|
138
206
|
- - "~>"
|
|
139
207
|
- !ruby/object:Gem::Version
|
|
140
208
|
version: '3.13'
|
|
209
|
+
- - ">="
|
|
210
|
+
- !ruby/object:Gem::Version
|
|
211
|
+
version: 3.13.2
|
|
141
212
|
type: :development
|
|
142
213
|
prerelease: false
|
|
143
214
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -145,31 +216,37 @@ dependencies:
|
|
|
145
216
|
- - "~>"
|
|
146
217
|
- !ruby/object:Gem::Version
|
|
147
218
|
version: '3.13'
|
|
219
|
+
- - ">="
|
|
220
|
+
- !ruby/object:Gem::Version
|
|
221
|
+
version: 3.13.2
|
|
148
222
|
- !ruby/object:Gem::Dependency
|
|
149
223
|
name: rubocop
|
|
150
224
|
requirement: !ruby/object:Gem::Requirement
|
|
151
225
|
requirements:
|
|
152
226
|
- - "~>"
|
|
153
227
|
- !ruby/object:Gem::Version
|
|
154
|
-
version: '1.
|
|
228
|
+
version: '1.81'
|
|
155
229
|
- - ">="
|
|
156
230
|
- !ruby/object:Gem::Version
|
|
157
|
-
version: 1.
|
|
231
|
+
version: 1.81.7
|
|
158
232
|
type: :development
|
|
159
233
|
prerelease: false
|
|
160
234
|
version_requirements: !ruby/object:Gem::Requirement
|
|
161
235
|
requirements:
|
|
162
236
|
- - "~>"
|
|
163
237
|
- !ruby/object:Gem::Version
|
|
164
|
-
version: '1.
|
|
238
|
+
version: '1.81'
|
|
165
239
|
- - ">="
|
|
166
240
|
- !ruby/object:Gem::Version
|
|
167
|
-
version: 1.
|
|
241
|
+
version: 1.81.7
|
|
168
242
|
- !ruby/object:Gem::Dependency
|
|
169
243
|
name: rubocop-rake
|
|
170
244
|
requirement: !ruby/object:Gem::Requirement
|
|
171
245
|
requirements:
|
|
172
246
|
- - "~>"
|
|
247
|
+
- !ruby/object:Gem::Version
|
|
248
|
+
version: '0.7'
|
|
249
|
+
- - ">="
|
|
173
250
|
- !ruby/object:Gem::Version
|
|
174
251
|
version: 0.7.1
|
|
175
252
|
type: :development
|
|
@@ -177,6 +254,9 @@ dependencies:
|
|
|
177
254
|
version_requirements: !ruby/object:Gem::Requirement
|
|
178
255
|
requirements:
|
|
179
256
|
- - "~>"
|
|
257
|
+
- !ruby/object:Gem::Version
|
|
258
|
+
version: '0.7'
|
|
259
|
+
- - ">="
|
|
180
260
|
- !ruby/object:Gem::Version
|
|
181
261
|
version: 0.7.1
|
|
182
262
|
- !ruby/object:Gem::Dependency
|
|
@@ -185,14 +265,74 @@ dependencies:
|
|
|
185
265
|
requirements:
|
|
186
266
|
- - "~>"
|
|
187
267
|
- !ruby/object:Gem::Version
|
|
188
|
-
version: '3.
|
|
268
|
+
version: '3.8'
|
|
269
|
+
type: :development
|
|
270
|
+
prerelease: false
|
|
271
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
272
|
+
requirements:
|
|
273
|
+
- - "~>"
|
|
274
|
+
- !ruby/object:Gem::Version
|
|
275
|
+
version: '3.8'
|
|
276
|
+
- !ruby/object:Gem::Dependency
|
|
277
|
+
name: ruby-lsp
|
|
278
|
+
requirement: !ruby/object:Gem::Requirement
|
|
279
|
+
requirements:
|
|
280
|
+
- - "~>"
|
|
281
|
+
- !ruby/object:Gem::Version
|
|
282
|
+
version: '0.26'
|
|
283
|
+
- - ">="
|
|
284
|
+
- !ruby/object:Gem::Version
|
|
285
|
+
version: 0.26.4
|
|
286
|
+
type: :development
|
|
287
|
+
prerelease: false
|
|
288
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
289
|
+
requirements:
|
|
290
|
+
- - "~>"
|
|
291
|
+
- !ruby/object:Gem::Version
|
|
292
|
+
version: '0.26'
|
|
293
|
+
- - ">="
|
|
294
|
+
- !ruby/object:Gem::Version
|
|
295
|
+
version: 0.26.4
|
|
296
|
+
- !ruby/object:Gem::Dependency
|
|
297
|
+
name: ruby-lsp-reek
|
|
298
|
+
requirement: !ruby/object:Gem::Requirement
|
|
299
|
+
requirements:
|
|
300
|
+
- - "~>"
|
|
301
|
+
- !ruby/object:Gem::Version
|
|
302
|
+
version: '0.3'
|
|
303
|
+
- - ">="
|
|
304
|
+
- !ruby/object:Gem::Version
|
|
305
|
+
version: 0.3.1
|
|
306
|
+
type: :development
|
|
307
|
+
prerelease: false
|
|
308
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
309
|
+
requirements:
|
|
310
|
+
- - "~>"
|
|
311
|
+
- !ruby/object:Gem::Version
|
|
312
|
+
version: '0.3'
|
|
313
|
+
- - ">="
|
|
314
|
+
- !ruby/object:Gem::Version
|
|
315
|
+
version: 0.3.1
|
|
316
|
+
- !ruby/object:Gem::Dependency
|
|
317
|
+
name: ruby-lsp-rspec
|
|
318
|
+
requirement: !ruby/object:Gem::Requirement
|
|
319
|
+
requirements:
|
|
320
|
+
- - "~>"
|
|
321
|
+
- !ruby/object:Gem::Version
|
|
322
|
+
version: '0.1'
|
|
323
|
+
- - ">="
|
|
324
|
+
- !ruby/object:Gem::Version
|
|
325
|
+
version: 0.1.28
|
|
189
326
|
type: :development
|
|
190
327
|
prerelease: false
|
|
191
328
|
version_requirements: !ruby/object:Gem::Requirement
|
|
192
329
|
requirements:
|
|
193
330
|
- - "~>"
|
|
194
331
|
- !ruby/object:Gem::Version
|
|
195
|
-
version: '
|
|
332
|
+
version: '0.1'
|
|
333
|
+
- - ">="
|
|
334
|
+
- !ruby/object:Gem::Version
|
|
335
|
+
version: 0.1.28
|
|
196
336
|
description: Set of small and standalone utilities in Ruby.
|
|
197
337
|
email:
|
|
198
338
|
- thomas.tych@gmail.com
|
|
@@ -204,6 +344,8 @@ executables:
|
|
|
204
344
|
- jb
|
|
205
345
|
- json2yaml
|
|
206
346
|
- proxy
|
|
347
|
+
- quickpdf
|
|
348
|
+
- s3_web_indexer
|
|
207
349
|
- yaml2json
|
|
208
350
|
- yb
|
|
209
351
|
extensions: []
|
|
@@ -226,6 +368,8 @@ files:
|
|
|
226
368
|
- bin/jb
|
|
227
369
|
- bin/json2yaml
|
|
228
370
|
- bin/proxy
|
|
371
|
+
- bin/quickpdf
|
|
372
|
+
- bin/s3_web_indexer
|
|
229
373
|
- bin/yaml2json
|
|
230
374
|
- bin/yb
|
|
231
375
|
- lib/quick_and_ruby.rb
|
|
@@ -239,9 +383,14 @@ files:
|
|
|
239
383
|
- lib/quick_and_ruby/distinguished_name/attribute.rb
|
|
240
384
|
- lib/quick_and_ruby/distinguished_name/openssl_format.rb
|
|
241
385
|
- lib/quick_and_ruby/distinguished_name/rfc_format.rb
|
|
386
|
+
- lib/quick_and_ruby/pdf.rb
|
|
387
|
+
- lib/quick_and_ruby/pdf/document.rb
|
|
242
388
|
- lib/quick_and_ruby/proxy/arg_parser.rb
|
|
243
389
|
- lib/quick_and_ruby/proxy/env_parser.rb
|
|
244
390
|
- lib/quick_and_ruby/proxy/proxy.rb
|
|
391
|
+
- lib/quick_and_ruby/s3.rb
|
|
392
|
+
- lib/quick_and_ruby/s3/web_index_renderer.rb
|
|
393
|
+
- lib/quick_and_ruby/s3/web_indexer.rb
|
|
245
394
|
- lib/quick_and_ruby/string.rb
|
|
246
395
|
- lib/quick_and_ruby/string/case.rb
|
|
247
396
|
- lib/quick_and_ruby/time.rb
|
|
@@ -268,14 +417,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
268
417
|
requirements:
|
|
269
418
|
- - ">"
|
|
270
419
|
- !ruby/object:Gem::Version
|
|
271
|
-
version: '2
|
|
420
|
+
version: '3.2'
|
|
272
421
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
273
422
|
requirements:
|
|
274
423
|
- - ">="
|
|
275
424
|
- !ruby/object:Gem::Version
|
|
276
425
|
version: '0'
|
|
277
426
|
requirements: []
|
|
278
|
-
rubygems_version: 3.
|
|
427
|
+
rubygems_version: 3.7.2
|
|
279
428
|
specification_version: 4
|
|
280
429
|
summary: Quick and Ruby utilities.
|
|
281
430
|
test_files: []
|