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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f694bf17e5634da7e5f13228b072538f39f2ea252ec354579a075367199afc01
4
- data.tar.gz: ab9726131a26e889a39a7130bb96b52846a84b8213e2a979ce04dd566e1754a1
3
+ metadata.gz: 2be4d68167ffdc0814b0a5bb3dfada60271de21a922ef4c7b927907c7beda8db
4
+ data.tar.gz: ea517d525d665fe46fffcee29b5b77c19fdc30d97ab74b5a2518fb08fc430fa2
5
5
  SHA512:
6
- metadata.gz: 4df216e8b4b49e9e23c2362ac1ece88e0ef4485715af358000e1d72f29dcbeeea3f3e0439f233264fbb46921642277139cdd816fbe116924395a27e70e8549aa
7
- data.tar.gz: 5a2e34b0b1b9f95aa40f558cd4bd3c2ab2ed457372a60b5e17a952f1e23963409241c40429f6b44b1928cc4927bb4ac15392774b67ff19f8958a9c0907227956
6
+ metadata.gz: f050a85a80ce18c11257021c298c9b11af23694c06dd1ae27bd0018de33006665ac1637c9555054a275d5389afd54c04ff1195c419a77a2d28ae124409312360
7
+ data.tar.gz: d28612a9521ba0825001eb8b5065fd366839211b91b7b69eb505d5aed074100b270cabcea3d3f9f0445bccf151c7f53390e2175806d8aeec13a290261138ef2c
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.2
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,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,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'pdf/document'
4
+
5
+ module QuickAndRuby
6
+ module Pdf
7
+ end
8
+ 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
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aws-sdk-s3'
4
+
5
+ require_relative 's3/web_indexer'
6
+
7
+ module QuickAndRuby
8
+ module S3
9
+
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module QuickAndRuby
2
- VERSION = '0.6.0'.freeze
2
+ VERSION = '0.8.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.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 '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 '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.0'
49
- spec.add_development_dependency 'bundler', '~> 2.6', '>= 2.6.5'
50
- 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'
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.6.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: 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
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.0
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.0
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.6'
140
+ version: '2.7'
67
141
  - - ">="
68
142
  - !ruby/object:Gem::Version
69
- version: 2.6.5
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.6'
150
+ version: '2.7'
77
151
  - - ">="
78
152
  - !ruby/object:Gem::Version
79
- version: 2.6.5
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: '11.1'
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: '11.1'
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.2'
174
+ version: '13.3'
107
175
  - - ">="
108
176
  - !ruby/object:Gem::Version
109
- version: 13.2.1
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.2'
184
+ version: '13.3'
117
185
  - - ">="
118
186
  - !ruby/object:Gem::Version
119
- version: 13.2.1
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.4'
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.4'
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.72'
228
+ version: '1.81'
155
229
  - - ">="
156
230
  - !ruby/object:Gem::Version
157
- version: 1.72.2
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.72'
238
+ version: '1.81'
165
239
  - - ">="
166
240
  - !ruby/object:Gem::Version
167
- version: 1.72.2
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.5'
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: '3.5'
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.7'
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.6.4
427
+ rubygems_version: 3.7.2
279
428
  specification_version: 4
280
429
  summary: Quick and Ruby utilities.
281
430
  test_files: []