ksuid 0.2.0 → 0.3.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: 39789ed89a8ef5f2a949dc5cf716ef87f98904902dd8262e123b325408e6e69c
4
- data.tar.gz: e0d3f66c83acab156cc260d063c0a69921b880a83dce3ca32edd0635ed230579
3
+ metadata.gz: f717bc154ecc3919542742b7c927f62c924a8d4f73ec81be31f3ac3239d2b76b
4
+ data.tar.gz: e64581c8cd8cb4097fc0cd8fe869f3900cc61de735bb0ac36947143ae87fe611
5
5
  SHA512:
6
- metadata.gz: c4a500c7863252cbe4a55a898ee941e800757676ae3a78c5f191a61173267768ea5b8352609e3689295eb233e14551fea87333fe3f0158208154aed17d9035b4
7
- data.tar.gz: de9846561e6d4a2282bbbdf16ea524f6160198916e4cee8292968cb58d378cd66b2ea4699a0698a3f95db69070d3307118bb000726cb6ce05192eac20ed73a90
6
+ metadata.gz: dfa9df01eb24b3ce510d38d673726e0bd6e0bda87e5716cdbff2bdd4cdeec129a1cc1a95c60c221e91202837e8a70ff3ec90421bc9a026b5af98038de10d6b06
7
+ data.tar.gz: ed5c2932989a25b83ef0b3004a546cd0b3b465a208cf374e46daeeb34080eaac626908b846af74b6183fe1b896c4aeec8ee38628b87b9c1d805ef1dc2b1d5c3a
data/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.3.0](https://github.com/michaelherold/ksuid/compare/v0.2.0...v0.3.0) - 2021-10-07
8
+
9
+ ### Added
10
+
11
+ - A utility function for converting from a hexidecimal-encoded string to a byte string. This is necessary to handle the default encoding of binary fields within PostgreSQL.
12
+
7
13
  ## [0.2.0](https://github.com/michaelherold/ksuid/compare/v0.1.0...v0.2.0) - 2020-11-11
8
14
 
9
15
  ### Added
data/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # KSUID for Ruby
2
2
 
3
- [![Build Status](https://travis-ci.org/michaelherold/ksuid-ruby.svg)][travis]
3
+ [![Build Status](https://github.com/michaelherold/ksuid-ruby/workflows/Continuous%20integration/badge.svg)][actions]
4
4
  [![Test Coverage](https://api.codeclimate.com/v1/badges/94b2a2d4082bff21c10f/test_coverage)][test-coverage]
5
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/94b2a2d4082bff21c10f/maintainability)][maintainability]
6
6
  [![Inline docs](http://inch-ci.org/github/michaelherold/ksuid-ruby.svg?branch=master)][inch]
7
7
 
8
+ [actions]: https://github.com/michaelherold/ksuid-ruby/actions
8
9
  [inch]: http://inch-ci.org/github/michaelherold/ksuid-ruby
9
10
  [maintainability]: https://codeclimate.com/github/michaelherold/ksuid-ruby/maintainability
10
11
  [test-coverage]: https://codeclimate.com/github/michaelherold/ksuid-ruby/test_coverage
11
- [travis]: https://travis-ci.org/michaelherold/ksuid-ruby
12
12
 
13
13
  ksuid is a Ruby library that can generate and parse [KSUIDs](https://github.com/segmentio/ksuid). The original readme for the Go version of KSUID does a great job of explaining what they are and how they should be used, so it is excerpted here.
14
14
 
@@ -215,10 +215,11 @@ So you’re interested in contributing to KSUID? Check out our [contributing gui
215
215
 
216
216
  ## Supported Ruby Versions
217
217
 
218
- This library aims to support and is [tested against][travis] the following Ruby versions:
218
+ This library aims to support and is [tested against][actions] the following Ruby versions:
219
219
 
220
220
  * Ruby 2.5
221
221
  * Ruby 2.6
222
+ * Ruby 2.7
222
223
  * JRuby 9.2
223
224
 
224
225
  If something doesn't work on one of these versions, it's a bug.
data/ksuid.gemspec CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |spec|
6
6
  spec.name = 'ksuid'
7
7
  spec.version = KSUID::VERSION
8
8
  spec.authors = ['Michael Herold']
9
- spec.email = ['michael@michaeljherold.com']
9
+ spec.email = ['opensource@michaeljherold.com']
10
10
 
11
11
  spec.summary = 'Ruby implementation of the K-Sortable Unique IDentifier'
12
12
  spec.description = spec.summary
data/lib/ksuid/base62.rb CHANGED
@@ -20,6 +20,11 @@ module KSUID
20
20
  # @api private
21
21
  BASE = CHARSET.size
22
22
 
23
+ # A matcher that checks whether a String has a character outside the charset
24
+ #
25
+ # @api private
26
+ MATCHER = /[^#{CHARSET}]/.freeze
27
+
23
28
  # Checks whether a string is a base 62-compatible string
24
29
  #
25
30
  # @api public
@@ -30,7 +35,7 @@ module KSUID
30
35
  # @param string [String] the string to check for compatibility
31
36
  # @return [Boolean]
32
37
  def self.compatible?(string)
33
- string.each_char.all? { |char| CHARSET.include?(char) }
38
+ string.each_char.all? { |char| !MATCHER.match?(char) }
34
39
  end
35
40
 
36
41
  # Decodes a base 62-encoded string into an integer
data/lib/ksuid/utils.rb CHANGED
@@ -5,7 +5,19 @@ module KSUID
5
5
  #
6
6
  # @api private
7
7
  module Utils
8
- # Converts a byte string into a byte array
8
+ # A regular expression for splitting bytes out of a "binary" string
9
+ #
10
+ # @api private
11
+ # @return [Regexp] the splitter
12
+ BYTES = /.{8}/.freeze
13
+
14
+ # A regular expression for splitting a String into pairs of characters
15
+ #
16
+ # @api private
17
+ # @return [Regexp] the splitter
18
+ PAIRS = /.{2}/.freeze
19
+
20
+ # Converts a byte array into a byte string
9
21
  #
10
22
  # @param bytes [String] a byte string
11
23
  # @return [Array<Integer>] an array of bytes from the byte string
@@ -13,6 +25,21 @@ module KSUID
13
25
  bytes.pack('C*')
14
26
  end
15
27
 
28
+ # Converts a hex string into a byte string
29
+ #
30
+ # @param hex [String] a hex-encoded KSUID
31
+ # @param bits [Integer] the expected number of bits for the result
32
+ # @return [String] the byte string
33
+ def self.byte_string_from_hex(hex, bits = 32)
34
+ byte_array =
35
+ hex
36
+ .rjust(bits, '0')
37
+ .scan(PAIRS)
38
+ .map { |bytes| bytes.to_i(16) }
39
+
40
+ byte_string_from_array(byte_array)
41
+ end
42
+
16
43
  # Converts a byte string or byte array into a hex-encoded string
17
44
  #
18
45
  # @param bytes [String, Array<Integer>] the byte string or array
@@ -47,9 +74,8 @@ module KSUID
47
74
  int
48
75
  .to_s(2)
49
76
  .rjust(bits, '0')
50
- .split('')
51
- .each_slice(8)
52
- .map { |digits| digits.join.to_i(2) }
77
+ .scan(BYTES)
78
+ .map { |digits| digits.to_i(2) }
53
79
  .pack("C#{bits / 8}")
54
80
  end
55
81
  end
data/lib/ksuid/version.rb CHANGED
@@ -4,5 +4,5 @@ module KSUID
4
4
  # The version of the KSUID gem
5
5
  #
6
6
  # @return [String]
7
- VERSION = '0.2.0'
7
+ VERSION = '0.3.0'
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ksuid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Herold
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-12 00:00:00.000000000 Z
11
+ date: 2021-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -26,7 +26,7 @@ dependencies:
26
26
  version: '1.15'
27
27
  description: Ruby implementation of the K-Sortable Unique IDentifier
28
28
  email:
29
- - michael@michaeljherold.com
29
+ - opensource@michaeljherold.com
30
30
  executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []