ruby-ulid 0.1.5 → 0.2.2

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: 01dca4f18f5bb3168b135847b6a1171d00a6ceb03b1d2ef68b6df212975cafc1
4
- data.tar.gz: e1b0cb033ded88591d4817395507f517f46b7d3dd3d3a72021a216dcfef09d12
3
+ metadata.gz: cea320f797b834d5a0f246db9920a9453a6d229728b428590e2f99dd275c8fe9
4
+ data.tar.gz: e703ca1896a7ee4155b1362cffdfaf9499e4ae32073cd440c50750d4e9cc9c1a
5
5
  SHA512:
6
- metadata.gz: c9c1a60687c05cfa99ce37f4e692938bff96dd15afa6b0adce40de5b897303b6e57301f069299c06d726bdd7a425e1ed581b7b60e15efc88d69abc417c577005
7
- data.tar.gz: 71f333e7a6d6169f346b0e8fba65c9413fa24c32ce6799623e11b789544fb057fa0f67f83ed94a896cbac9df123ee4f9c9598735953217bd6fec332df659ee9f
6
+ metadata.gz: b9d0436d98095dd0084675d87a6605848f6c7ee14d65724ce5bd9229945ffc17a3b7e1efaf9a295baeaeac11782c9fc63bc901149cfa58d96046e334d5d19067
7
+ data.tar.gz: f7e016a4ca3d859f8469b5281d9f5581ffe6c0fdde737c554c627f7862461701844e46e4513ce09748e1cdf3fa4b8da2607a8d3267f74c64ae4a257ae54d6e78
data/README.md CHANGED
@@ -10,8 +10,9 @@ Also providing [ruby/rbs](https://github.com/ruby/rbs) signature files.
10
10
 
11
11
  ![ULIDlogo](https://raw.githubusercontent.com/kachick/ruby-ulid/main/logo.png)
12
12
 
13
- ![Build Status](https://github.com/kachick/ruby-ulid/actions/workflows/test_behaviors.yml/badge.svg?branch=main)
14
- [![Gem Version](https://badge.fury.io/rb/ruby-ulid.png)](http://badge.fury.io/rb/ruby-ulid)
13
+ [![Build Status](https://github.com/kachick/ruby-ulid/actions/workflows/test_behaviors.yml/badge.svg?branch=main)](https://github.com/kachick/ruby-ulid/actions/workflows/test_behaviors.yml/?branch=main)
14
+ [![Gem Version](https://badge.fury.io/rb/ruby-ulid.svg)](http://badge.fury.io/rb/ruby-ulid)
15
+ [![Visual Studio Code](https://img.shields.io/badge/Visual%20Studio%20Code-0078d7.svg?style=for-the-badge&logo=visual-studio-code&logoColor=white)](https://github.dev/kachick/ruby-ulid)
15
16
 
16
17
  ## Universally Unique Lexicographically Sortable Identifier
17
18
 
@@ -37,7 +38,7 @@ Instead, herein is proposed ULID:
37
38
 
38
39
  ### Install
39
40
 
40
- Require Ruby 2.6 or later
41
+ Require Ruby 2.7 or later
41
42
 
42
43
  This command will install the latest version into your environment
43
44
 
@@ -49,7 +50,7 @@ Should be installed!
49
50
  Add this line to your application/library's `Gemfile` is needed in basic use-case
50
51
 
51
52
  ```ruby
52
- gem 'ruby-ulid', '>= 0.1.5', '< 0.2.0'
53
+ gem 'ruby-ulid', '~> 0.2.2'
53
54
  ```
54
55
 
55
56
  ### Generator and Parser
@@ -170,8 +171,7 @@ exclude_end = ULID.range(time1...time2) #=> The end of `Range[ULID]` will be the
170
171
 
171
172
  # Below patterns are acceptable
172
173
  pinpointing = ULID.range(time1..time1) #=> This will match only for all IDs in `time1`
173
- # until_the_end = ULID.range(..time1) #=> This will match only for all IDs upto `time1` (The `nil` starting `Range` can be used since Ruby 2.7)
174
- until_the_end = ULID.range(ULID.min.to_time..time1) #=> This is same as above for Ruby 2.6
174
+ until_the_end = ULID.range(..time1) #=> This will match only for all IDs upto `time1`
175
175
  until_the_ulid_limit = ULID.range(time1..) # This will match only for all IDs from `time1` to max value of the ULID limit
176
176
 
177
177
  # So you can use the generated range objects as below
@@ -401,7 +401,7 @@ So you can replace the code as below
401
401
  +ULID.generate.to_s
402
402
  ```
403
403
 
404
- NOTE: It had crucial issue for handling precision, in version before `1.3.0`, when you extract timestamps from old generated ULIDs, it might be not accurate value.
404
+ NOTE: In version before `1.3.0`, timestamps might not be correct value.
405
405
 
406
406
  1. [Sort order does not respect millisecond ordering](https://github.com/rafaelsales/ulid/issues/22)
407
407
  1. [Fixed in this PR](https://github.com/rafaelsales/ulid/pull/23)
@@ -425,11 +425,12 @@ Major methods can be replaced as below.
425
425
  +ULID.max(time).to_s
426
426
  ```
427
427
 
428
- NOTE: It is still having precision issue similar as `ulid gem` in the both generator and parser. I sent PRs.
428
+ NOTE: In version before `1.0.2`, timestamps might not be correct value.
429
429
 
430
430
  1. [Parsed time object has more than milliseconds](https://github.com/abachman/ulid-ruby/issues/3)
431
431
  1. [Fix to handle timestamp precision in parser](https://github.com/abachman/ulid-ruby/pull/5)
432
432
  1. [Fix to handle timestamp precision in generator](https://github.com/abachman/ulid-ruby/pull/4)
433
+ 1. [Released in 1.0.2](https://github.com/abachman/ulid-ruby/compare/v1.0.0...v1.0.2)
433
434
 
434
435
  ### Compare performance with them
435
436
 
data/lib/ruby-ulid.rb ADDED
@@ -0,0 +1,6 @@
1
+ # coding: us-ascii
2
+ # frozen_string_literal: true
3
+
4
+ # Copyright (C) 2021 Kenichi Kamiya
5
+
6
+ require_relative 'ulid'
data/lib/ulid/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  class ULID
5
- VERSION = '0.1.5'
5
+ VERSION = '0.2.2'
6
6
  end
data/lib/ulid.rb CHANGED
@@ -208,11 +208,7 @@ class ULID
208
208
  def self.floor(time)
209
209
  raise ArgumentError, 'ULID.floor takes only `Time` instance' unless Time === time
210
210
 
211
- if RUBY_VERSION >= '2.7'
212
- time.floor(3)
213
- else
214
- Time.at(0, milliseconds_from_time(time), :millisecond)
215
- end
211
+ time.floor(3)
216
212
  end
217
213
 
218
214
  # @api private
@@ -312,8 +308,19 @@ class ULID
312
308
  private_class_method def self.safe_get_class_name(object)
313
309
  fallback = 'UnknownObject'
314
310
 
311
+ # This class getter implementation used https://github.com/rspec/rspec-support/blob/4ad8392d0787a66f9c351d9cf6c7618e18b3d0f2/lib/rspec/support.rb#L83-L89 as a reference, thank you!
312
+ # ref: https://twitter.com/_kachick/status/1400064896759304196
313
+ klass = (
314
+ begin
315
+ object.class
316
+ rescue NoMethodError
317
+ singleton_class = class << object; self; end
318
+ singleton_class.ancestors.detect { |ancestor| !ancestor.equal?(singleton_class) }
319
+ end
320
+ )
321
+
315
322
  begin
316
- name = String.try_convert(object.class.name)
323
+ name = String.try_convert(klass.name)
317
324
  rescue Exception
318
325
  fallback
319
326
  else
@@ -363,7 +370,11 @@ class ULID
363
370
  def to_i
364
371
  @integer
365
372
  end
366
- alias_method :hash, :to_i
373
+
374
+ # @return [Integer]
375
+ def hash
376
+ [ULID, @integer].hash
377
+ end
367
378
 
368
379
  # @return [Integer, nil]
369
380
  def <=>(other)
@@ -395,13 +406,7 @@ class ULID
395
406
 
396
407
  # @return [Time]
397
408
  def to_time
398
- @time ||= begin
399
- if RUBY_VERSION >= '2.7'
400
- Time.at(0, @milliseconds, :millisecond, in: 'UTC').freeze
401
- else
402
- Time.at(0, @milliseconds, :millisecond).utc.freeze
403
- end
404
- end
409
+ @time ||= Time.at(0, @milliseconds, :millisecond, in: 'UTC').freeze
405
410
  end
406
411
 
407
412
  # @return [Array(Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer)]
data/sig/ulid.rbs CHANGED
@@ -46,13 +46,13 @@ class ULID < Object
46
46
  STANDARD_BY_VARIANT: Hash[String, String]
47
47
  VARIANT_PATTERN: Regexp
48
48
 
49
- # A pribate API. Should not be used in your code.
49
+ # A private API. Should not be used in your code.
50
50
  def self.encode: (Integer integer) -> String
51
51
 
52
- # A pribate API. Should not be used in your code.
52
+ # A private API. Should not be used in your code.
53
53
  def self.decode: (String string) -> Integer
54
54
 
55
- # A pribate API. Should not be used in your code.
55
+ # A private API. Should not be used in your code.
56
56
  def self.normalize: (String string) -> String
57
57
  end
58
58
 
@@ -71,7 +71,7 @@ class ULID < Object
71
71
  # ```
72
72
  attr_reader prev: ULID | nil
73
73
 
74
- # A pribate API. Should not be used in your code.
74
+ # A private API. Should not be used in your code.
75
75
  def initialize: -> void
76
76
 
77
77
  # 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)
@@ -159,10 +159,10 @@ class ULID < Object
159
159
  # ```
160
160
  def self.at: (Time time) -> ULID
161
161
 
162
- # A pribate API. Should not be used in your code.
162
+ # A private API. Should not be used in your code.
163
163
  def self.current_milliseconds: -> Integer
164
164
 
165
- # A pribate API. Should not be used in your code.
165
+ # A private API. Should not be used in your code.
166
166
  def self.milliseconds_from_moment: (moment moment) -> Integer
167
167
 
168
168
  # `ULID` can be element of the `Range`. If you generated the IDs in monotonic generator, ID based filtering is easy and reliable
@@ -185,8 +185,7 @@ class ULID < Object
185
185
  #
186
186
  # # Below patterns are acceptable
187
187
  # pinpointing = ULID.range(time1..time1) #=> This will match only for all IDs in `time1`
188
- # until_the_end = ULID.range(..time1) #=> This will match only for all IDs upto `time1` (The `nil` starting `Range` can be used since Ruby 2.7)
189
- # until_the_end = ULID.range(ULID.min.to_time..time1) #=> This is same as above for Ruby 2.6
188
+ # until_the_end = ULID.range(..time1) #=> This will match only for all IDs upto `time1`
190
189
  # until_the_ulid_limit = ULID.range(time1..) # This will match only for all IDs from `time1` to max value of the ULID limit
191
190
  #
192
191
  # # So you can use the generated range objects as below
@@ -507,10 +506,10 @@ class ULID < Object
507
506
  def pred: -> ULID?
508
507
  def freeze: -> self
509
508
 
510
- # A pribate API. Should not be used in your code.
509
+ # A private API. Should not be used in your code.
511
510
  def marshal_dump: -> Integer
512
511
 
513
- # A pribate API. Should not be used in your code.
512
+ # A private API. Should not be used in your code.
514
513
  def marshal_load: (Integer integer) -> void
515
514
 
516
515
  # Returns `self`
@@ -525,21 +524,21 @@ class ULID < Object
525
524
 
526
525
  private
527
526
 
528
- # A pribate API. Should not be used in your code.
527
+ # A private API. Should not be used in your code.
529
528
  def self.new: (milliseconds: Integer, entropy: Integer, integer: Integer) -> self
530
529
 
531
- # A pribate API. Should not be used in your code.
530
+ # A private API. Should not be used in your code.
532
531
  def self.reasonable_entropy: -> Integer
533
532
 
534
- # A pribate API. Should not be used in your code.
533
+ # A private API. Should not be used in your code.
535
534
  def self.milliseconds_from_time: (Time time) -> Integer
536
535
 
537
- # A pribate API. Should not be used in your code.
536
+ # A private API. Should not be used in your code.
538
537
  def self.safe_get_class_name: (untyped object) -> String
539
538
 
540
- # A pribate API. Should not be used in your code.
539
+ # A private API. Should not be used in your code.
541
540
  def initialize: (milliseconds: Integer, entropy: Integer, integer: Integer) -> void
542
541
 
543
- # A pribate API. Should not be used in your code.
542
+ # A private API. Should not be used in your code.
544
543
  def cache_all_instance_variables: -> void
545
544
  end
metadata CHANGED
@@ -1,289 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-ulid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.2
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: 2021-05-26 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: test-unit
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 3.4.1
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '4.0'
23
- type: :development
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: 3.4.1
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '4.0'
33
- - !ruby/object:Gem::Dependency
34
- name: irb
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- version: 1.3.5
40
- - - "<"
41
- - !ruby/object:Gem::Version
42
- version: '2.0'
43
- type: :development
44
- prerelease: false
45
- version_requirements: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - ">="
48
- - !ruby/object:Gem::Version
49
- version: 1.3.5
50
- - - "<"
51
- - !ruby/object:Gem::Version
52
- version: '2.0'
53
- - !ruby/object:Gem::Dependency
54
- name: irb-power_assert
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - '='
58
- - !ruby/object:Gem::Version
59
- version: 0.0.2
60
- type: :development
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - '='
65
- - !ruby/object:Gem::Version
66
- version: 0.0.2
67
- - !ruby/object:Gem::Dependency
68
- name: warning
69
- requirement: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- version: 1.2.0
74
- - - "<"
75
- - !ruby/object:Gem::Version
76
- version: '2.0'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: 1.2.0
84
- - - "<"
85
- - !ruby/object:Gem::Version
86
- version: '2.0'
87
- - !ruby/object:Gem::Dependency
88
- name: rbs
89
- requirement: !ruby/object:Gem::Requirement
90
- requirements:
91
- - - ">="
92
- - !ruby/object:Gem::Version
93
- version: 1.2.0
94
- - - "<"
95
- - !ruby/object:Gem::Version
96
- version: '2.0'
97
- type: :development
98
- prerelease: false
99
- version_requirements: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: 1.2.0
104
- - - "<"
105
- - !ruby/object:Gem::Version
106
- version: '2.0'
107
- - !ruby/object:Gem::Dependency
108
- name: rake
109
- requirement: !ruby/object:Gem::Requirement
110
- requirements:
111
- - - ">="
112
- - !ruby/object:Gem::Version
113
- version: 13.0.3
114
- - - "<"
115
- - !ruby/object:Gem::Version
116
- version: '20.0'
117
- type: :development
118
- prerelease: false
119
- version_requirements: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: 13.0.3
124
- - - "<"
125
- - !ruby/object:Gem::Version
126
- version: '20.0'
127
- - !ruby/object:Gem::Dependency
128
- name: benchmark-ips
129
- requirement: !ruby/object:Gem::Requirement
130
- requirements:
131
- - - ">="
132
- - !ruby/object:Gem::Version
133
- version: 2.9.1
134
- - - "<"
135
- - !ruby/object:Gem::Version
136
- version: '3'
137
- type: :development
138
- prerelease: false
139
- version_requirements: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- version: 2.9.1
144
- - - "<"
145
- - !ruby/object:Gem::Version
146
- version: '3'
147
- - !ruby/object:Gem::Dependency
148
- name: yard
149
- requirement: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - ">="
152
- - !ruby/object:Gem::Version
153
- version: 0.9.26
154
- - - "<"
155
- - !ruby/object:Gem::Version
156
- version: '2'
157
- type: :development
158
- prerelease: false
159
- version_requirements: !ruby/object:Gem::Requirement
160
- requirements:
161
- - - ">="
162
- - !ruby/object:Gem::Version
163
- version: 0.9.26
164
- - - "<"
165
- - !ruby/object:Gem::Version
166
- version: '2'
167
- - !ruby/object:Gem::Dependency
168
- name: steep
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: 0.44.1
174
- - - "<"
175
- - !ruby/object:Gem::Version
176
- version: 0.50.0
177
- type: :development
178
- prerelease: false
179
- version_requirements: !ruby/object:Gem::Requirement
180
- requirements:
181
- - - ">="
182
- - !ruby/object:Gem::Version
183
- version: 0.44.1
184
- - - "<"
185
- - !ruby/object:Gem::Version
186
- version: 0.50.0
187
- - !ruby/object:Gem::Dependency
188
- name: rubocop
189
- requirement: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - ">="
192
- - !ruby/object:Gem::Version
193
- version: 1.15.0
194
- - - "<"
195
- - !ruby/object:Gem::Version
196
- version: 1.16.0
197
- type: :development
198
- prerelease: false
199
- version_requirements: !ruby/object:Gem::Requirement
200
- requirements:
201
- - - ">="
202
- - !ruby/object:Gem::Version
203
- version: 1.15.0
204
- - - "<"
205
- - !ruby/object:Gem::Version
206
- version: 1.16.0
207
- - !ruby/object:Gem::Dependency
208
- name: rubocop-rake
209
- requirement: !ruby/object:Gem::Requirement
210
- requirements:
211
- - - ">="
212
- - !ruby/object:Gem::Version
213
- version: 0.5.1
214
- - - "<"
215
- - !ruby/object:Gem::Version
216
- version: 0.6.0
217
- type: :development
218
- prerelease: false
219
- version_requirements: !ruby/object:Gem::Requirement
220
- requirements:
221
- - - ">="
222
- - !ruby/object:Gem::Version
223
- version: 0.5.1
224
- - - "<"
225
- - !ruby/object:Gem::Version
226
- version: 0.6.0
227
- - !ruby/object:Gem::Dependency
228
- name: rubocop-performance
229
- requirement: !ruby/object:Gem::Requirement
230
- requirements:
231
- - - ">="
232
- - !ruby/object:Gem::Version
233
- version: 1.11.3
234
- - - "<"
235
- - !ruby/object:Gem::Version
236
- version: 1.12.0
237
- type: :development
238
- prerelease: false
239
- version_requirements: !ruby/object:Gem::Requirement
240
- requirements:
241
- - - ">="
242
- - !ruby/object:Gem::Version
243
- version: 1.11.3
244
- - - "<"
245
- - !ruby/object:Gem::Version
246
- version: 1.12.0
247
- - !ruby/object:Gem::Dependency
248
- name: rubocop-rubycw
249
- requirement: !ruby/object:Gem::Requirement
250
- requirements:
251
- - - ">="
252
- - !ruby/object:Gem::Version
253
- version: 0.1.6
254
- - - "<"
255
- - !ruby/object:Gem::Version
256
- version: 0.2.0
257
- type: :development
258
- prerelease: false
259
- version_requirements: !ruby/object:Gem::Requirement
260
- requirements:
261
- - - ">="
262
- - !ruby/object:Gem::Version
263
- version: 0.1.6
264
- - - "<"
265
- - !ruby/object:Gem::Version
266
- version: 0.2.0
267
- - !ruby/object:Gem::Dependency
268
- name: rubocop-md
269
- requirement: !ruby/object:Gem::Requirement
270
- requirements:
271
- - - ">="
272
- - !ruby/object:Gem::Version
273
- version: 1.0.1
274
- - - "<"
275
- - !ruby/object:Gem::Version
276
- version: 2.0.0
277
- type: :development
278
- prerelease: false
279
- version_requirements: !ruby/object:Gem::Requirement
280
- requirements:
281
- - - ">="
282
- - !ruby/object:Gem::Version
283
- version: 1.0.1
284
- - - "<"
285
- - !ruby/object:Gem::Version
286
- version: 2.0.0
11
+ date: 2022-05-26 00:00:00.000000000 Z
12
+ dependencies: []
287
13
  description: |2
288
14
  The ULID(Universally Unique Lexicographically Sortable Identifier) has useful specs for applications (e.g. `Database key`), especially possess all `uniqueness`, `randomness`, `extractable timestamps` and `sortable` features.
289
15
  This gem aims to provide the generator, monotonic generator, parser and handy manipulation features around the ULID.
@@ -296,6 +22,7 @@ extra_rdoc_files: []
296
22
  files:
297
23
  - LICENSE.txt
298
24
  - README.md
25
+ - lib/ruby-ulid.rb
299
26
  - lib/ulid.rb
300
27
  - lib/ulid/crockford_base32.rb
301
28
  - lib/ulid/monotonic_generator.rb
@@ -310,7 +37,8 @@ metadata:
310
37
  homepage_uri: https://github.com/kachick/ruby-ulid
311
38
  source_code_uri: https://github.com/kachick/ruby-ulid
312
39
  bug_tracker_uri: https://github.com/kachick/ruby-ulid/issues
313
- post_install_message:
40
+ rubygems_mfa_required: 'true'
41
+ post_install_message:
314
42
  rdoc_options: []
315
43
  require_paths:
316
44
  - lib
@@ -318,15 +46,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
318
46
  requirements:
319
47
  - - ">="
320
48
  - !ruby/object:Gem::Version
321
- version: 2.6.0
49
+ version: 2.7.0
322
50
  required_rubygems_version: !ruby/object:Gem::Requirement
323
51
  requirements:
324
52
  - - ">="
325
53
  - !ruby/object:Gem::Version
326
54
  version: '0'
327
55
  requirements: []
328
- rubygems_version: 3.2.15
329
- signing_key:
56
+ rubygems_version: 3.3.7
57
+ signing_key:
330
58
  specification_version: 4
331
- summary: Useful ULID library
59
+ summary: ULID manipulation library
332
60
  test_files: []