Module: Neo4j::ActiveNode

Includes:
EvenEasierId
Defined in:
lib/neo4j/even_easier_id.rb

Defined Under Namespace

Modules: EvenEasierId

Constant Summary collapse

@@mutex =
Mutex.new
@@counter =
0

Instance Method Summary collapse

Instance Method Details

#even_easier_idObject



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/neo4j/even_easier_id.rb', line 20

def even_easier_id
  @@mutex.lock
  begin
    count = @@counter = (@@counter + 1) % 0xFFFFFF
  ensure
    @@mutex.unlock rescue nil
  end
  machine_id = Digest::MD5.digest(Socket.gethostname).unpack("N")[0]
  process_id = RUBY_ENGINE == 'jruby' ? "#{Process.pid}#{Thread.current.object_id}".hash % 0xFFFF : Process.pid % 0xFFFF
  [ Time.now.to_i, machine_id, process_id, count << 8 ].pack("N NX lXX NX").unpack("H*")[0]
end