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
next()
Alias for: generate
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