ruby-ulid 0.6.1 → 0.8.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 +4 -4
- data/README.md +74 -106
- data/lib/ulid/crockford_base32.rb +17 -16
- data/lib/ulid/errors.rb +1 -0
- data/lib/ulid/monotonic_generator.rb +23 -16
- data/lib/ulid/utils.rb +99 -0
- data/lib/ulid/uuid.rb +62 -30
- data/lib/ulid/version.rb +1 -1
- data/lib/ulid.rb +115 -194
- data/sig/ulid.rbs +162 -117
- metadata +8 -8
- data/lib/ulid/ractor_unshareable_constants.rb +0 -12
data/sig/ulid.rbs
CHANGED
@@ -3,8 +3,6 @@ class ULID < Object
|
|
3
3
|
TIMESTAMP_ENCODED_LENGTH: 10
|
4
4
|
RANDOMNESS_ENCODED_LENGTH: 16
|
5
5
|
ENCODED_LENGTH: 26
|
6
|
-
TIMESTAMP_OCTETS_LENGTH: 6
|
7
|
-
RANDOMNESS_OCTETS_LENGTH: 10
|
8
6
|
OCTETS_LENGTH: 16
|
9
7
|
MAX_MILLISECONDS: 281474976710655
|
10
8
|
MAX_ENTROPY: 1208925819614629174706175
|
@@ -14,13 +12,12 @@ class ULID < Object
|
|
14
12
|
PATTERN_WITH_CROCKFORD_BASE32_SUBSET: Regexp
|
15
13
|
STRICT_PATTERN_WITH_CROCKFORD_BASE32_SUBSET: Regexp
|
16
14
|
SCANNING_PATTERN: Regexp
|
17
|
-
UUIDV4_PATTERN: Regexp
|
18
15
|
MIN: ULID
|
19
16
|
MAX: ULID
|
20
17
|
include Comparable
|
21
18
|
|
22
|
-
|
23
|
-
type moment = Time |
|
19
|
+
type milliseconds = Integer
|
20
|
+
type moment = Time | milliseconds
|
24
21
|
|
25
22
|
class Error < StandardError
|
26
23
|
end
|
@@ -34,84 +31,121 @@ class ULID < Object
|
|
34
31
|
class UnexpectedError < Error
|
35
32
|
end
|
36
33
|
|
37
|
-
|
38
|
-
|
34
|
+
class IrreversibleUUIDError < Error
|
35
|
+
end
|
36
|
+
|
37
|
+
module UUID
|
38
|
+
BASE_PATTERN: Regexp
|
39
|
+
V4_PATTERN: Regexp
|
40
|
+
|
41
|
+
def self.parse_any_to_int: (String) -> Integer
|
42
|
+
def self.parse_v4_to_int: (String) -> Integer
|
43
|
+
|
44
|
+
class Fields < Struct[Integer]
|
45
|
+
attr_accessor time_low: Integer
|
46
|
+
attr_accessor time_mid: Integer
|
47
|
+
attr_accessor time_hi_and_version: Integer
|
48
|
+
attr_accessor clock_seq_hi_and_res: Integer
|
49
|
+
attr_accessor clk_seq_low: Integer
|
50
|
+
attr_accessor node: Integer
|
51
|
+
def self.raw_from_octets: (octets) -> Fields
|
52
|
+
def self.forced_v4_from_octets: (octets) -> Fields
|
53
|
+
|
54
|
+
def values: -> Array[Integer]
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def initialize: (?time_low: Integer, ?time_mid: Integer, ?time_hi_and_version: Integer, ?clock_seq_hi_and_res: Integer, ?clk_seq_low: Integer, ?node: Integer) -> void
|
39
59
|
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Private module
|
63
|
+
module Utils
|
64
|
+
def self.encode_base32hex: (milliseconds: milliseconds, entropy: Integer) -> String
|
40
65
|
|
66
|
+
def self.current_milliseconds: -> milliseconds
|
67
|
+
|
68
|
+
def self.milliseconds_from_moment: (moment moment) -> milliseconds
|
69
|
+
|
70
|
+
def self.reasonable_entropy: -> Integer
|
71
|
+
|
72
|
+
def self.milliseconds_from_time: (Time time) -> milliseconds
|
73
|
+
|
74
|
+
def self.safe_get_class_name: (untyped object) -> String
|
75
|
+
|
76
|
+
def self.make_sharable_constants: (Module) -> void
|
77
|
+
|
78
|
+
def self.ractor_can_make_shareable_time?: -> bool
|
79
|
+
end
|
80
|
+
|
81
|
+
# Private module
|
82
|
+
module CrockfordBase32
|
41
83
|
ENCODING_STRING: String
|
42
84
|
CROCKFORD_TR_PATTERN: String
|
43
|
-
|
85
|
+
BASE32HEX_TR_PATTERN: String
|
44
86
|
VARIANT_TR_PATTERN: String
|
45
87
|
NORMALIZED_TR_PATTERN: String
|
46
88
|
|
47
|
-
# A private API. Should not be used in your code.
|
48
89
|
def self.encode: (Integer integer) -> String
|
49
90
|
|
50
|
-
# A private API. Should not be used in your code.
|
51
91
|
def self.decode: (String string) -> Integer
|
52
92
|
|
53
|
-
# A private API. Should not be used in your code.
|
54
93
|
def self.normalize: (String string) -> String
|
55
94
|
|
56
|
-
|
57
|
-
def self.from_n32: (String n32encoded) -> String
|
95
|
+
def self.from_base32hex: (String base32hex) -> String
|
58
96
|
end
|
59
97
|
|
60
98
|
class MonotonicGenerator
|
61
99
|
include MonitorMixin
|
62
100
|
|
63
|
-
# Returned value is `basically not` Thread-safety
|
101
|
+
# Returned value is `basically not` Thread-safety\
|
64
102
|
# If you want to keep Thread-safety, keep to call {#generate} only in same {#synchronize} block
|
65
103
|
#
|
66
104
|
# ```ruby
|
67
105
|
# generator.synchronize do
|
68
|
-
# generator.
|
106
|
+
# generator.last
|
69
107
|
# generator.inspect
|
70
108
|
# generator.generate
|
71
109
|
# end
|
72
110
|
# ```
|
73
|
-
attr_reader
|
111
|
+
attr_reader last: ULID | nil
|
74
112
|
|
75
|
-
#
|
76
|
-
def initialize: -> void
|
77
|
-
|
78
|
-
# See [How to keep `Sortable` even if in same timestamp](https://github.com/kachick/ruby-ulid#how-to-keep-sortable-even-if-in-same-timestamp)
|
113
|
+
# See [How to keep `Sortable` even if in same timestamp](https://github.com/kachick/ruby-ulid#how-to-keep-sortable-even-if-in-same-timestamp)\
|
79
114
|
# The `Thread-safety` is implemented with [Monitor](https://bugs.ruby-lang.org/issues/16255)
|
80
115
|
def generate: (?moment: moment) -> ULID
|
81
116
|
|
82
117
|
# Just providing similar api as `ULID.generate` and `ULID.encode` relation. No performance benefit exists in monotonic generator's one.
|
83
118
|
def encode: (?moment: moment) -> String
|
84
119
|
|
85
|
-
# Returned value is `basically not` Thread-safety
|
120
|
+
# Returned value is `basically not` Thread-safety\
|
86
121
|
# If you want to keep Thread-safety, keep to call {#generate} only in same {#synchronize} block
|
87
122
|
#
|
88
123
|
# ```ruby
|
89
124
|
# generator.synchronize do
|
90
|
-
# generator.
|
125
|
+
# generator.last
|
91
126
|
# generator.inspect
|
92
127
|
# generator.generate
|
93
128
|
# end
|
94
129
|
# ```
|
95
130
|
def inspect: -> String
|
96
131
|
alias to_s inspect
|
97
|
-
|
132
|
+
|
133
|
+
private
|
134
|
+
|
135
|
+
def initialize: -> void
|
136
|
+
|
137
|
+
def last=: (ULID?) -> void
|
98
138
|
end
|
99
139
|
|
100
140
|
interface _ToULID
|
101
141
|
def to_ulid: () -> ULID
|
102
142
|
end
|
103
143
|
|
104
|
-
type
|
105
|
-
type timestamp_octets = [Integer, Integer, Integer, Integer, Integer, Integer] | Array[Integer]
|
106
|
-
type randomness_octets = [Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer] | Array[Integer]
|
144
|
+
type octets = [Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer] | Array[Integer]
|
107
145
|
type period = Range[Time] | Range[nil] | Range[ULID]
|
108
146
|
|
109
147
|
@integer: Integer
|
110
148
|
@encoded: String
|
111
|
-
@timestamp: String?
|
112
|
-
@randomness: String?
|
113
|
-
@inspect: String?
|
114
|
-
@time: Time?
|
115
149
|
|
116
150
|
# Retuns a ULID
|
117
151
|
#
|
@@ -149,17 +183,13 @@ class ULID < Object
|
|
149
183
|
#
|
150
184
|
def self.generate: (?moment: moment, ?entropy: Integer) -> ULID
|
151
185
|
|
152
|
-
# Retuns encoded and normalzied String
|
153
|
-
# It has same arguments signatures as `.generate
|
154
|
-
#
|
155
|
-
# NOTE: Difference of ULID#encode, returned String is NOT frozen.
|
186
|
+
# Retuns encoded and normalzied String.\
|
187
|
+
# It has same arguments signatures as `.generate`\
|
188
|
+
# So can be used for just ID creation usecases without needless object creation.
|
156
189
|
#
|
157
190
|
def self.encode: (?moment: moment, ?entropy: Integer) -> String
|
158
191
|
|
159
|
-
#
|
160
|
-
def self.encode_n32: (milliseconds: Integer, entropy: Integer) -> String
|
161
|
-
|
162
|
-
# Shorthand of `ULID.generate(moment: Time)`
|
192
|
+
# Shorthand of `ULID.generate(moment: Time)`\
|
163
193
|
# See also [ULID.generate](https://kachick.github.io/ruby-ulid/ULID.html#generate-class_method)
|
164
194
|
#
|
165
195
|
# ```ruby
|
@@ -173,13 +203,8 @@ class ULID < Object
|
|
173
203
|
# ```
|
174
204
|
def self.at: (Time time) -> ULID
|
175
205
|
|
176
|
-
#
|
177
|
-
|
178
|
-
|
179
|
-
# A private API. Should not be used in your code.
|
180
|
-
def self.milliseconds_from_moment: (moment moment) -> Integer
|
181
|
-
|
182
|
-
# `ULID` can be element of the `Range`. If you generated the IDs in monotonic generator, ID based filtering is easy and reliable
|
206
|
+
# `ULID` can be element of the `Range`.\
|
207
|
+
# If you generated the IDs in monotonic generator, ID based filtering is easy and reliable
|
183
208
|
#
|
184
209
|
# ```ruby
|
185
210
|
# include_end = ulid1..ulid2
|
@@ -227,16 +252,18 @@ class ULID < Object
|
|
227
252
|
# ```
|
228
253
|
def self.parse: (_ToStr string) -> ULID
|
229
254
|
|
230
|
-
|
255
|
+
type time_in = String | Integer | nil
|
256
|
+
|
257
|
+
# Return Time instance from encoded String.\
|
231
258
|
# See also `ULID.encode` for similar purpose.
|
232
259
|
#
|
233
|
-
# NOTE: Difference of ULID#to_time, returned Time is NOT frozen.
|
234
|
-
#
|
235
260
|
# ```ruby
|
236
261
|
# time = ULID.decode_time('01ARZ3NDEKTSV4RRFFQ69G5FAV')
|
237
262
|
# #=> 2016-07-30 23:54:10.259 UTC
|
263
|
+
# ULID.decode_time('01ARZ3NDEKTSV4RRFFQ69G5FAV', in: '+09:00')
|
264
|
+
# #=> 2016-07-31 08:54:10.259 +0900
|
238
265
|
# ```
|
239
|
-
def self.decode_time: (_ToStr string, ?in:
|
266
|
+
def self.decode_time: (_ToStr string, ?in: time_in) -> Time
|
240
267
|
|
241
268
|
# Get ULID instance from unnormalized String that encoded in Crockford's base32.
|
242
269
|
#
|
@@ -253,18 +280,35 @@ class ULID < Object
|
|
253
280
|
# See also [ulid/spec#57](https://github.com/ulid/spec/pull/57) and [ulid/spec#3](https://github.com/ulid/spec/issues/3)
|
254
281
|
def self.parse_variant_format: (_ToStr string) -> ULID
|
255
282
|
|
283
|
+
# Load a UUID-like string without checking version and variants.
|
284
|
+
#
|
256
285
|
# ```ruby
|
257
|
-
#
|
258
|
-
#
|
286
|
+
# ULID.from_uuidish('123e4567-e89b-12d3-a456-426614174000')
|
287
|
+
# #=> ULID(2605-08-20 10:28:29.979 UTC: 0J7S2PFT4V2B9T8NJ2CRA1EG00)
|
288
|
+
# ```
|
259
289
|
#
|
260
|
-
#
|
261
|
-
|
290
|
+
# See also [ULID.from_uuidv4]
|
291
|
+
def self.from_uuidish: (String uuidish) -> ULID
|
292
|
+
|
293
|
+
# Load a UUIDv4 string with checking version and variants.
|
294
|
+
#
|
295
|
+
# ```ruby
|
296
|
+
# ULID.from_uuidv4('0983d0a2-ff15-4d83-8f37-7dd945b5aa39')
|
262
297
|
# #=> ULID(2301-07-10 00:28:28.821 UTC: 09GF8A5ZRN9P1RYDVXV52VBAHS)
|
263
|
-
#
|
298
|
+
# ULID.from_uuidv4('123e4567-e89b-12d3-a456-426614174000')
|
299
|
+
# #=> ULID::ParserError
|
264
300
|
# ```
|
265
301
|
#
|
266
|
-
# See also [
|
302
|
+
# See also [ULID.from_uuidish]
|
267
303
|
def self.from_uuidv4: (String uuid) -> ULID
|
304
|
+
|
305
|
+
# Load integer as ULID
|
306
|
+
#
|
307
|
+
# ```ruby
|
308
|
+
# ulid = ULID.parse('01GTXYCWNDKRYH14DBZ77TRSD7')
|
309
|
+
# ULID.from_integer(ulid.to_i)
|
310
|
+
# #=> ULID(2023-03-07 11:48:07.469 UTC: 01GTXYCWNDKRYH14DBZ77TRSD7)
|
311
|
+
# ```
|
268
312
|
def self.from_integer: (Integer integer) -> ULID
|
269
313
|
|
270
314
|
# Returns termination values for ULID spec.
|
@@ -325,7 +369,8 @@ class ULID < Object
|
|
325
369
|
# # ULID(2665-03-16 14:50:22.724 UTC: 0KYFW9DWM4CEGFNTAC6YFAVVJ6)]
|
326
370
|
# ```
|
327
371
|
#
|
328
|
-
# You can specify a range object for the timestamp restriction
|
372
|
+
# You can specify a range object for the timestamp restriction.\
|
373
|
+
# See also [ULID.range](https://kachick.github.io/ruby-ulid/ULID.html#range-class_method)
|
329
374
|
#
|
330
375
|
# ```ruby
|
331
376
|
# ulid1 = ULID.parse('01F4A5Y1YAQCYAYCTC7GRMJ9AA') #=> ULID(2021-04-27 17:27:22.826 UTC: 01F4A5Y1YAQCYAYCTC7GRMJ9AA)
|
@@ -386,19 +431,6 @@ class ULID < Object
|
|
386
431
|
def self.valid_as_variant_format?: (_ToStr string) -> bool
|
387
432
|
| (untyped) -> false
|
388
433
|
|
389
|
-
# DEPRECATED Use valid_as_variant_format? instead
|
390
|
-
#
|
391
|
-
# Returns `true` if it is normalized string.
|
392
|
-
# Basically the difference of normalized? is to accept downcase or not. This returns true for downcased ULIDs.
|
393
|
-
#
|
394
|
-
# ```ruby
|
395
|
-
# ULID.valid?(ULID.generate.to_s.downcase) #=> true
|
396
|
-
# ```
|
397
|
-
#
|
398
|
-
# See also [ulid/spec#57](https://github.com/ulid/spec/pull/57) and [ulid/spec#3](https://github.com/ulid/spec/issues/3)
|
399
|
-
def self.valid?: (_ToStr string) -> bool
|
400
|
-
| (untyped) -> false
|
401
|
-
|
402
434
|
# Returns parsed ULIDs from given String for rough operations.
|
403
435
|
#
|
404
436
|
# ```ruby
|
@@ -440,7 +472,8 @@ class ULID < Object
|
|
440
472
|
# ```
|
441
473
|
def self.scan: (_ToStr string) -> Enumerator[self, singleton(ULID)]
|
442
474
|
| (_ToStr string) { (ULID ulid) -> void } -> singleton(ULID)
|
443
|
-
|
475
|
+
|
476
|
+
# Returns nil if given object is not a ULID
|
444
477
|
def self.try_convert: (_ToULID) -> ULID
|
445
478
|
| (untyped) -> nil
|
446
479
|
|
@@ -450,14 +483,16 @@ class ULID < Object
|
|
450
483
|
# ulid.milliseconds #=> 1619544442826
|
451
484
|
# ```
|
452
485
|
attr_reader milliseconds: Integer
|
486
|
+
|
453
487
|
attr_reader entropy: Integer
|
454
488
|
|
489
|
+
# Private api. (Actually defined protected visibility)
|
490
|
+
attr_reader encoded: String
|
491
|
+
|
455
492
|
# ```ruby
|
456
493
|
# ulid = ULID.generate
|
457
494
|
# #=> ULID(2021-04-27 17:27:22.826 UTC: 01F4A5Y1YAQCYAYCTC7GRMJ9AA)
|
458
495
|
# ulid.encode #=> "01F4A5Y1YAQCYAYCTC7GRMJ9AA"
|
459
|
-
# ulid.encode.frozen? #=> true
|
460
|
-
# ulid.encode.equal?(ulid.to_s) #=> true
|
461
496
|
# ```
|
462
497
|
def encode: -> String
|
463
498
|
alias to_s encode
|
@@ -480,7 +515,7 @@ class ULID < Object
|
|
480
515
|
# #=> true
|
481
516
|
# ```
|
482
517
|
#
|
483
|
-
# To be precise, this sorting unaffected with `case sensitive or not` and might handle [ulid/spec#57](https://github.com/ulid/spec/pull/57) in future
|
518
|
+
# To be precise, this sorting unaffected with `case sensitive or not` and might handle [ulid/spec#57](https://github.com/ulid/spec/pull/57) in future.\
|
484
519
|
# So preferable than `lexicographically sortable` in actual case.
|
485
520
|
#
|
486
521
|
# This returns -1 | 0 | 1 for ULIDs. However defined as returning Integer. It is caused on ruby/rbs current definition.
|
@@ -490,6 +525,8 @@ class ULID < Object
|
|
490
525
|
def <=>: (ULID other) -> Integer
|
491
526
|
| (untyped other) -> nil
|
492
527
|
|
528
|
+
# Returns human readable strings that used by Kernel.#p
|
529
|
+
#
|
493
530
|
# ```ruby
|
494
531
|
# ulid = ULID.generate
|
495
532
|
# ulid.inspect #=> "ULID(2021-04-27 17:27:22.826 UTC: 01F4A5Y1YAQCYAYCTC7GRMJ9AA)"
|
@@ -504,7 +541,7 @@ class ULID < Object
|
|
504
541
|
| (untyped other) -> false
|
505
542
|
alias == eql?
|
506
543
|
|
507
|
-
# Return `true` for same value of ULID, variant formats of strings, same Time in ULID precision(msec)
|
544
|
+
# Return `true` for same value of ULID, variant formats of strings, same Time in ULID precision(msec).\
|
508
545
|
# Do not consider integer, octets and partial strings, then returns `false`.
|
509
546
|
#
|
510
547
|
# ```ruby
|
@@ -524,12 +561,15 @@ class ULID < Object
|
|
524
561
|
| (untyped other) -> false
|
525
562
|
|
526
563
|
# ```ruby
|
527
|
-
#
|
528
|
-
# #=>
|
529
|
-
#
|
564
|
+
# ULID.parse('01F4A5Y1YAQCYAYCTC7GRMJ9AA').to_time
|
565
|
+
# #=> 2021-04-27 17:27:22.826 UTC
|
566
|
+
# ULID.parse('01F4A5Y1YAQCYAYCTC7GRMJ9AA').to_time(in: '+09:00')
|
567
|
+
# #=> 2021-04-28 02:27:22.826 +0900
|
530
568
|
# ```
|
531
|
-
def to_time: -> Time
|
569
|
+
def to_time: (?in: time_in) -> Time
|
532
570
|
|
571
|
+
# Returns timestamp(prefix) part of encoded ULID
|
572
|
+
#
|
533
573
|
# ```ruby
|
534
574
|
# ulid = ULID.generate
|
535
575
|
# #=> ULID(2021-04-27 17:27:22.826 UTC: 01F4A5Y1YAQCYAYCTC7GRMJ9AA)
|
@@ -537,6 +577,8 @@ class ULID < Object
|
|
537
577
|
# ```
|
538
578
|
def timestamp: -> String
|
539
579
|
|
580
|
+
# Returns randomness(suffix) part of encoded ULID
|
581
|
+
#
|
540
582
|
# ```ruby
|
541
583
|
# ulid = ULID.generate
|
542
584
|
# #=> ULID(2021-04-27 17:27:22.826 UTC: 01F4A5Y1YAQCYAYCTC7GRMJ9AA)
|
@@ -544,27 +586,15 @@ class ULID < Object
|
|
544
586
|
# ```
|
545
587
|
def randomness: -> String
|
546
588
|
|
547
|
-
#
|
548
|
-
# Because the returning values are not fixed.
|
549
|
-
def patterns: -> Hash[Symbol, Regexp | String]
|
550
|
-
def octets: -> full_octets
|
551
|
-
def timestamp_octets: -> timestamp_octets
|
552
|
-
def randomness_octets: -> randomness_octets
|
553
|
-
|
554
|
-
# ```ruby
|
555
|
-
# # Currently experimental feature, so needed to load the extension.
|
556
|
-
# require 'ulid/uuid'
|
589
|
+
# Returns 6 + 10 octets(bytes) represented with Array[Integer]
|
557
590
|
#
|
558
|
-
#
|
559
|
-
# ulid = ULID.
|
560
|
-
# #=>
|
561
|
-
# ulid.to_uuidv4 #=> "0983d0a2-ff15-4d83-8f37-7dd945b5aa39"
|
591
|
+
# ```ruby
|
592
|
+
# ulid = ULID.parse('01F4A5Y1YAQCYAYCTC7GRMJ9AA')
|
593
|
+
# ulid.octets #=> [1, 121, 20, 95, 7, 202, 187, 60, 175, 51, 76, 60, 49, 73, 37, 74]
|
562
594
|
# ```
|
563
|
-
|
564
|
-
# See also [Why this is experimental?](https://github.com/kachick/ruby-ulid/issues/76)
|
565
|
-
def to_uuidv4: -> String
|
595
|
+
def octets: -> octets
|
566
596
|
|
567
|
-
# Returns next(successor) ULID
|
597
|
+
# Returns next(successor) ULID.\
|
568
598
|
# Especially `ULID#succ` makes it possible `Range[ULID]#each`.
|
569
599
|
#
|
570
600
|
# NOTE: But basically `Range[ULID]#each` should not be used, incrementing 128 bits IDs are not reasonable operation in most case
|
@@ -589,38 +619,53 @@ class ULID < Object
|
|
589
619
|
#
|
590
620
|
# See also [ULID#succ](https://kachick.github.io/ruby-ulid/ULID.html#succ-instance_method)
|
591
621
|
def pred: -> ULID?
|
592
|
-
def freeze: -> self
|
593
622
|
|
594
|
-
# A private API. Should not be used in your code.
|
595
623
|
def marshal_dump: -> Integer
|
596
624
|
|
597
|
-
# A private API. Should not be used in your code.
|
598
625
|
def marshal_load: (Integer integer) -> void
|
599
626
|
|
600
627
|
# Returns `self`
|
601
628
|
def to_ulid: -> self
|
602
629
|
|
603
|
-
#
|
604
|
-
|
605
|
-
|
606
|
-
#
|
607
|
-
#
|
608
|
-
|
609
|
-
|
610
|
-
|
630
|
+
# Generate a UUID-like string that does not set the version and variants field.\
|
631
|
+
# It means wrong in UUIDv4 spec, but reversible
|
632
|
+
#
|
633
|
+
# ```ruby
|
634
|
+
# ulid = ULID.parse('01GTXYCWNDKRYH14DBZ77TRSD7')
|
635
|
+
# ulid.to_uuidish #-> '0186bbe6-72ad-9e3d-1091-abf9cfac65a7'
|
636
|
+
# ULID.from_uuidish(ulid.to_uuidish) #=> ULID(2023-03-07 11:48:07.469 UTC: 01GTXYCWNDKRYH14DBZ77TRSD7)
|
637
|
+
# ```
|
638
|
+
#
|
639
|
+
# See also [ULID.from_uuidish], [ULID#to_uuidv4], [ulid/spec#64](https://github.com/ulid/spec/issues/64)
|
640
|
+
def to_uuidish: -> String
|
611
641
|
|
612
|
-
#
|
613
|
-
|
642
|
+
# Generate a UUIDv4-like string that sets the version and variants field.\
|
643
|
+
# It may conform to the UUID specification, but it is irreversible with the source ULID and may conflict with some other ULIDs.\
|
644
|
+
# You can specify `force` keyword argument to turn off the irreversible check
|
645
|
+
#
|
646
|
+
# ```ruby
|
647
|
+
# uuid = '0983d0a2-ff15-4d83-8f37-7dd945b5aa39'
|
648
|
+
# ulid = ULID.from_uuidv4(uuid)
|
649
|
+
# ulid.to_uuidv4 #=> 0983d0a2-ff15-4d83-8f37-7dd945b5aa39
|
650
|
+
# ```
|
651
|
+
#
|
652
|
+
# ```ruby
|
653
|
+
# ulid = ULID.from_uuidish('0186bbe6-72ad-9e3d-1091-abf9cfac65a7')
|
654
|
+
# ulid.to_uuidv4 #=> ULID::IrreversibleUUIDError
|
655
|
+
# ulid.to_uuidv4(force: true) #=> '0186bbe6-72ad-4e3d-9091-abf9cfac65a7'
|
656
|
+
# ```
|
657
|
+
#
|
658
|
+
# See also [ULID.from_uuidv4], [ULID#to_uuidish], [ulid/spec#64](https://github.com/ulid/spec/issues/64)
|
659
|
+
def to_uuidv4: (?force: boolish) -> String
|
614
660
|
|
615
|
-
#
|
616
|
-
def
|
661
|
+
# Returns same ID with different Ruby object.
|
662
|
+
def dup: -> ULID
|
617
663
|
|
618
|
-
#
|
619
|
-
|
664
|
+
# Returns same ID with different Ruby object.::Array::_Pattern\
|
665
|
+
# `freeze` keyarg is just provided for standardized API with `Object#clone`, however it accepts only `true`.
|
666
|
+
def clone: (?freeze: true) -> ULID
|
620
667
|
|
621
|
-
|
622
|
-
def initialize: (milliseconds: Integer, entropy: Integer, integer: Integer, encoded: String) -> void
|
668
|
+
private
|
623
669
|
|
624
|
-
|
625
|
-
def cache_all_instance_variables: -> void
|
670
|
+
def initialize: (milliseconds: milliseconds, entropy: Integer, integer: Integer, encoded: String) -> void
|
626
671
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-ulid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenichi Kamiya
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: " generator, optional monotonicity, parser and tools for ULID (RBS
|
14
14
|
included)\n"
|
@@ -25,7 +25,7 @@ files:
|
|
25
25
|
- lib/ulid/crockford_base32.rb
|
26
26
|
- lib/ulid/errors.rb
|
27
27
|
- lib/ulid/monotonic_generator.rb
|
28
|
-
- lib/ulid/
|
28
|
+
- lib/ulid/utils.rb
|
29
29
|
- lib/ulid/uuid.rb
|
30
30
|
- lib/ulid/version.rb
|
31
31
|
- sig/ulid.rbs
|
@@ -38,7 +38,7 @@ metadata:
|
|
38
38
|
source_code_uri: https://github.com/kachick/ruby-ulid
|
39
39
|
bug_tracker_uri: https://github.com/kachick/ruby-ulid/issues
|
40
40
|
rubygems_mfa_required: 'true'
|
41
|
-
post_install_message:
|
41
|
+
post_install_message:
|
42
42
|
rdoc_options: []
|
43
43
|
require_paths:
|
44
44
|
- lib
|
@@ -46,15 +46,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
49
|
+
version: '3.1'
|
50
50
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
requirements: []
|
56
|
-
rubygems_version: 3.
|
57
|
-
signing_key:
|
56
|
+
rubygems_version: 3.4.6
|
57
|
+
signing_key:
|
58
58
|
specification_version: 4
|
59
59
|
summary: ULID manipulation library
|
60
60
|
test_files: []
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# coding: us-ascii
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
class ULID
|
5
|
-
min = parse('00000000000000000000000000').freeze
|
6
|
-
max = parse('7ZZZZZZZZZZZZZZZZZZZZZZZZZ').freeze
|
7
|
-
|
8
|
-
ractor_can_make_shareable_time = RUBY_VERSION >= '3.1'
|
9
|
-
|
10
|
-
MIN = ractor_can_make_shareable_time ? Ractor.make_shareable(min) : min
|
11
|
-
MAX = ractor_can_make_shareable_time ? Ractor.make_shareable(max) : max
|
12
|
-
end
|