easy-uuid 0.1.0 → 0.2.0
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 +7 -0
- data/lib/uuid.rb +113 -26
- metadata +42 -22
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ad07d1208eb16cd745b048adb55ca02f86430e88f513f7e188d77a4a30d3fc10
|
4
|
+
data.tar.gz: cad79f0eea9bdf41194365c4935cf49c946395d754632335bee9fd6a32e7561b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bbbe31f97f6e193c3ee8c35b73dbf6ff433d77c1a801320dc9a6e8fa9fe11a71eaf998f4854fe69274955c9142456f336ce3439a4b9ddfd69200f82bd9c05bd5
|
7
|
+
data.tar.gz: 41681b7c64d41c1f4e0b18ef0b26467be123df2ff528e57bc229c8b4bdf04525b1c1742f05c561d6009ae00bf93f0acc9a101ab7bf33e4cadb5f3fbc0f29826f
|
data/lib/uuid.rb
CHANGED
@@ -1,48 +1,86 @@
|
|
1
1
|
module Kernel
|
2
|
+
# Cast to UUID
|
3
|
+
#
|
4
|
+
# @raise [TypeError]
|
2
5
|
def UUID(uuid)
|
3
|
-
if uuid.nil? then
|
6
|
+
if uuid.nil? then UUID::NIL
|
4
7
|
elsif uuid.is_a?(UUID) then uuid
|
5
8
|
elsif uuid.is_a?(Integer) then UUID.new(uuid)
|
6
|
-
elsif uuid = String.try_convert(uuid) then
|
7
|
-
|
8
|
-
|
9
|
+
elsif uuid = String.try_convert(uuid) then
|
10
|
+
uuid.size == 16 ? UUID.new(uuid) : UUID.parse(uuid)
|
11
|
+
else raise TypeError, "can't convert #{uuid.class} into UUID"
|
9
12
|
end
|
10
13
|
end
|
11
14
|
module_function :UUID
|
12
15
|
end
|
13
16
|
|
14
17
|
class UUID
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
18
|
+
# Version
|
19
|
+
VERSION = '0.2.0'
|
20
|
+
|
21
|
+
# Basic regex for validating UUID formatted string
|
22
|
+
REGEX = /\A\h{8}-\h{4}-\h{4}-\h{4}-\h{12}\z/
|
23
|
+
|
24
|
+
|
25
|
+
# Parse a UUID formatted string
|
26
|
+
#
|
27
|
+
# @param str [String] string to parse
|
28
|
+
#
|
29
|
+
# @raise [ArgumentError] the string is not parsable as a UUID
|
30
|
+
#
|
31
|
+
# @return [UUID]
|
32
|
+
#
|
33
|
+
def self.parse(str)
|
34
|
+
unless str =~ REGEX
|
35
|
+
raise ArgumentError, "unable to parse UUID value"
|
36
|
+
end
|
37
|
+
|
38
|
+
self.new( [str.delete('-')].pack('H32') )
|
27
39
|
end
|
28
40
|
|
41
|
+
|
42
|
+
# Create UUID
|
43
|
+
#
|
44
|
+
# @param [String,Integer] UUID value
|
45
|
+
#
|
46
|
+
# @raise [ArgumentError] given integer is too big or
|
47
|
+
# given string is not 16-byte 8bit
|
48
|
+
#
|
29
49
|
def initialize(v)
|
30
50
|
case v
|
31
51
|
when Integer
|
32
|
-
|
33
|
-
|
34
|
-
|
52
|
+
hex = "%032x" % [ v ]
|
53
|
+
if hex.size > 32
|
54
|
+
raise ArgumentError,
|
55
|
+
"integer to big (must fit in 128-bit)"
|
56
|
+
end
|
57
|
+
@raw = [ hex ].pack('H32')
|
35
58
|
when String
|
36
59
|
if v.size != 16 || v.encoding.name != 'ASCII-8BIT'
|
37
60
|
raise ArgumentError,
|
38
|
-
"need to be 16
|
61
|
+
"need to be a 16 byte ASCII-8BIT string (#{v})"
|
39
62
|
end
|
63
|
+
@raw = v.dup.freeze
|
40
64
|
else
|
41
|
-
raise ArgumentError,
|
65
|
+
raise ArgumentError,
|
66
|
+
"expected 128-bit integer or 16-byte string"
|
42
67
|
end
|
43
|
-
@raw = v.dup.freeze
|
44
68
|
end
|
45
69
|
|
70
|
+
|
71
|
+
# Return the 16-byte sequence forming the UUID.
|
72
|
+
#
|
73
|
+
# @return [Array<Integer>]
|
74
|
+
#
|
75
|
+
def bytes
|
76
|
+
@raw.bytes
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
# Generates an integer hash value
|
81
|
+
#
|
82
|
+
# @return [Integer] hash value
|
83
|
+
#
|
46
84
|
def hash
|
47
85
|
@raw.hash
|
48
86
|
end
|
@@ -56,16 +94,65 @@ class UUID
|
|
56
94
|
alias_method :==, :eql?
|
57
95
|
|
58
96
|
def to_raw ; @raw ; end
|
59
|
-
|
60
|
-
|
61
|
-
|
97
|
+
|
98
|
+
# Returns a string containing a human-readable representation
|
99
|
+
# of this object
|
100
|
+
#
|
101
|
+
# @return [String]
|
102
|
+
#
|
103
|
+
def inspect
|
104
|
+
"#<#{self.class}:#{to_s}>"
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
# Get the UUID value as an integer
|
109
|
+
#
|
110
|
+
# @return [Integer] UUID value
|
111
|
+
#
|
112
|
+
def to_i
|
113
|
+
i, j = @raw.unpack('Q>Q>')
|
114
|
+
i * 2**64 + j
|
115
|
+
end
|
116
|
+
alias :to_int :to_i
|
117
|
+
|
118
|
+
|
119
|
+
# Get the UUID string representation
|
120
|
+
#
|
121
|
+
# @return [String] UUID string representation
|
122
|
+
#
|
123
|
+
def to_s
|
124
|
+
@raw.unpack('H8H4H4H4H12').join('-')
|
125
|
+
end
|
62
126
|
alias_method :to_str, :to_s
|
63
127
|
|
128
|
+
|
129
|
+
# Get the URI has a URN in UUID namespace
|
130
|
+
#
|
131
|
+
# @return [String] Uniform Resource Name
|
132
|
+
#
|
133
|
+
def to_uri
|
134
|
+
"urn:uuid:#{self}"
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
# Get the JSON represenation
|
139
|
+
#
|
140
|
+
# @return [String]
|
141
|
+
#
|
142
|
+
def to_json(*a)
|
143
|
+
self.to_s.to_json(*a)
|
144
|
+
end
|
145
|
+
|
146
|
+
|
64
147
|
# Sequel
|
65
148
|
def sql_literal(ds) ; '0x' + @raw.unpack('H32')[0] ; end
|
66
149
|
def to_blob ; Sequel.blob(@raw) ; end
|
67
150
|
|
68
|
-
|
151
|
+
|
152
|
+
# Nil/Empty UUID
|
69
153
|
NIL = UUID('00000000-0000-0000-0000-000000000000')
|
154
|
+
|
155
|
+
# UUID with all bit set.
|
156
|
+
# @note It is not a valid UUID but can be usefull
|
70
157
|
FFF = UUID('ffffffff-ffff-ffff-ffff-ffffffffffff')
|
71
158
|
end
|
metadata
CHANGED
@@ -1,16 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy-uuid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Stephane D'Alu
|
9
|
-
autorequire:
|
8
|
+
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
11
|
+
date: 2021-05-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: yard
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '13'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '13'
|
14
41
|
description: UUID library for Ruby
|
15
42
|
email:
|
16
43
|
- sdalu@sdalu.com
|
@@ -19,34 +46,27 @@ extensions: []
|
|
19
46
|
extra_rdoc_files: []
|
20
47
|
files:
|
21
48
|
- lib/uuid.rb
|
22
|
-
homepage: http://
|
23
|
-
licenses:
|
24
|
-
|
49
|
+
homepage: http://gitlab.com/sdalu/easy-uuid
|
50
|
+
licenses:
|
51
|
+
- MIT
|
52
|
+
metadata: {}
|
53
|
+
post_install_message:
|
25
54
|
rdoc_options: []
|
26
55
|
require_paths:
|
27
56
|
- lib
|
28
57
|
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
-
none: false
|
30
58
|
requirements:
|
31
|
-
- -
|
59
|
+
- - ">="
|
32
60
|
- !ruby/object:Gem::Version
|
33
61
|
version: '0'
|
34
|
-
segments:
|
35
|
-
- 0
|
36
|
-
hash: 1872846144021895192
|
37
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
-
none: false
|
39
63
|
requirements:
|
40
|
-
- -
|
64
|
+
- - ">="
|
41
65
|
- !ruby/object:Gem::Version
|
42
66
|
version: '0'
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
hash: 1872846144021895192
|
46
67
|
requirements: []
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
specification_version: 3
|
68
|
+
rubygems_version: 3.0.8
|
69
|
+
signing_key:
|
70
|
+
specification_version: 4
|
51
71
|
summary: UUID library for Ruby
|
52
72
|
test_files: []
|