crockford32 1.0.2 → 1.1.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: a8731f2fc74f2b2e8b156421639d7be5bccc79d8560295868ac278ca81b2f7a7
4
- data.tar.gz: 2e9c6d6ccbb40ebb8023b3f711501a62b1ccb1bd972b3e9f967d1b50f4cbf2cb
3
+ metadata.gz: b2f3c133e3c624b9664a506fc2d8a9b4637d7316ce4e22d288f1c7a989ae2dc9
4
+ data.tar.gz: 99218eed8df26f78d663e6126e6a0f2579e7d7abbed00934bb17af668881561c
5
5
  SHA512:
6
- metadata.gz: d73156968ffbfd3b02886fbd57d1adf6ffad73a7226b3f80c05e4e7c4cc89c3a533f7eb84d5dff7dd51020162d9ccd365ed206db43cc0fe3aa8f75bd8ff4a97d
7
- data.tar.gz: 9c0a53a37aa656c4d69c0c1b7dd0a091660445450aff51339b1640e10031cd9cb50a1e99374be2b177bbe199fd18ff3cda47338a22023fc9362d4adc11902b20
6
+ metadata.gz: cfae960c489f647dd841ee981c2a414c2b92283be33519d125b65382f3e8f7bc818cad6a2dde442fbb2c7f6caf913b50d7d78567ea1aaba46d956b0f9f707320
7
+ data.tar.gz: 211e81e821b28cab1f6a84a698687a0c11d82a53de529e44708cd51d8f574b1c01c848246a5bf798364cd2ba4c62e54eb1ad9b5f3fd225be80fd3987c87842c8
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Changelog
2
2
 
3
+ ## v1.1.0 - 2022-03-08
4
+ - Add `length:` parameter to `Crockford32.decode` to support padding to a given length after decoding into a string.
5
+
3
6
  ## v1.0.2 - 2022-02-22
4
7
  - Add type definitions
5
8
 
data/README.md CHANGED
@@ -3,6 +3,20 @@ A fast little-endian implementation of [Douglas Crockford's Base32 specification
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/crockford32.svg)](https://badge.fury.io/rb/crockford32)
5
5
 
6
+ ## What's in the box?
7
+ ✅ Simple usage documentation written to get started fast. [Check it out!](#usage)
8
+
9
+ ⚡ A pretty fast implementation of Crockford32 in pure ruby. [Check it out!](#benchmarks)
10
+
11
+ 📚 YARD generated API documentation for the library. [Check it out!](https://tinychameleon.github.io/crockford32/)
12
+
13
+ 🤖 RBS types for your type checking wants. [Check it out!](./sig/crockford32.rbs)
14
+
15
+ 💎 Tests against many Ruby versions. [Check it out!](#ruby-versions)
16
+
17
+ 🔒 MFA protection on all gem owners. [Check it out!](https://rubygems.org/gems/crockford32)
18
+
19
+
6
20
  ## Installation
7
21
  Add this line to your application's Gemfile:
8
22
 
@@ -28,6 +42,7 @@ This gem is tested against the following Ruby versions:
28
42
  - 3.0.0
29
43
  - 3.0.3
30
44
  - 3.1.0
45
+ - 3.1.1
31
46
 
32
47
 
33
48
  ## Usage
@@ -105,19 +120,21 @@ This library _always_ uses little-endian.
105
120
  For more detailed information about the library [see the API documentation](https://tinychameleon.github.io/crockford32/).
106
121
 
107
122
 
108
- ## Development
123
+ ## Contributing
124
+
125
+ ### Development
109
126
  To get started development on this gem run the `bin/setup` command. This will install dependencies and run the tests and linting tasks to ensure everything is working.
110
127
 
111
128
  For an interactive console with the gem loaded run `bin/console`.
112
129
 
113
130
 
114
- ## Testing
131
+ ### Testing
115
132
  Use the `bundle exec rake test` command to run unit tests. To install the gem onto your local machine for general integration testing use `bundle exec rake install`.
116
133
 
117
134
  To test the gem against each supported version of Ruby use `bin/test_versions`. This will create a Docker image for each version and run the tests and linting steps.
118
135
 
119
136
 
120
- ## Releases
137
+ ### Releasing
121
138
  Do the following to release a new version of this gem:
122
139
 
123
140
  - Update the version number in [lib/crockford32/version.rb](./lib/crockford32/version.rb)
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Crockford32
4
4
  # The library version.
5
- VERSION = "1.0.2"
5
+ VERSION = "1.1.0"
6
6
  end
data/lib/crockford32.rb CHANGED
@@ -54,6 +54,7 @@ module Crockford32
54
54
  # @param value [String] the Base32 value to decode.
55
55
  # @param into [Symbol] the destination type to decode into. Can be +:integer+ or +:string+.
56
56
  # @param check [Boolean] whether to validate the check symbol.
57
+ # @param length [Integer, nil] the length of the resulting string when right padded.
57
58
  #
58
59
  # @return [Integer, String] the decoded value.
59
60
  #
@@ -61,7 +62,7 @@ module Crockford32
61
62
  # @raise [InvalidCharacterError] when the value being decoded has a character outside the
62
63
  # Base32 symbol set or a misplaced check symbol.
63
64
  # @raise [UnsupportedDecodingTypeError] when the requested +into:+ type is not supported.
64
- def self.decode(value, into: :integer, check: false)
65
+ def self.decode(value, into: :integer, check: false, length: nil)
65
66
  checksum = check ? value[-1] : nil
66
67
  value = check ? value[0...-1] : value
67
68
 
@@ -73,7 +74,7 @@ module Crockford32
73
74
  raise ChecksumError.new(value, actual, required) if actual != required
74
75
  end
75
76
 
76
- convert result, into
77
+ convert result, into, length
77
78
  end
78
79
 
79
80
  # Encode a value as Base32.
@@ -118,13 +119,14 @@ module Crockford32
118
119
  #
119
120
  # @param result [Integer] the decoded value.
120
121
  # @param type [Symbol] the destination type for the value. Can be +:integer+ or +:string+.
122
+ # @param length [Integer, nil] the length to pad the string to.
121
123
  # @return [Integer, String] the decoded value converted to the destination type.
122
- def self.convert(result, type)
124
+ def self.convert(result, type, length)
123
125
  case type
124
126
  when :integer
125
127
  result
126
128
  when :string
127
- into_string result
129
+ into_string result, length
128
130
  else
129
131
  raise UnsupportedDecodingTypeError.new(type)
130
132
  end
@@ -135,8 +137,9 @@ module Crockford32
135
137
  # Each 8-bit sequence is packed into a String in little-endian order.
136
138
  #
137
139
  # @param result [Integer] the decoded value.
140
+ # @param length [Integer, nil] the length of the decoded value with right padding.
138
141
  # @return [String] the decoded value as a String.
139
- def self.into_string(result)
142
+ def self.into_string(result, length)
140
143
  q, r = result.bit_length.divmod(0x08)
141
144
  q += 1 if r > 0
142
145
  bytes = Array.new(q)
@@ -144,7 +147,11 @@ module Crockford32
144
147
  bytes[i] = result & 0xff
145
148
  result >>= 0x08
146
149
  end
147
- bytes.pack("C*")
150
+
151
+ bstr = bytes.pack("C*")
152
+ return bstr if length.nil?
153
+
154
+ bstr.ljust(length, "\x00")
148
155
  end
149
156
 
150
157
  # Convert a raw value into an Integer for encoding.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crockford32
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephan Tarulli
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-23 00:00:00.000000000 Z
11
+ date: 2022-03-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A fast little-endian implementation of Crockford's Base32 specification.
14
14
  email: