base32-url 0.5 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2636154ecf4c12b4aebc6f7d902512a068caa8d119a66222e4c6bc5f986b550a
4
- data.tar.gz: 1a6f5b368de218189acde3401611f116182e48318739c3b417cd3356cbc9ff09
3
+ metadata.gz: 74ebd73eb20ec6ef25ff4fe3edd29f2346dcea1e8d8620a8151d415948b95194
4
+ data.tar.gz: 131fe2a1c3d678041228e223f4698b50e2b7181ff4c7c15d2e249add8b69f7ae
5
5
  SHA512:
6
- metadata.gz: 017d4b5c6246fbd756c03a39cc6746ccafe5fde79d2620f62321dd2ebc24c9ce4121ca1aecb1f03c26834c636806e0eeec7081f1a9260df8e9bae51d6b8cebac
7
- data.tar.gz: fa73fb138288c1cec305373c74fa5e690129b52a066bf27e754f357912acf37b19767b588bac710dabfd151d6199d8869a2e8ffcf5d72da56c5a82e0c44bb032
6
+ metadata.gz: 9db5cdc495c36f92f8707e7b7391cfa2eb0acbe2e722cff72ee55f55bde91447d2e58d38a4dc43d6f255844f51dd912f8c640e1629d48e0de1f0d2fe6e659794
7
+ data.tar.gz: fec4321eb6603afea990c427e90bc421d381dda5188292c34e71049681cd4a9d47132e30530adb2c308038466faf1ff0b338301c1dc62c76164f30c8c49d0969
@@ -0,0 +1,38 @@
1
+ name: Build
2
+ on:
3
+ push:
4
+ branches:
5
+ - master
6
+ pull_request:
7
+ types: [opened, synchronize, reopened]
8
+ jobs:
9
+ sonarcloud:
10
+ name: SonarCloud
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v3
14
+ with:
15
+ fetch-depth: 0
16
+ - name: Set up Ruby 3.1
17
+ uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: 3.1
20
+ - name: Build and test
21
+ run: |
22
+ gem install bundler
23
+ bundle install
24
+ bundle exec rake test
25
+ - name: fix code coverage paths
26
+ working-directory: ./coverage
27
+ run: |
28
+ sed -i 's@'$GITHUB_WORKSPACE'@/github/workspace/@g' coverage.json
29
+ - name: Upload coverage report
30
+ uses: actions/upload-artifact@v3
31
+ with:
32
+ name: coverage-report
33
+ path: coverage/coverage.json
34
+ - name: SonarCloud Scan
35
+ uses: SonarSource/sonarcloud-github-action@master
36
+ env:
37
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
38
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  Gemfile.lock
2
2
  doc
3
3
  pkg
4
+ coverage
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
+ [![Build](https://github.com/front-matter/base32-url/actions/workflows/build.yml/badge.svg)](https://github.com/front-matter/base32-url/actions/workflows/build.yml)
2
+ [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=front-matter_base32-url&metric=coverage)](https://sonarcloud.io/summary/new_code?id=front-matter_base32-url)
3
+ [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=front-matter_base32-url&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=front-matter_base32-url)
1
4
  [![Gem Version](https://badge.fury.io/rb/base32-url.svg)](https://badge.fury.io/rb/base32-url)
2
- [![Build Status](https://travis-ci.org/datacite/base32-url.svg?branch=master)](https://travis-ci.org/datacite/base32-url)
3
5
 
4
6
  An implementation of Douglas Crockfords Base32-Encoding in Ruby, with two modifications to make
5
7
  the resulting strings more URL friendly:
@@ -18,6 +20,7 @@ $ gem install base32-url
18
20
  ## Changes
19
21
 
20
22
  ```
23
+ 0.6.0 - support Ruby versions beyond 2.x
21
24
  0.5.0 - use mod 97-10 (ISO 7064) to calculate checksum
22
25
  0.3.0 - encode into lower case characters, use * ~ _ ^ u for checksum
23
26
  0.2.0 - added optional checksum
data/Rakefile CHANGED
@@ -6,5 +6,4 @@ Bundler::GemHelper.install_tasks
6
6
  require 'rake/testtask'
7
7
  Rake::TestTask.new(:test)
8
8
 
9
- task :default => :test
10
-
9
+ task default: :test
data/base32-url.gemspec CHANGED
@@ -1,26 +1,30 @@
1
- require "date"
2
- require File.expand_path("../lib/base32/version", __FILE__)
1
+ require 'date'
2
+ require File.expand_path('lib/base32/version', __dir__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
- s.authors = "Martin Fenner"
6
- s.email = "mfenner@datacite.org"
7
- s.name = "base32-url"
8
- s.homepage = "https://github.com/datacite/base32-url"
9
- s.summary = "Ruby client library for conversion of DOI Metadata"
5
+ s.authors = 'Martin Fenner'
6
+ s.email = 'martin@front-matter.io'
7
+ s.name = 'base32-url'
8
+ s.homepage = 'https://github.com/front-matter/base32-url'
9
+ s.summary = '32-symbol notation for expressing numbers in a form that can be conveniently and accurately transmitted between humans'
10
10
  s.date = Date.today
11
- s.description = "32-symbol notation for expressing numbers in a form that can be conveniently and accurately transmitted between humans. URL-friendly version of the base32-crockford gem."
12
- s.require_paths = ["lib"]
11
+ s.description = '32-symbol notation for expressing numbers in a form that can be conveniently and accurately transmitted between humans. URL-friendly version of the base32-crockford gem.'
12
+ s.require_paths = ['lib']
13
13
  s.version = Base32::Url::VERSION
14
- s.extra_rdoc_files = ["README.md"]
15
- s.license = 'MIT'
16
- s.required_ruby_version = '~> 2.2'
14
+ s.extra_rdoc_files = ['README.md']
15
+ s.license = 'MIT'
16
+ s.required_ruby_version = '>= 2.6.0'
17
17
 
18
18
  # Declary dependencies here, rather than in the Gemfile
19
- s.add_development_dependency 'bundler', '~> 1.0'
20
- s.add_development_dependency 'rake'
21
- s.add_development_dependency 'test-unit', '~> 3.2.3'
19
+ s.add_dependency 'uuidtools', '~> 2.1', '>= 2.1.5'
20
+ s.add_development_dependency 'bundler', '>= 1.11', "< 3"
21
+ s.add_development_dependency 'rake', '>= 11.3', "< 14"
22
+ s.add_development_dependency 'rubocop', '~> 1.36'
23
+ s.add_development_dependency 'rubocop-rake', '~> 0.6.0'
24
+ s.add_development_dependency 'simplecov', '0.22.0'
25
+ s.add_development_dependency 'simplecov_json_formatter', '~> 0.1.4'
26
+ s.add_development_dependency 'test-unit', '~> 3.2', '>= 3.2.3'
22
27
 
23
- s.require_paths = ["lib"]
24
- s.files = `git ls-files`.split($/)
25
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
28
+ s.files = `git ls-files`.split($/)
29
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
26
30
  end
data/lib/base32/url.rb CHANGED
@@ -1,11 +1,10 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
+
2
3
  #
3
4
  # (c) 2008, Levin Alexander <http://levinalex.net>
4
5
  #
5
6
  # This file is released under the same license as ruby.
6
7
 
7
- require 'enumerator'
8
-
9
8
  module Base32
10
9
  end
11
10
 
@@ -36,14 +35,15 @@ end
36
35
  # hyphens to assure symbol string correctness.
37
36
  #
38
37
  #
38
+ require 'uuidtools'
39
+
39
40
  class Base32::URL
40
41
  ENCODE_CHARS =
41
- %w(0 1 2 3 4 5 6 7 8 9 a b c d e f g h j k m n p q r s t v w x y z ?)
42
+ %w[0 1 2 3 4 5 6 7 8 9 a b c d e f g h j k m n p q r s t v w x y z ?].freeze
42
43
 
43
- DECODE_MAP = ENCODE_CHARS.to_enum(:each_with_index).reduce({}) do |hsh, (c,i)|
44
+ DECODE_MAP = ENCODE_CHARS.to_enum(:each_with_index).each_with_object({}) do |(c, i), hsh|
44
45
  hsh[c] = i
45
- hsh
46
- end.merge({'i' => 1, 'l' => 1, 'o' => 0})
46
+ end.merge({ 'i' => 1, 'l' => 1, 'o' => 0 })
47
47
 
48
48
  # encodes an integer into a string
49
49
  #
@@ -61,7 +61,7 @@ class Base32::URL
61
61
  #
62
62
  def self.encode(number, opts = {})
63
63
  # verify options
64
- raise ArgumentError unless (opts.keys - [:length, :split, :checksum] == [])
64
+ raise ArgumentError unless opts.keys - %i[length split checksum] == []
65
65
 
66
66
  str = number.to_s(2).reverse.scan(/.{1,5}/).map do |bits|
67
67
  ENCODE_CHARS[bits.reverse.to_i(2)]
@@ -69,20 +69,44 @@ class Base32::URL
69
69
 
70
70
  if opts[:checksum]
71
71
  remainder = 98 - ((number * 100) % 97)
72
- str += sprintf("%02d", remainder)
72
+ str += format('%02d', remainder)
73
73
  end
74
74
 
75
75
  str = str.rjust(opts[:length], '0') if opts[:length]
76
76
 
77
77
  if opts[:split]
78
78
  str = str.reverse
79
- str = str.scan(/.{1,#{opts[:split]}}/).map { |x| x.reverse }
80
- str = str.reverse.join("-")
79
+ str = str.scan(/.{1,#{opts[:split]}}/).map(&:reverse)
80
+ str = str.reverse.join('-')
81
81
  end
82
82
 
83
83
  str
84
84
  end
85
85
 
86
+ # encodes a uuid into a string
87
+ #
88
+ # when +checksum+ is given, a checksum is added at the end of the the string,
89
+ # calculated as modulo 97-10 (ISO 7064)
90
+ #
91
+ # when +split+ is given a hyphen is inserted every <n> characters to improve
92
+ # readability
93
+ #
94
+ # when +length+ is given, the resulting string is zero-padded to be exactly
95
+ # this number of characters long (hyphens are ignored)
96
+ #
97
+ # Base32::URL.encode_uuid('0022b9ef-525a-4a79-81ad-13411697f58a') # => "16j"
98
+ # Base32::URL.encode_uuid('6179ad80-cc7f-4904-9260-0ecb3c3a90ba', :split=>5) # => "3g923-0vqvs"
99
+ #
100
+
101
+ def self.encode_uuid(uuid, opts = {})
102
+ # verify options
103
+ raise ArgumentError unless opts.keys - %i[length split checksum] == []
104
+
105
+ number = ::UUIDTools::UUID.parse(uuid).to_i
106
+
107
+ encode(number, opts)
108
+ end
109
+
86
110
  # decode a string to an integer using Douglas Crockfords Base32 Encoding
87
111
  #
88
112
  # the string is converted to uppercase and hyphens are stripped before
@@ -99,11 +123,14 @@ class Base32::URL
99
123
  # decoded, or if checksum option is used and checksum is incorrect
100
124
 
101
125
  def self.decode(string, opts = {})
102
- string, checksum = string[0..-3], string[-2..-1].to_i if opts[:checksum]
126
+ if opts[:checksum]
127
+ checksum = string[-2..].to_i
128
+ string = string[0..-3]
129
+ end
103
130
 
104
- number = clean(string).split(//).map { |char|
131
+ number = clean(string).split(//).map do |char|
105
132
  DECODE_MAP[char] or return nil
106
- }.inject(0) { |result,val| (result << 5) + val }
133
+ end.inject(0) { |result, val| (result << 5) + val }
107
134
 
108
135
  if opts[:checksum]
109
136
  remainder = 98 - ((number * 100) % 97)
@@ -113,8 +140,28 @@ class Base32::URL
113
140
  number
114
141
  end
115
142
 
143
+ # decode a string to a uuid using Douglas Crockfords Base32 Encoding
144
+ #
145
+ # the string is converted to uppercase and hyphens are stripped before
146
+ # decoding
147
+ #
148
+ # I,i,l,L decodes to 1
149
+ # O,o decodes to 0
150
+ #
151
+ # Base32::URL.decode_uuid("4awyymjt99wr3b8k84b9fxca") # => '0022b9ef-525a-4a79-81ad-13411697f58a'
152
+ #
153
+ # returns +nil+ if the string contains invalid characters and can't be
154
+ # decoded, or if checksum option is used and checksum is incorrect
155
+
156
+ def self.decode_uuid(string, opts = {})
157
+ number = decode(string, opts)
158
+ return nil unless number
159
+
160
+ ::UUIDTools::UUID.parse_int(number).to_s
161
+ end
162
+
116
163
  # same as decode, but raises ArgumentError when the string can't be decoded
117
- def self.decode!(string, opts = {})
164
+ def self.decode!(string, _opts = {})
118
165
  decode(string) or raise ArgumentError
119
166
  end
120
167
 
@@ -142,12 +189,12 @@ class Base32::URL
142
189
  # decoded
143
190
  #
144
191
  def self.valid?(string, opts = {})
145
- !(normalize(string, opts) =~ /\?/)
192
+ (normalize(string, opts) !~ /\?/)
146
193
  end
147
194
 
148
195
  class << self
149
196
  def clean(string)
150
- string.gsub(/-/,'').downcase
197
+ string.gsub(/-/, '').downcase
151
198
  end
152
199
  private :clean
153
200
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Base32
2
4
  module Url
3
- VERSION = "0.5"
5
+ VERSION = '0.7.0'
4
6
  end
5
7
  end
data/lib/base32-url.rb CHANGED
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'base32/url'
@@ -0,0 +1,11 @@
1
+ sonar.organization=front-matter
2
+ sonar.projectKey=front-matter_base32-url
3
+
4
+ # This is the name and version displayed in the SonarCloud UI.
5
+ sonar.projectName=base32-url
6
+ #sonar.projectVersion=1.0
7
+
8
+ # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
9
+ sonar.sources=.
10
+
11
+ sonar.ruby.coverage.reportPaths=coverage/coverage.json
@@ -1,13 +1,17 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov'
4
+ require 'simplecov_json_formatter'
5
+ SimpleCov.formatter = SimpleCov::Formatter::JSONFormatter
6
+ SimpleCov.start
2
7
 
3
8
  require 'test/unit'
4
9
  require 'base32/url'
5
10
 
6
11
  class TestBase32Url < Test::Unit::TestCase
7
-
8
12
  def test_encoding_and_decoding_single_chars
9
13
  from = (0..31).to_a
10
- to = %w(0 1 2 3 4 5 6 7 8 9 a b c d e f g h j k m n p q r s t v w x y z)
14
+ to = %w[0 1 2 3 4 5 6 7 8 9 a b c d e f g h j k m n p q r s t v w x y z]
11
15
 
12
16
  from.zip(to) do |symbol_value, encode_symbol|
13
17
  assert_equal encode_symbol, Base32::URL.encode(symbol_value)
@@ -16,22 +20,28 @@ class TestBase32Url < Test::Unit::TestCase
16
20
  end
17
21
 
18
22
  def test_encoding_larger_numbers
19
- assert_equal("10", Base32::URL.encode(32))
20
- assert_equal("16j", Base32::URL.encode(1234))
23
+ assert_equal('10', Base32::URL.encode(32))
24
+ assert_equal('16j', Base32::URL.encode(1234))
25
+ end
26
+
27
+ def test_encoding_uuids
28
+ assert_equal('4awyymjt99wr3b8k84b9fxca', Base32::URL.encode_uuid('0022b9ef-525a-4a79-81ad-13411697f58a'))
29
+ assert_equal('31f6p-r1k3z94-294r0es-cy3n45t', Base32::URL.encode_uuid('6179ad80-cc7f-4904-9260-0ecb3c3a90ba', split: 7))
30
+ assert_equal('6315bn4-aqg82ja-4a9wxdt-29f7279', Base32::URL.encode_uuid('c3095752-2af0-40a4-a229-3ceb7424bce2', split: 7, checksum: true))
21
31
  end
22
32
 
23
33
  def test_decoding_strings
24
- assert_equal(1234, Base32::URL.decode("16j"))
34
+ assert_equal(1234, Base32::URL.decode('16j'))
25
35
  end
26
36
 
27
37
  def test_decoding_normalizes_symbols
28
38
  assert_equal Base32::URL.decode('11100110'),
29
- Base32::URL.decode('IL1O0ilo')
39
+ Base32::URL.decode('IL1O0ilo')
30
40
  end
31
41
 
32
42
  def test_decoding_lowercase
33
- assert_equal Base32::URL.decode("abcdefghijklmnopqrstvwxyz"),
34
- Base32::URL.decode("ABCDEFGHIJKLMNOPQRSTVWXYZ")
43
+ assert_equal Base32::URL.decode('abcdefghijklmnopqrstvwxyz'),
44
+ Base32::URL.decode('ABCDEFGHIJKLMNOPQRSTVWXYZ')
35
45
  end
36
46
 
37
47
  def test_decoding_invalid_strings
@@ -39,59 +49,66 @@ class TestBase32Url < Test::Unit::TestCase
39
49
  assert_raises(ArgumentError) { Base32::URL.decode!("'+?") }
40
50
  end
41
51
 
52
+ def test_decoding_uuids
53
+ assert_equal('0022b9ef-525a-4a79-81ad-13411697f58a', Base32::URL.decode_uuid('4awyymjt99wr3b8k84b9fxca'))
54
+ assert_equal('6179ad80-cc7f-4904-9260-0ecb3c3a90ba', Base32::URL.decode_uuid('31f6p-r1k3z94-294r0es-cy3n45t'))
55
+ assert_equal('c3095752-2af0-40a4-a229-3ceb7424bce2', Base32::URL.decode_uuid('6315bn4-aqg82ja-4a9wxdt-29f7279', checksum: true))
56
+ assert_equal(nil, Base32::URL.decode_uuid('6315bn4-aqg82ja-4a9wxdt-29f7297', checksum: true))
57
+ end
58
+
42
59
  def test_decode_should_ignore_hyphens
43
- assert_equal 1234, Base32::URL.decode("1-6-j")
60
+ assert_equal 1234, Base32::URL.decode('1-6-j')
44
61
  end
45
62
 
46
63
  def test_normalize
47
- assert_equal "he110w0r1d", Base32::URL.normalize("hello-world")
48
- assert_equal "he110w0r1d", Base32::URL.normalize("HELLO-WORLD")
49
- assert_equal "b?123", Base32::URL.normalize("BU-123")
64
+ assert_equal 'he110w0r1d', Base32::URL.normalize('hello-world')
65
+ assert_equal 'he110w0r1d', Base32::URL.normalize('HELLO-WORLD')
66
+ assert_equal 'b?123', Base32::URL.normalize('BU-123')
50
67
  end
51
68
 
52
69
  def test_normalize_with_checksum
53
- assert_equal "b?1223", Base32::URL.normalize("BU-123", :checksum => true)
54
- assert_equal "b1223", Base32::URL.normalize("B123", :checksum => true)
70
+ assert_equal 'b?1223', Base32::URL.normalize('BU-123', checksum: true)
71
+ assert_equal 'b1223', Base32::URL.normalize('B123', checksum: true)
55
72
  end
56
73
 
57
74
  def test_valid
58
- assert_equal true, Base32::URL.valid?("hello-world")
59
- assert_equal false, Base32::URL.valid?("BU-123")
75
+ assert_equal true, Base32::URL.valid?('hello-world')
76
+ assert_equal false, Base32::URL.valid?('BU-123')
60
77
  end
61
78
 
62
79
  def test_valid_with_checksum
63
- assert_equal true, Base32::URL.valid?("b123u", :checksum => true)
64
- assert_equal false, Base32::URL.valid?("bu-123", :checksum => true)
80
+ assert_equal true, Base32::URL.valid?('b123u', checksum: true)
81
+ assert_equal false, Base32::URL.valid?('bu-123', checksum: true)
65
82
  end
66
83
 
67
84
  def test_length_and_hyphenization
68
- assert_equal "0016j", Base32::URL.encode(1234, :length => 5)
69
- assert_equal "0-01-6j",
70
- Base32::URL.encode(1234, :length => 5, :split => 2)
71
- assert_equal "00-010",
72
- Base32::URL.encode(32, :length => 5, :split => 3)
85
+ assert_equal '0016j', Base32::URL.encode(1234, length: 5)
86
+ assert_equal '0-01-6j',
87
+ Base32::URL.encode(1234, length: 5, split: 2)
88
+ assert_equal '00-010',
89
+ Base32::URL.encode(32, length: 5, split: 3)
73
90
  end
74
91
 
75
92
  def test_encoding_checksum
76
- assert_equal "16j82",
77
- Base32::URL.encode(1234, :checksum => true)
78
- assert_equal "016j82",
79
- Base32::URL.encode(1234, :length => 6, :checksum => true)
80
- assert_equal "01-6j-82",
81
- Base32::URL.encode(1234, :length => 6, :split => 2, :checksum => true)
93
+ assert_equal '16j82',
94
+ Base32::URL.encode(1234, checksum: true)
95
+ assert_equal '016j82',
96
+ Base32::URL.encode(1234, length: 6, checksum: true)
97
+ assert_equal '01-6j-82',
98
+ Base32::URL.encode(1234, length: 6, split: 2, checksum: true)
82
99
  end
83
100
 
84
101
  def test_decoding_checksum
85
102
  assert_equal 1234,
86
- Base32::URL.decode("16j82", :checksum => true)
103
+ Base32::URL.decode('16j82', checksum: true)
87
104
  assert_equal 1234,
88
- Base32::URL.decode("016j82", :length => 6, :checksum => true)
105
+ Base32::URL.decode('016j82', length: 6, checksum: true)
89
106
  assert_equal 1234,
90
- Base32::URL.decode("01-6j-82", :length => 6, :split => 2, :checksum => true)
107
+ Base32::URL.decode('01-6j-82', length: 6, split: 2, checksum: true)
91
108
  end
92
109
 
93
110
  def test_decoding_invalid_checksum
94
111
  assert_equal nil,
95
- Base32::URL.decode("16j44", :checksum => true)
112
+ Base32::URL.decode('16j44', checksum: true)
96
113
  end
97
114
  end
metadata CHANGED
@@ -1,48 +1,139 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: base32-url
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.5'
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Fenner
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-01 00:00:00.000000000 Z
11
+ date: 2023-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: uuidtools
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
20
- type: :development
19
+ version: '2.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.1.5
23
+ type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '1.0'
29
+ version: '2.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.1.5
33
+ - !ruby/object:Gem::Dependency
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.11'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '3'
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '1.11'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '3'
27
53
  - !ruby/object:Gem::Dependency
28
54
  name: rake
29
55
  requirement: !ruby/object:Gem::Requirement
30
56
  requirements:
31
57
  - - ">="
32
58
  - !ruby/object:Gem::Version
33
- version: '0'
59
+ version: '11.3'
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '14'
34
63
  type: :development
35
64
  prerelease: false
36
65
  version_requirements: !ruby/object:Gem::Requirement
37
66
  requirements:
38
67
  - - ">="
39
68
  - !ruby/object:Gem::Version
40
- version: '0'
69
+ version: '11.3'
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '14'
73
+ - !ruby/object:Gem::Dependency
74
+ name: rubocop
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.36'
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: '1.36'
87
+ - !ruby/object:Gem::Dependency
88
+ name: rubocop-rake
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: 0.6.0
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: 0.6.0
101
+ - !ruby/object:Gem::Dependency
102
+ name: simplecov
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - '='
106
+ - !ruby/object:Gem::Version
107
+ version: 0.22.0
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - '='
113
+ - !ruby/object:Gem::Version
114
+ version: 0.22.0
115
+ - !ruby/object:Gem::Dependency
116
+ name: simplecov_json_formatter
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: 0.1.4
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: 0.1.4
41
129
  - !ruby/object:Gem::Dependency
42
130
  name: test-unit
43
131
  requirement: !ruby/object:Gem::Requirement
44
132
  requirements:
45
133
  - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: '3.2'
136
+ - - ">="
46
137
  - !ruby/object:Gem::Version
47
138
  version: 3.2.3
48
139
  type: :development
@@ -50,17 +141,21 @@ dependencies:
50
141
  version_requirements: !ruby/object:Gem::Requirement
51
142
  requirements:
52
143
  - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '3.2'
146
+ - - ">="
53
147
  - !ruby/object:Gem::Version
54
148
  version: 3.2.3
55
149
  description: 32-symbol notation for expressing numbers in a form that can be conveniently
56
150
  and accurately transmitted between humans. URL-friendly version of the base32-crockford
57
151
  gem.
58
- email: mfenner@datacite.org
152
+ email: martin@front-matter.io
59
153
  executables: []
60
154
  extensions: []
61
155
  extra_rdoc_files:
62
156
  - README.md
63
157
  files:
158
+ - ".github/workflows/build.yml"
64
159
  - ".gitignore"
65
160
  - ".travis.yml"
66
161
  - Gemfile
@@ -71,29 +166,31 @@ files:
71
166
  - lib/base32-url.rb
72
167
  - lib/base32/url.rb
73
168
  - lib/base32/version.rb
169
+ - sonar-project.properties
74
170
  - test/test_base32_url.rb
75
- homepage: https://github.com/datacite/base32-url
171
+ homepage: https://github.com/front-matter/base32-url
76
172
  licenses:
77
173
  - MIT
78
174
  metadata: {}
79
- post_install_message:
175
+ post_install_message:
80
176
  rdoc_options: []
81
177
  require_paths:
82
178
  - lib
83
179
  required_ruby_version: !ruby/object:Gem::Requirement
84
180
  requirements:
85
- - - "~>"
181
+ - - ">="
86
182
  - !ruby/object:Gem::Version
87
- version: '2.2'
183
+ version: 2.6.0
88
184
  required_rubygems_version: !ruby/object:Gem::Requirement
89
185
  requirements:
90
186
  - - ">="
91
187
  - !ruby/object:Gem::Version
92
188
  version: '0'
93
189
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.7.4
96
- signing_key:
190
+ rubygems_version: 3.4.14
191
+ signing_key:
97
192
  specification_version: 4
98
- summary: Ruby client library for conversion of DOI Metadata
99
- test_files: []
193
+ summary: 32-symbol notation for expressing numbers in a form that can be conveniently
194
+ and accurately transmitted between humans
195
+ test_files:
196
+ - test/test_base32_url.rb