encoded_id 1.0.0.rc3 → 1.0.0.rc4
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +9 -0
- data/lib/encoded_id/reversible_id.rb +12 -4
- data/lib/encoded_id/version.rb +1 -1
- data/sig/encoded_id.rbs +3 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0844f07baeecd48a70bf0b2564dfb9f02998b002279b44bf75bd0172ccc265be'
|
4
|
+
data.tar.gz: 0bcd81de8a4ea7e034097a92dff9ba82478d92f87f7820dda872a9f35b5294d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4dcf3c99891f8a3a195d188656d1c45c9471760dfbc715fe994fac4c4145a086d9573b663c5a4a79894c71c4e3a15bf68ff0d30b20e44b8fe661c68f1707c065
|
7
|
+
data.tar.gz: 8edb3675d565ff7be88441fcdb2a55783415f170fcd8d9102c6bb0fff8cc6fa0d22f1af19e72dd5558dedb37ba2af23c29fd6171d12da2032a0e2ce187bedeca
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,10 @@
|
|
6
6
|
|
7
7
|
- `ReversibleId` now no longer downcases the encodedid input string by default on decode, ie the `decode` option `downcase` is now `false`. In a future release the `downcase` option will be removed.
|
8
8
|
|
9
|
+
## [1.0.0.rc4] - unreleased
|
10
|
+
|
11
|
+
- Add an optional `max_inputs_per_id` argument to `ReversibleId`, thanks to [@avcwisesa](https://github.com/avcwisesa)
|
12
|
+
|
9
13
|
## [1.0.0.rc3] - 2023-10-23
|
10
14
|
|
11
15
|
- Add an optional `max_length` argument to `ReversibleId`, thanks to [@jugglebird](https://github.com/jugglebird)
|
data/README.md
CHANGED
@@ -137,6 +137,15 @@ the maximum input length that will be decoded. If the encoded string exceeds `ma
|
|
137
137
|
`EncodedIdLengthError` will be raised. If the input exceeds `max_length` then a `InvalidInputError` will
|
138
138
|
be raised. If `max_length` is set to `nil`, then no validation, even using the default will be performed.
|
139
139
|
|
140
|
+
### `max_inputs_per_id`
|
141
|
+
|
142
|
+
`max_inputs_per_id`: the maximum amount of IDs to be encoded together. The default is 32.
|
143
|
+
|
144
|
+
This maximum amount is used to limit:
|
145
|
+
- the length of array input passed to `encode`
|
146
|
+
- the length of integer array encoded in hex string(s) passed to `encode_hex` function.
|
147
|
+
`InvalidInputError` wil be raised when array longer than `max_inputs_per_id` is provided.
|
148
|
+
|
140
149
|
### `alphabet`
|
141
150
|
|
142
151
|
`alphabet`: the alphabet used in the encoded string. By default, it uses a variation of the Crockford reduced character set (https://www.crockford.com/base32.html).
|
@@ -8,7 +8,7 @@ require "hashids"
|
|
8
8
|
# Note hashIds already has a built in profanity limitation algorithm
|
9
9
|
module EncodedId
|
10
10
|
class ReversibleId
|
11
|
-
def initialize(salt:, length: 8, split_at: 4, split_with: "-", alphabet: Alphabet.modified_crockford, hex_digit_encoding_group_size: 4, max_length: 128)
|
11
|
+
def initialize(salt:, length: 8, split_at: 4, split_with: "-", alphabet: Alphabet.modified_crockford, hex_digit_encoding_group_size: 4, max_length: 128, max_inputs_per_id: 32)
|
12
12
|
@alphabet = validate_alphabet(alphabet)
|
13
13
|
@salt = validate_salt(salt)
|
14
14
|
@length = validate_length(length)
|
@@ -16,13 +16,14 @@ module EncodedId
|
|
16
16
|
@split_with = validate_split_with(split_with, alphabet)
|
17
17
|
@hex_represention_encoder = HexRepresentation.new(hex_digit_encoding_group_size)
|
18
18
|
@max_length = validate_max_length(max_length)
|
19
|
+
@max_inputs_per_id = validate_max_input(max_inputs_per_id)
|
19
20
|
end
|
20
21
|
|
21
22
|
# Encode the input values into a hash
|
22
23
|
def encode(values)
|
23
24
|
inputs = prepare_input(values)
|
24
25
|
encoded_id = encoded_id_generator.encode(inputs)
|
25
|
-
encoded_id = humanize_length(encoded_id) unless split_at.nil?
|
26
|
+
encoded_id = humanize_length(encoded_id) unless split_with.nil? || split_at.nil?
|
26
27
|
|
27
28
|
raise EncodedIdLengthError if max_length_exceeded?(encoded_id)
|
28
29
|
|
@@ -80,6 +81,11 @@ module EncodedId
|
|
80
81
|
raise InvalidConfigurationError, "Max length must be an integer greater than 0"
|
81
82
|
end
|
82
83
|
|
84
|
+
def validate_max_input(max_inputs_per_id)
|
85
|
+
return max_inputs_per_id if valid_integer_option?(max_inputs_per_id)
|
86
|
+
raise InvalidConfigurationError, "Max inputs per ID must be an integer greater than 0"
|
87
|
+
end
|
88
|
+
|
83
89
|
# Split the encoded string into groups of this size
|
84
90
|
def validate_split_at(split_at)
|
85
91
|
return split_at if valid_integer_option?(split_at) || split_at.nil?
|
@@ -87,8 +93,8 @@ module EncodedId
|
|
87
93
|
end
|
88
94
|
|
89
95
|
def validate_split_with(split_with, alphabet)
|
90
|
-
return split_with if split_with.is_a?(String) && !alphabet.characters.include?(split_with)
|
91
|
-
raise InvalidConfigurationError, "Split with must be a string and not part of the alphabet"
|
96
|
+
return split_with if split_with.nil? || (split_with.is_a?(String) && !alphabet.characters.include?(split_with))
|
97
|
+
raise InvalidConfigurationError, "Split with must be a string and not part of the alphabet or nil"
|
92
98
|
end
|
93
99
|
|
94
100
|
def valid_integer_option?(value)
|
@@ -99,6 +105,8 @@ module EncodedId
|
|
99
105
|
inputs = value.is_a?(Array) ? value.map(&:to_i) : [value.to_i]
|
100
106
|
raise ::EncodedId::InvalidInputError, "Integer IDs to be encoded can only be positive" if inputs.any?(&:negative?)
|
101
107
|
|
108
|
+
raise ::EncodedId::InvalidInputError, "%d integer IDs provided, maximum amount of IDs is %d" % [inputs.length, @max_inputs_per_id] if inputs.length > @max_inputs_per_id
|
109
|
+
|
102
110
|
inputs
|
103
111
|
end
|
104
112
|
|
data/lib/encoded_id/version.rb
CHANGED
data/sig/encoded_id.rbs
CHANGED
@@ -59,7 +59,7 @@ module EncodedId
|
|
59
59
|
end
|
60
60
|
|
61
61
|
class ReversibleId
|
62
|
-
def initialize: (salt: ::String, ?length: ::Integer, ?split_at: ::Integer, ?split_with: ::String, ?alphabet: Alphabet, ?hex_digit_encoding_group_size: ::Integer, ?max_length: ::Integer) -> void
|
62
|
+
def initialize: (salt: ::String, ?length: ::Integer, ?split_at: ::Integer, ?split_with: ::String, ?alphabet: Alphabet, ?hex_digit_encoding_group_size: ::Integer, ?max_length: ::Integer, ?max_inputs_per_id: ::Integer) -> void
|
63
63
|
|
64
64
|
# Encode the input values into a hash
|
65
65
|
def encode: (encodeableValue values) -> ::String
|
@@ -95,6 +95,7 @@ module EncodedId
|
|
95
95
|
def validate_salt: (::String) -> ::String
|
96
96
|
def validate_length: (::Integer) -> ::Integer
|
97
97
|
def validate_max_length: (::Integer | nil) -> (::Integer | nil)
|
98
|
+
def validate_max_input: (::Integer) -> ::Integer
|
98
99
|
def validate_split_at: (::Integer | nil) -> (::Integer | nil)
|
99
100
|
def validate_split_with: (::String, Alphabet) -> ::String
|
100
101
|
def validate_hex_digit_encoding_group_size: (::Integer) -> ::Integer
|
@@ -108,7 +109,7 @@ module EncodedId
|
|
108
109
|
|
109
110
|
def humanize_length: (::String hash) -> ::String
|
110
111
|
|
111
|
-
def convert_to_hash: (::String str) -> ::String
|
112
|
+
def convert_to_hash: (::String str, bool) -> ::String
|
112
113
|
|
113
114
|
def map_equivalent_characters: (::String str) -> ::String
|
114
115
|
def max_length_exceeded?: (::String str) -> bool
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: encoded_id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Ierodiaconou
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashids
|
@@ -67,11 +67,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
67
67
|
version: 2.7.0
|
68
68
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
69
|
requirements:
|
70
|
-
- - "
|
70
|
+
- - ">="
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version:
|
72
|
+
version: '0'
|
73
73
|
requirements: []
|
74
|
-
rubygems_version: 3.
|
74
|
+
rubygems_version: 3.5.3
|
75
75
|
signing_key:
|
76
76
|
specification_version: 4
|
77
77
|
summary: EncodedId is a gem for creating reversible obfuscated IDs from numerical
|