quick_and_ruby 0.4.0 → 0.6.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: 6c0817c5dc3e4a34622553992b9ff3158e437d9df32915d2cf4307fceb841229
4
- data.tar.gz: 7c7bc9b6cda4974e464f8232616da0f58064b53ce494436ce3242991ec03ae54
3
+ metadata.gz: f694bf17e5634da7e5f13228b072538f39f2ea252ec354579a075367199afc01
4
+ data.tar.gz: ab9726131a26e889a39a7130bb96b52846a84b8213e2a979ce04dd566e1754a1
5
5
  SHA512:
6
- metadata.gz: 9c4fe131c66dcbc054838b5b7f84f983656d188158f7b2552a0d6791f28851d91e400ef7fab68425cec1a64030f35ca025c95df555c12860ab6e1a449bb3ddb9
7
- data.tar.gz: 12c49deb386a0241060d6e01e5f5d4df0317c1d0c3eae65f9f56065c41d9939cbd1273c962de7ab7c424cb82053f719c47f16ccc333463d366d8237a1b1c9374
6
+ metadata.gz: 4df216e8b4b49e9e23c2362ac1ece88e0ef4485715af358000e1d72f29dcbeeea3f3e0439f233264fbb46921642277139cdd816fbe116924395a27e70e8549aa
7
+ data.tar.gz: 5a2e34b0b1b9f95aa40f558cd4bd3c2ab2ed457372a60b5e17a952f1e23963409241c40429f6b44b1928cc4927bb4ac15392774b67ff19f8958a9c0907227956
data/.rubocop.yml CHANGED
@@ -1,4 +1,4 @@
1
- require:
1
+ plugins:
2
2
  - rubocop-rake
3
3
  - rubocop-rspec
4
4
 
@@ -6,6 +6,9 @@ AllCops:
6
6
  NewCops: enable
7
7
  TargetRubyVersion: 2.7
8
8
 
9
+ Gemspec/DevelopmentDependencies:
10
+ Enabled: false
11
+
9
12
  Layout/LineLength:
10
13
  Max: 100
11
14
 
@@ -14,21 +17,29 @@ Metrics/BlockLength:
14
17
  - quick_and_ruby.gemspec
15
18
  - spec/**/*.rb
16
19
 
20
+ Metrics/ClassLength:
21
+ Exclude:
22
+ - test/**/*.rb
23
+
24
+ Metrics/CyclomaticComplexity:
25
+ Max: 10
26
+
17
27
  Metrics/MethodLength:
18
28
  Max: 25
19
29
 
30
+ Style/Documentation:
31
+ Enabled: false
32
+
20
33
  # Style/StringLiterals:
21
34
  # Enabled: true
22
35
  # EnforcedStyle: double_quotes
23
36
 
24
- Style/Documentation:
25
- Enabled: false
26
-
27
- Style/StringLiteralsInInterpolation:
28
- Enabled: true
29
- EnforcedStyle: double_quotes
37
+ # Style/StringLiteralsInInterpolation:
38
+ # Enabled: true
39
+ # EnforcedStyle: double_quotes
30
40
 
31
- # RSpec
41
+ RSpec/ExampleLength:
42
+ Max: 10
32
43
 
33
44
  RSpec/MultipleExpectations:
34
45
  Max: 2
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in quick_and_ruby.gemspec
data/bin/datetime CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require "quick_and_ruby/date"
4
+ require 'quick_and_ruby/date'
5
5
 
6
6
  QuickAndRuby::Date::DateTimeCli.new(ARGV).run
@@ -20,15 +20,15 @@ end
20
20
 
21
21
  option_parser.parse!(argv)
22
22
  if argv.empty?
23
- STDERR.puts 'error: you must supply a distinguished_name'
24
- STDERR.puts
25
- STDERR.puts option_parser.help
23
+ warn 'error: you must supply a distinguished_name'
24
+ $stderr.puts
25
+ warn option_parser.help
26
26
  exit 2
27
27
  else
28
- distinguished_name = argv.clone.join(" ")
28
+ distinguished_name = argv.clone.join(' ')
29
29
  end
30
30
 
31
- dn = QuickAndRuby::DistinguishedName.from_string(distinguished_name)
31
+ dn = QuickAndRuby::DistinguishedName.from_s(distinguished_name)
32
32
  dn = dn.reverse if options[:reverse]
33
33
 
34
34
  puts dn.to_s
data/bin/epoch ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'quick_and_ruby/time'
5
+
6
+ QuickAndRuby::Time::EpochCli.new.run
data/bin/json2yaml CHANGED
@@ -10,7 +10,7 @@ end
10
10
 
11
11
  from = ARGV[0]
12
12
  if from && File.exist?(from)
13
- to = ARGV[1] || "#{from.chomp(".json")}.yaml"
13
+ to = ARGV[1] || "#{from.chomp('.json')}.yaml"
14
14
 
15
15
  File.write(to, json2yaml(File.read(from)))
16
16
  elsif from
data/bin/proxy CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
2
4
  # -*- mode: Ruby -*-
3
5
 
4
6
  require 'quick_and_ruby'
data/bin/yaml2json CHANGED
@@ -5,12 +5,12 @@ require 'json'
5
5
  require 'yaml'
6
6
 
7
7
  def yaml2json(str)
8
- JSON.pretty_generate(YAML.safe_load(str))
8
+ JSON.pretty_generate(YAML.safe_load(str, aliases: true))
9
9
  end
10
10
 
11
11
  from = ARGV[0]
12
12
  if from && File.exist?(from)
13
- to = ARGV[1] || "#{from.chomp(".yaml").chomp(".yml")}.json"
13
+ to = ARGV[1] || "#{from.chomp('.yaml').chomp('.yml')}.json"
14
14
 
15
15
  File.write(to, yaml2json(File.read(from)))
16
16
  elsif from
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module QuickAndRuby
4
+ class DistinguishedName
5
+ class Attribute
6
+ # DC domainComponent
7
+ # CN commonName
8
+ # OU organizationalUnitName
9
+ # O organizationName
10
+ # STREET streetAddress
11
+ # L localityName
12
+ # ST stateOrProvinceName
13
+ # C countryName
14
+ # UID userid
15
+
16
+ SPLIT_RE = /^(\w+)=((?:\\.|[^\\])+)$/.freeze
17
+
18
+ attr_reader :name, :value
19
+
20
+ def initialize(name, value)
21
+ @name = name
22
+ @value = value
23
+ end
24
+
25
+ def to_s(escaper: nil)
26
+ escaped_value = value
27
+ escaped_value = escaper.call(escaped_value) if escaper
28
+
29
+ "#{name}=#{escaped_value}"
30
+ end
31
+
32
+ def self.from_s(part, unescaper: nil)
33
+ unless (match = SPLIT_RE.match(part))
34
+ raise "Invalid DN part: '#{part}'"
35
+ end
36
+
37
+ key = match[1].strip
38
+ value = match[2].strip
39
+ unescaped_value = value
40
+ unescaped_value = unescaper.call(unescaped_value) if unescaper
41
+ new(key, unescaped_value)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'attribute'
4
+
5
+ module QuickAndRuby
6
+ class DistinguishedName
7
+ class OpensslFormat
8
+ LABEL = :openssl
9
+ SEPARATOR = '/'
10
+ SPLIT_RE = %r{(?<!\\)/}.freeze
11
+
12
+ def escape(value)
13
+ value.gsub(%r{([/\\])}, '\\\\\1')
14
+ end
15
+
16
+ def unescape(value)
17
+ value.gsub(%r{\\([/\\])}, '\1')
18
+ end
19
+
20
+ def recognize?(dn_str)
21
+ return true if !dn_str || dn_str.empty?
22
+ return true if dn_str.start_with?(SEPARATOR)
23
+
24
+ false
25
+ end
26
+
27
+ def split(dn_str)
28
+ dn_str = dn_str[1..] if dn_str.start_with?(SEPARATOR)
29
+
30
+ parts = dn_str.split(SPLIT_RE)
31
+ parts.map do |part|
32
+ part = part.strip if part
33
+ next if !part || part.empty?
34
+
35
+ Attribute.from_s(part, unescaper: method(:unescape))
36
+ end.compact
37
+ end
38
+
39
+ def join(attributes)
40
+ SEPARATOR + attributes.map do |attribute|
41
+ attribute.to_s(escaper: method(:escape))
42
+ end.join(SEPARATOR)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'attribute'
4
+
5
+ module QuickAndRuby
6
+ class DistinguishedName
7
+ class RfcFormat
8
+ LABEL = :rfc
9
+ SEPARATOR = ','
10
+ SPLIT_RE = /(?<!\\),/.freeze
11
+
12
+ UNESCAPE_ALL_RE = /\\(.)/.freeze
13
+
14
+ def escape(value)
15
+ # value.gsub(/([,\\+<>;"= ])/, '\\\1')
16
+ value.gsub(/([,\\+<>;"=])/, '\\\\\1')
17
+ end
18
+
19
+ def unescape(value)
20
+ # .gsub(UNESCAPE_ALL_RE, '\1')
21
+ value.gsub(/\\([,\\+<>;"= ])/, '\1')
22
+ end
23
+
24
+ def recognize?(dn_str)
25
+ return true if !dn_str || dn_str.empty?
26
+
27
+ true
28
+ end
29
+
30
+ def split(dn_str)
31
+ parts = dn_str.split(SPLIT_RE)
32
+ parts.map do |part|
33
+ part = part.strip if part
34
+ next if !part || part.empty?
35
+
36
+ Attribute.from_s(part, unescaper: method(:unescape))
37
+ end.compact
38
+ end
39
+
40
+ def join(attributes)
41
+ attributes.map do |attribute|
42
+ attribute.to_s(escaper: method(:escape))
43
+ end.join(SEPARATOR)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,5 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'distinguished_name/attribute'
4
+ require_relative 'distinguished_name/rfc_format'
5
+ require_relative 'distinguished_name/openssl_format'
6
+
3
7
  module QuickAndRuby
4
8
  class DistinguishedName
5
9
  attr_reader :attributes
@@ -8,51 +12,54 @@ module QuickAndRuby
8
12
  @attributes = attributes
9
13
  end
10
14
 
11
- def to_s
12
- attributes.map(&:to_s).join(',')
15
+ def to_s(format: :rfc)
16
+ formatter = get_format(format)
17
+ formatter.join(attributes)
18
+ end
19
+
20
+ def reverse
21
+ self.class.new(attributes.reverse)
13
22
  end
14
23
 
15
24
  def size
16
- @attributes.size
25
+ attributes.size
17
26
  end
18
27
  alias length size
19
28
 
20
- def reverse
21
- self.class.new(attributes.reverse)
29
+ def get_format(label = :rfc)
30
+ self.class.get_format(label)
22
31
  end
23
32
 
24
- def self.from_string(dn_str)
25
- attributes = dn_str.split(/(?<!\\),/).map do |dn_component|
26
- unless (match = /^([^=]+)=(.*)$/.match(dn_component.strip))
27
- raise "#{dn_component} is not a valid DistinguishedName component"
28
- end
33
+ class << self
34
+ def from_s(dn_str, format: nil)
35
+ return new if !dn_str || dn_str.empty?
36
+
37
+ formatter ||= get_format(format) if format
38
+ formatter ||= openssl_format if openssl_format.recognize?(dn_str)
39
+ formatter ||= rfc_format
40
+
41
+ attributes = formatter.split(dn_str)
29
42
 
30
- Attribute.new(*match.captures)
43
+ new(attributes)
31
44
  end
32
45
 
33
- new(attributes)
34
- end
46
+ def rfc_format
47
+ get_format(:rfc)
48
+ end
35
49
 
36
- class Attribute
37
- # DC domainComponent
38
- # CN commonName
39
- # OU organizationalUnitName
40
- # O organizationName
41
- # STREET streetAddress
42
- # L localityName
43
- # ST stateOrProvinceName
44
- # C countryName
45
- # UID userid
46
-
47
- attr_reader :attribute, :value
48
-
49
- def initialize(attribute, value)
50
- @attribute = attribute
51
- @value = value
50
+ def openssl_format
51
+ get_format(:openssl)
52
52
  end
53
53
 
54
- def to_s
55
- "#{attribute}=#{value}"
54
+ def get_format(label = :rfc)
55
+ case label.to_sym
56
+ when :rfc
57
+ RfcFormat.new
58
+ when :openssl
59
+ OpensslFormat.new
60
+ else
61
+ raise ArgumentError, "Unsupported format #{label}"
62
+ end
56
63
  end
57
64
  end
58
65
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module QuickAndRuby
4
+ module String
5
+ module Case
6
+ def snakecase
7
+ gsub(/\s+/, '_').gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
8
+ end
9
+
10
+ # def snakecase2
11
+ # return downcase if match(/\A[A-Z]+\z/)
12
+ # gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
13
+ # gsub(/([a-z])([A-Z])/, '\1_\2').
14
+ # downcase
15
+ # end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'string/case'
4
+
5
+ String.include QuickAndRuby::String::Case
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'optparse'
4
+
5
+ # Usage example:
6
+ #
7
+ # epoch
8
+ # => 1740485717
9
+ # epoch -ms
10
+ # => 1740485775670
11
+ # epoch 1740485717
12
+ # => 2025-02-25T13:17:14.508+01:00
13
+ # epoch -u 1740485717
14
+ # => 2025-02-25T12:18:21.954Z
15
+ # epoch [-d|--diff] 1740485717
16
+ # => 30sec ago
17
+ # epoch [-v|--verbose] 1740485717
18
+ # => 2025-02-25T12:18:21.954Z
19
+ # => 30sec ago
20
+
21
+ module QuickAndRuby
22
+ module Time
23
+ class EpochCli
24
+ attr_reader :argv, :env
25
+
26
+ def initialize(argv: ARGV, env: ENV)
27
+ @argv = argv.clone
28
+ @env = env.to_h.clone
29
+ end
30
+
31
+ def run
32
+ options = parse_options
33
+ puts EpochConverter.new(**options.to_h).convert_all(*argv)
34
+ end
35
+
36
+ def parse_options(options: Options.new)
37
+ parser = OptionParser.new do |opts|
38
+ opts.banner = 'Usage: epoch [options]'
39
+
40
+ opts.on('-h', '--help', 'Prints this help') do
41
+ puts parser
42
+ exit
43
+ end
44
+
45
+ opts.on('-m', '--millis', 'Display epoch in milliseconds') do |_millis|
46
+ options.millis = true
47
+ end
48
+
49
+ opts.on('-u', '--utc', 'Display time in UTC') do
50
+ options.utc = true
51
+ end
52
+ end
53
+
54
+ parser.parse!(argv)
55
+ options
56
+ end
57
+
58
+ class Options
59
+ DEFAULT_MILLIS = false
60
+ DEFAULT_UTC = false
61
+
62
+ attr_accessor :millis, :utc
63
+
64
+ def initialize(millis: DEFAULT_MILLIS, utc: DEFAULT_UTC)
65
+ @millis = millis
66
+ @utc = utc
67
+ end
68
+
69
+ def to_h
70
+ { millis: millis,
71
+ utc: utc }
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'time'
4
+
5
+ module QuickAndRuby
6
+ module Time
7
+ class EpochConverter
8
+ attr_reader :millis, :utc
9
+
10
+ def initialize(millis:, utc:)
11
+ @millis = millis
12
+ @utc = utc
13
+ end
14
+
15
+ def convert_all(*values)
16
+ values.map { |value_str| convert(value_str) }
17
+ end
18
+
19
+ def convert(value_str)
20
+ if value_str.match(/\D/)
21
+ convert_time(value_str)
22
+ else
23
+ convert_epoch(value_str)
24
+ end
25
+ end
26
+
27
+ def convert_time(time_str)
28
+ time = ::Time.parse(time_str)
29
+ epoch = time.to_f
30
+ epoch *= 1000 if millis
31
+ epoch.to_i
32
+ end
33
+
34
+ def convert_epoch(epoch_str)
35
+ epoch = epoch_str.to_i
36
+ epoch /= 1000.0 if epoch_str.size > 10
37
+ time = ::Time.at(epoch)
38
+ time = time.utc if utc
39
+ time.iso8601(3)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'version'
4
+ require_relative 'time/epoch_converter'
5
+ require_relative 'time/epoch_cli'
6
+
7
+ module QuickAndRuby
8
+ module Time
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module QuickAndRuby
2
- VERSION = '0.4.0'.freeze
2
+ VERSION = '0.6.0'.freeze
3
3
  end
@@ -42,13 +42,16 @@ 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'
46
+ spec.add_dependency 'webrick', '~> 1.9', '>= 1.9.1'
47
+
45
48
  spec.add_development_dependency 'bump', '~> 0.10.0'
46
- spec.add_development_dependency 'bundler', '~> 2.2', '>= 2.2.31'
49
+ spec.add_development_dependency 'bundler', '~> 2.6', '>= 2.6.5'
47
50
  spec.add_development_dependency 'byebug', '~> 11.1', '>= 11.1.3'
48
- spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
49
- spec.add_development_dependency 'reek', '~> 6.0', '>= 6.0.6'
50
- spec.add_development_dependency 'rspec', '~> 3.10'
51
- spec.add_development_dependency 'rubocop', '~> 1.22', '>= 1.22.3'
52
- spec.add_development_dependency 'rubocop-rake', '~> 0.6.0'
53
- spec.add_development_dependency 'rubocop-rspec', '~> 2.6'
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
57
  end
data/scripts/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'quick_and_ruby'
metadata CHANGED
@@ -1,15 +1,48 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quick_and_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ttych
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-01-19 00:00:00.000000000 Z
10
+ date: 2025-02-25 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: ostruct
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 0.6.1
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: 0.6.1
26
+ - !ruby/object:Gem::Dependency
27
+ name: webrick
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.9'
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 1.9.1
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.9'
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 1.9.1
13
46
  - !ruby/object:Gem::Dependency
14
47
  name: bump
15
48
  requirement: !ruby/object:Gem::Requirement
@@ -30,20 +63,20 @@ dependencies:
30
63
  requirements:
31
64
  - - "~>"
32
65
  - !ruby/object:Gem::Version
33
- version: '2.2'
66
+ version: '2.6'
34
67
  - - ">="
35
68
  - !ruby/object:Gem::Version
36
- version: 2.2.31
69
+ version: 2.6.5
37
70
  type: :development
38
71
  prerelease: false
39
72
  version_requirements: !ruby/object:Gem::Requirement
40
73
  requirements:
41
74
  - - "~>"
42
75
  - !ruby/object:Gem::Version
43
- version: '2.2'
76
+ version: '2.6'
44
77
  - - ">="
45
78
  - !ruby/object:Gem::Version
46
- version: 2.2.31
79
+ version: 2.6.5
47
80
  - !ruby/object:Gem::Dependency
48
81
  name: byebug
49
82
  requirement: !ruby/object:Gem::Requirement
@@ -70,102 +103,96 @@ dependencies:
70
103
  requirements:
71
104
  - - "~>"
72
105
  - !ruby/object:Gem::Version
73
- version: '13.0'
106
+ version: '13.2'
74
107
  - - ">="
75
108
  - !ruby/object:Gem::Version
76
- version: 13.0.6
109
+ version: 13.2.1
77
110
  type: :development
78
111
  prerelease: false
79
112
  version_requirements: !ruby/object:Gem::Requirement
80
113
  requirements:
81
114
  - - "~>"
82
115
  - !ruby/object:Gem::Version
83
- version: '13.0'
116
+ version: '13.2'
84
117
  - - ">="
85
118
  - !ruby/object:Gem::Version
86
- version: 13.0.6
119
+ version: 13.2.1
87
120
  - !ruby/object:Gem::Dependency
88
121
  name: reek
89
122
  requirement: !ruby/object:Gem::Requirement
90
123
  requirements:
91
124
  - - "~>"
92
125
  - !ruby/object:Gem::Version
93
- version: '6.0'
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: 6.0.6
126
+ version: '6.4'
97
127
  type: :development
98
128
  prerelease: false
99
129
  version_requirements: !ruby/object:Gem::Requirement
100
130
  requirements:
101
131
  - - "~>"
102
132
  - !ruby/object:Gem::Version
103
- version: '6.0'
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: 6.0.6
133
+ version: '6.4'
107
134
  - !ruby/object:Gem::Dependency
108
135
  name: rspec
109
136
  requirement: !ruby/object:Gem::Requirement
110
137
  requirements:
111
138
  - - "~>"
112
139
  - !ruby/object:Gem::Version
113
- version: '3.10'
140
+ version: '3.13'
114
141
  type: :development
115
142
  prerelease: false
116
143
  version_requirements: !ruby/object:Gem::Requirement
117
144
  requirements:
118
145
  - - "~>"
119
146
  - !ruby/object:Gem::Version
120
- version: '3.10'
147
+ version: '3.13'
121
148
  - !ruby/object:Gem::Dependency
122
149
  name: rubocop
123
150
  requirement: !ruby/object:Gem::Requirement
124
151
  requirements:
125
152
  - - "~>"
126
153
  - !ruby/object:Gem::Version
127
- version: '1.22'
154
+ version: '1.72'
128
155
  - - ">="
129
156
  - !ruby/object:Gem::Version
130
- version: 1.22.3
157
+ version: 1.72.2
131
158
  type: :development
132
159
  prerelease: false
133
160
  version_requirements: !ruby/object:Gem::Requirement
134
161
  requirements:
135
162
  - - "~>"
136
163
  - !ruby/object:Gem::Version
137
- version: '1.22'
164
+ version: '1.72'
138
165
  - - ">="
139
166
  - !ruby/object:Gem::Version
140
- version: 1.22.3
167
+ version: 1.72.2
141
168
  - !ruby/object:Gem::Dependency
142
169
  name: rubocop-rake
143
170
  requirement: !ruby/object:Gem::Requirement
144
171
  requirements:
145
172
  - - "~>"
146
173
  - !ruby/object:Gem::Version
147
- version: 0.6.0
174
+ version: 0.7.1
148
175
  type: :development
149
176
  prerelease: false
150
177
  version_requirements: !ruby/object:Gem::Requirement
151
178
  requirements:
152
179
  - - "~>"
153
180
  - !ruby/object:Gem::Version
154
- version: 0.6.0
181
+ version: 0.7.1
155
182
  - !ruby/object:Gem::Dependency
156
183
  name: rubocop-rspec
157
184
  requirement: !ruby/object:Gem::Requirement
158
185
  requirements:
159
186
  - - "~>"
160
187
  - !ruby/object:Gem::Version
161
- version: '2.6'
188
+ version: '3.5'
162
189
  type: :development
163
190
  prerelease: false
164
191
  version_requirements: !ruby/object:Gem::Requirement
165
192
  requirements:
166
193
  - - "~>"
167
194
  - !ruby/object:Gem::Version
168
- version: '2.6'
195
+ version: '3.5'
169
196
  description: Set of small and standalone utilities in Ruby.
170
197
  email:
171
198
  - thomas.tych@gmail.com
@@ -173,6 +200,7 @@ executables:
173
200
  - cat.rb
174
201
  - datetime
175
202
  - distinguished_name
203
+ - epoch
176
204
  - jb
177
205
  - json2yaml
178
206
  - proxy
@@ -194,6 +222,7 @@ files:
194
222
  - bin/cat.rb
195
223
  - bin/datetime
196
224
  - bin/distinguished_name
225
+ - bin/epoch
197
226
  - bin/jb
198
227
  - bin/json2yaml
199
228
  - bin/proxy
@@ -207,9 +236,17 @@ files:
207
236
  - lib/quick_and_ruby/date/date_time_args.rb
208
237
  - lib/quick_and_ruby/date/date_time_cli.rb
209
238
  - lib/quick_and_ruby/distinguished_name.rb
239
+ - lib/quick_and_ruby/distinguished_name/attribute.rb
240
+ - lib/quick_and_ruby/distinguished_name/openssl_format.rb
241
+ - lib/quick_and_ruby/distinguished_name/rfc_format.rb
210
242
  - lib/quick_and_ruby/proxy/arg_parser.rb
211
243
  - lib/quick_and_ruby/proxy/env_parser.rb
212
244
  - lib/quick_and_ruby/proxy/proxy.rb
245
+ - lib/quick_and_ruby/string.rb
246
+ - lib/quick_and_ruby/string/case.rb
247
+ - lib/quick_and_ruby/time.rb
248
+ - lib/quick_and_ruby/time/epoch_cli.rb
249
+ - lib/quick_and_ruby/time/epoch_converter.rb
213
250
  - lib/quick_and_ruby/version.rb
214
251
  - man/distinguished_name.1.ronn
215
252
  - quick_and_ruby.gemspec
@@ -224,7 +261,6 @@ metadata:
224
261
  source_code_uri: https://github.com/ttych/quick_and_ruby
225
262
  changelog_uri: https://github.com/ttych/quick_and_ruby/CHANGELOG.md
226
263
  rubygems_mfa_required: 'true'
227
- post_install_message:
228
264
  rdoc_options: []
229
265
  require_paths:
230
266
  - lib
@@ -239,8 +275,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
239
275
  - !ruby/object:Gem::Version
240
276
  version: '0'
241
277
  requirements: []
242
- rubygems_version: 3.1.6
243
- signing_key:
278
+ rubygems_version: 3.6.4
244
279
  specification_version: 4
245
280
  summary: Quick and Ruby utilities.
246
281
  test_files: []