Module: SingleInstance

Defined in:
lib/single_instance.rb,
lib/single_instance/version.rb

Defined Under Namespace

Classes: Blocker

Constant Summary collapse

VERSION =
"0.3.0"

Class Method Summary collapse

Class Method Details

.exclusive_non_blocking(name, &block) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/single_instance.rb', line 8

def exclusive_non_blocking(name, &block)
  lock_file = File.join(Dir::tmpdir, "single_instance_#{name}.pid")
  begin
    file = File.open(lock_file, "a+")
    file.rewind
    if file.flock(File::LOCK_EX|File::LOCK_NB)
      file.truncate(0)
      file.puts $$
      file.puts Time.now.to_i
      file.flush
      if block_given?
        yield nil
      else
        (@lock_files ||= []) << file
      end
    elsif block_given? && block.arity == 1
      pid = file.readline.to_i
      started_at = Time.at(file.readline.to_i)
      yield Blocker.new(pid, started_at)
    else
      false
    end
  ensure
    file.close if block_given?
  end
end