Class: Nagoriyuki
- Inherits:
-
Object
show all
- Defined in:
- lib/nagoriyuki.rb,
lib/nagoriyuki/version.rb,
lib/nagoriyuki/generators.rb,
lib/nagoriyuki/generators/pid.rb,
lib/nagoriyuki/generators/base.rb,
lib/nagoriyuki/generators/msec.rb,
lib/nagoriyuki/generators/sequence.rb
Defined Under Namespace
Modules: Generators
Classes: InvalidOption
Constant Summary
collapse
- VERSION =
"0.0.2"
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(options = {}) ⇒ Nagoriyuki
generators:
- name: msec
length: 40
start_at: 1546268400000
- name: pid
length: 16
- name: sequence
length: 8
22
23
24
25
26
27
28
29
|
# File 'lib/nagoriyuki.rb', line 22
def initialize(options = {})
@options = options
@lock = Mutex.new
@generators = @options["generators"].map do |h|
generator_name = h["name"]
"Nagoriyuki::Generators::#{generator_name.classify}".constantize.new(h)
end
end
|
Instance Attribute Details
#generators ⇒ Object
Returns the value of attribute generators.
11
12
13
|
# File 'lib/nagoriyuki.rb', line 11
def generators
@generators
end
|
Instance Method Details
#biggest(timestamp) ⇒ Object
68
69
70
71
72
73
74
75
76
|
# File 'lib/nagoriyuki.rb', line 68
def biggest(timestamp)
@lock.synchronize do
shift_size = length
@generators.inject(0) do |result, generator|
shift_size = shift_size - generator.length
result += generator.biggest(timestamp) << shift_size
end
end
end
|
#current ⇒ Object
42
43
44
45
46
47
48
49
50
|
# File 'lib/nagoriyuki.rb', line 42
def current
@lock.synchronize do
shift_size = length
@generators.inject(0) do |result, generator|
shift_size = shift_size - generator.length
result += generator.current << shift_size
end
end
end
|
#generate ⇒ Object
Also known as:
next
31
32
33
34
35
36
37
38
39
|
# File 'lib/nagoriyuki.rb', line 31
def generate
@lock.synchronize do
shift_size = length
@generators.inject(0) do |result, generator|
shift_size = shift_size - generator.length
result += generator.generate << shift_size
end
end
end
|
#length ⇒ Object
78
79
80
|
# File 'lib/nagoriyuki.rb', line 78
def length
@generators.inject(0) {|sum, g| sum += g.length }
end
|
#smallest(timestamp) ⇒ Object
58
59
60
61
62
63
64
65
66
|
# File 'lib/nagoriyuki.rb', line 58
def smallest(timestamp)
@lock.synchronize do
shift_size = length
@generators.inject(0) do |result, generator|
shift_size = shift_size - generator.length
result += generator.smallest(timestamp) << shift_size
end
end
end
|
#timestamp(id) ⇒ Object
52
53
54
55
56
|
# File 'lib/nagoriyuki.rb', line 52
def timestamp(id)
generator = @generators.detect {|g| g.name == "msec" }
shift_size = length - generator.length
((id >> shift_size) + generator.offset_epoch) / 1000
end
|