class Nagoriyuki
Constants
- VERSION
Attributes
generators[R]
Public Class Methods
new(options = {})
click to toggle source
generators:
- name: msec length: 40 # (2 ** 40 - 1) / 1000 / 365 / 24 / 60 / 60.0 start_at: 1546268400000 # 2019-01-01 00:00:00 +0900 (msec) - name: pid length: 16 - name: sequence length: 8
# 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
Public Instance Methods
biggest(timestamp)
click to toggle source
# 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()
click to toggle source
# 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()
click to toggle source
# 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
Also aliased as: next
length()
click to toggle source
# File lib/nagoriyuki.rb, line 78 def length @generators.inject(0) {|sum, g| sum += g.length } end
smallest(timestamp)
click to toggle source
# 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)
click to toggle source
# 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