class Clicker::LaunchLock

Attributes

lock_file_path[R]

Public Class Methods

new(program_name) click to toggle source
# File lib/clicker/launch_lock.rb, line 8
def initialize(program_name)
  @config_dir = "#{ENV['HOME']}/.config/#{program_name}"
  @lock_file_path = "#{@config_dir}/#{program_name}.lock"
  FileUtils.mkdir_p(@config_dir)
end

Public Instance Methods

locked?() click to toggle source
# File lib/clicker/launch_lock.rb, line 29
def locked?
  File.open(@lock_file_path, 'r') do |f|
    rv =  f.flock(File::LOCK_EX | File::LOCK_NB)
    case rv
    when 0
      return false
    when false
      return true
    end
  end
rescue Errno::ENOENT
  return false
end
owner() click to toggle source
# File lib/clicker/launch_lock.rb, line 43
def owner
  File.open(@lock_file_path) do |f|
    success = f.flock(File::LOCK_EX | File::LOCK_NB)
    if success
      return nil # owner is not alive...
    else
      pid = f.gets.to_i
      return pid
    end
  end
rescue Errno::ENOENT
  return nil
end
try_lock() { || ... } click to toggle source
# File lib/clicker/launch_lock.rb, line 14
def try_lock
  File.open(@lock_file_path, 'r+') do |f|
    success = f.flock(File::LOCK_EX | File::LOCK_NB)
    if success
      f.puts Process.pid
      f.flush
      f.truncate(f.pos)
      yield
      return true
    else
      return false
    end
  end
end