ruby_xid 1.0.7 → 1.0.8

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ruby_xid.rb +19 -10
  3. data/lib/xid/base32.rb +31 -30
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a748d67186a97a60828edaab13ea379ec424111d97eb00e0caee49d6c1c95149
4
- data.tar.gz: ad28de191e5527247e47c9a47fee102b0d23a7398962651fab7b21ea94e1da8a
3
+ metadata.gz: 5ffb58088d95b32fa0c7c20b79eeb32b76b7c16ce99f66c6c6ca390a46a2babf
4
+ data.tar.gz: 4e56a42b0066286b79cdecfd6d8a085567a2e4deca7fe70e4301747409f0dc5c
5
5
  SHA512:
6
- metadata.gz: cbaed30e42664c32c74822faaaa46c96f4a6ca1a99e846f7b0e3b943bb4c0e5ea5f9b7c39fa6868642f5539a45bb1dc3ccf6153c8e3ad26fc549e3968da72383
7
- data.tar.gz: 896ed22fd8f8fa7621c906b2606d24c0ac6ff7ab6226546b2b3f5bd69635c65e41a616f513649a69224d9206cbbf1b7187d1439c81134944022154d9feef404f
6
+ metadata.gz: fcd15271f23fd6948e1579f7ccee1438bf830fb59a88b88070005dfc2b7876ce78f07bd0fb3b5254c33aeb482b3d5ae0f261eaffb3b62cfa2532a5aad23f77f8
7
+ data.tar.gz: acdb6523a821b1e5373bd90ce251c6fddbd93c3501fe7e9cbd682f54968efcc1023208c98509943f1f86259da98e5a374365b98549ab6a00d12a507eae82b8ef
data/lib/ruby_xid.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'socket'
4
4
  require 'securerandom'
5
5
  require 'date'
6
+ require 'digest'
6
7
 
7
8
  class Xid
8
9
 
@@ -12,32 +13,38 @@ class Xid
12
13
 
13
14
  def initialize(id = nil)
14
15
  @@generator ||= Generator.new(init_rand_int, real_machine_id)
15
- @value = id ? id : @@generator.generate.unpack('C12')
16
+ if id
17
+ # Convert array to binary string if needed
18
+ @value = id.is_a?(String) ? id : id.pack('C*')
19
+ else
20
+ @value = @@generator.generate
21
+ end
16
22
  end
17
23
 
18
24
  def next
19
25
  @string = nil
20
- @value = @@generator.generate.unpack('C12')
26
+ @value = @@generator.generate
21
27
  string
22
28
  end
23
29
 
24
30
  def value
25
- @value
31
+ # Return as array for backward compatibility
32
+ @value.bytes
26
33
  end
27
34
 
28
35
  def pid
29
36
  # type: () -> int
30
- (value[7] << 8 | value[8])
37
+ (@value.getbyte(7) << 8 | @value.getbyte(8))
31
38
  end
32
39
 
33
40
  def counter
34
41
  # type: () -> int
35
- value[9] << 16 | value[10] << 8 | value[11]
42
+ @value.getbyte(9) << 16 | @value.getbyte(10) << 8 | @value.getbyte(11)
36
43
  end
37
44
 
38
45
  def machine
39
46
  # type: () -> str
40
- value[4..6].map(&:chr).join('')
47
+ @value[4, 3]
41
48
  end
42
49
 
43
50
  def datetime
@@ -46,7 +53,7 @@ class Xid
46
53
 
47
54
  def time
48
55
  # type: () -> int
49
- value[0] << 24 | value[1] << 16 | value[2] << 8 | value[3]
56
+ @value.getbyte(0) << 24 | @value.getbyte(1) << 16 | @value.getbyte(2) << 8 | @value.getbyte(3)
50
57
  end
51
58
 
52
59
  def inspect
@@ -59,7 +66,7 @@ class Xid
59
66
 
60
67
  def bytes
61
68
  # type: () -> str
62
- @value.pack('c12')
69
+ @value
63
70
  end
64
71
 
65
72
  def ==(other_xid)
@@ -88,13 +95,15 @@ class Xid
88
95
 
89
96
  raise 'Invalid Xid' unless value_check.all?
90
97
 
91
- Object.const_get(name).new(val)
98
+ # Convert array to binary string
99
+ binary_val = val.pack('C*')
100
+ Object.const_get(name).new(binary_val)
92
101
  end
93
102
 
94
103
  private
95
104
  def string
96
105
  # type: () -> str
97
- @string ||= Base32.b32encode(value)
106
+ @string ||= Base32.b32encode(@value)
98
107
  end
99
108
 
100
109
  def init_rand_int
data/lib/xid/base32.rb CHANGED
@@ -1,17 +1,14 @@
1
1
 
2
2
  class Xid::Base32
3
-
3
+
4
4
  # 0123456789abcdefghijklmnopqrstuv - Used for encoding
5
5
  ENCODE_HEX = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v"].freeze
6
+ DECODE_HEX_MAP = Hash[ENCODE_HEX.each_with_index.map { |x, i| [x, i] }].freeze
6
7
  TRIM_LEN = 20
7
8
 
8
9
  # Start class methods
9
10
  class << self
10
11
 
11
- def decode_hex_map
12
- Hash[ENCODE_HEX.each_with_index.map { |x, i| [x, i] }]
13
- end
14
-
15
12
  def b32encode(src)
16
13
  encode(src)
17
14
  end
@@ -21,33 +18,37 @@ class Xid::Base32
21
18
  end
22
19
 
23
20
  def encode(id)
24
- dst = []
25
- dst[19] = ENCODE_HEX[(id[11] << 4) & 0x1f]
26
- dst[18] = ENCODE_HEX[(id[11] >> 1) & 0x1f]
27
- dst[17] = ENCODE_HEX[(id[11] >> 6) & 0x1f | (id[10] << 2) & 0x1f]
28
- dst[16] = ENCODE_HEX[id[10] >> 3]
29
- dst[15] = ENCODE_HEX[id[9] & 0x1f]
30
- dst[14] = ENCODE_HEX[(id[9] >> 5) | (id[8] << 3) & 0x1f]
31
- dst[13] = ENCODE_HEX[(id[8] >> 2) & 0x1f]
32
- dst[12] = ENCODE_HEX[id[8] >> 7 | (id[7] << 1) & 0x1f]
33
- dst[11] = ENCODE_HEX[(id[7] >> 4) & 0x1f | (id[6] << 4) & 0x1f]
34
- dst[10] = ENCODE_HEX[(id[6] >> 1) & 0x1f]
35
- dst[9] = ENCODE_HEX[(id[6] >> 6) & 0x1f | (id[5] << 2) & 0x1f]
36
- dst[8] = ENCODE_HEX[id[5] >> 3]
37
- dst[7] = ENCODE_HEX[id[4] & 0x1f]
38
- dst[6] = ENCODE_HEX[id[4] >> 5 | (id[3] << 3) & 0x1f]
39
- dst[5] = ENCODE_HEX[(id[3] >> 2) & 0x1f]
40
- dst[4] = ENCODE_HEX[id[3] >> 7 | (id[2] << 1) & 0x1f]
41
- dst[3] = ENCODE_HEX[(id[2] >> 4) & 0x1f | (id[1] << 4) & 0x1f]
42
- dst[2] = ENCODE_HEX[(id[1] >> 1) & 0x1f]
43
- dst[1] = ENCODE_HEX[(id[1] >> 6) & 0x1f | (id[0] << 2) & 0x1f]
44
- dst[0] = ENCODE_HEX[id[0] >> 3]
45
-
46
- dst.join('')
21
+ # Convert to byte array if binary string
22
+ id = id.bytes if id.is_a?(String)
23
+
24
+ # Build string directly instead of array + join
25
+ dst = String.new(capacity: 20)
26
+ dst << ENCODE_HEX[id[0] >> 3]
27
+ dst << ENCODE_HEX[(id[0] << 2) & 0x1f | (id[1] >> 6) & 0x1f]
28
+ dst << ENCODE_HEX[(id[1] >> 1) & 0x1f]
29
+ dst << ENCODE_HEX[(id[1] << 4) & 0x1f | (id[2] >> 4) & 0x1f]
30
+ dst << ENCODE_HEX[(id[2] << 1) & 0x1f | id[3] >> 7]
31
+ dst << ENCODE_HEX[(id[3] >> 2) & 0x1f]
32
+ dst << ENCODE_HEX[(id[3] << 3) & 0x1f | id[4] >> 5]
33
+ dst << ENCODE_HEX[id[4] & 0x1f]
34
+ dst << ENCODE_HEX[id[5] >> 3]
35
+ dst << ENCODE_HEX[(id[5] << 2) & 0x1f | (id[6] >> 6) & 0x1f]
36
+ dst << ENCODE_HEX[(id[6] >> 1) & 0x1f]
37
+ dst << ENCODE_HEX[(id[6] << 4) & 0x1f | (id[7] >> 4) & 0x1f]
38
+ dst << ENCODE_HEX[(id[7] << 1) & 0x1f | id[8] >> 7]
39
+ dst << ENCODE_HEX[(id[8] >> 2) & 0x1f]
40
+ dst << ENCODE_HEX[(id[8] << 3) & 0x1f | (id[9] >> 5)]
41
+ dst << ENCODE_HEX[id[9] & 0x1f]
42
+ dst << ENCODE_HEX[id[10] >> 3]
43
+ dst << ENCODE_HEX[(id[10] << 2) & 0x1f | (id[11] >> 6) & 0x1f]
44
+ dst << ENCODE_HEX[(id[11] >> 1) & 0x1f]
45
+ dst << ENCODE_HEX[(id[11] << 4) & 0x1f]
46
+
47
+ dst.freeze
47
48
  end
48
49
 
49
50
  def decode(src, str_map)
50
- src.downcase!
51
+ src = src.downcase
51
52
 
52
53
  end_loop = false
53
54
  result = []
@@ -63,7 +64,7 @@ class Xid::Base32
63
64
  break
64
65
  end
65
66
  char = src[i]
66
- dbuf[i] = decode_hex_map[char]
67
+ dbuf[i] = DECODE_HEX_MAP[char]
67
68
  end
68
69
 
69
70
  if src_len >= 8
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_xid
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Valarpiraichandran
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-18 00:00:00.000000000 Z
11
+ date: 2026-02-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: a.valarpirai@gmail.com
@@ -37,7 +37,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
37
  - !ruby/object:Gem::Version
38
38
  version: '0'
39
39
  requirements: []
40
- rubygems_version: 3.0.6
40
+ rubygems_version: 3.0.3.1
41
41
  signing_key:
42
42
  specification_version: 4
43
43
  summary: Ruby xid implementation