Class: Snowflake::IdGenerator
- Inherits:
-
Object
- Object
- Snowflake::IdGenerator
- Defined in:
- lib/snowflake_id_generator.rb
Instance Attribute Summary collapse
-
#datacenter_id ⇒ Object
readonly
Returns the value of attribute datacenter_id.
-
#last_timestamp ⇒ Object
readonly
Returns the value of attribute last_timestamp.
-
#sequence ⇒ Object
readonly
Returns the value of attribute sequence.
-
#worker_id ⇒ Object
readonly
Returns the value of attribute worker_id.
Instance Method Summary collapse
-
#initialize(datacenter_id, worker_id) ⇒ IdGenerator
constructor
A new instance of IdGenerator.
- #next_id ⇒ Object
Constructor Details
#initialize(datacenter_id, worker_id) ⇒ IdGenerator
Returns a new instance of IdGenerator.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/snowflake_id_generator.rb', line 19 def initialize(datacenter_id, worker_id) if datacenter_id > Snowflake::MAX_DATACENTER_ID || datacenter_id < 0 raise ArgumentError, "datacenter_id must be between 0 and #{Snowflake::MAX_DATACENTER_ID}" end if worker_id > Snowflake::MAX_WORKER_ID || worker_id < 0 raise ArgumentError, "worker_id must be between 0 and #{Snowflake::MAX_WORKER_ID}" end @datacenter_id = datacenter_id @worker_id = worker_id @sequence = 0 = -1 end |
Instance Attribute Details
#datacenter_id ⇒ Object (readonly)
Returns the value of attribute datacenter_id.
17 18 19 |
# File 'lib/snowflake_id_generator.rb', line 17 def datacenter_id @datacenter_id end |
#last_timestamp ⇒ Object (readonly)
Returns the value of attribute last_timestamp.
17 18 19 |
# File 'lib/snowflake_id_generator.rb', line 17 def end |
#sequence ⇒ Object (readonly)
Returns the value of attribute sequence.
17 18 19 |
# File 'lib/snowflake_id_generator.rb', line 17 def sequence @sequence end |
#worker_id ⇒ Object (readonly)
Returns the value of attribute worker_id.
17 18 19 |
# File 'lib/snowflake_id_generator.rb', line 17 def worker_id @worker_id end |
Instance Method Details
#next_id ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/snowflake_id_generator.rb', line 34 def next_id = current_time_millis if < raise "Clock moved backwards. Refusing to generate id for #{@last_timestamp - timestamp} milliseconds" end if == @sequence = (@sequence + 1) & Snowflake::MAX_SEQUENCE if @sequence == 0 = wait_for_next_millis() end else @sequence = 0 end = p "timestamp - EPOCH: #{timestamp - Snowflake::EPOCH}" (( - Snowflake::EPOCH) << Snowflake::TIMESTAMP_SHIFT) | (@datacenter_id << Snowflake::DATACENTER_ID_SHIFT) | (@worker_id << Snowflake::WORKER_ID_SHIFT) | @sequence end |