Class: Kamaze::Project::Tools::ProcessLocker

Inherits:
BaseTool show all
Defined in:
lib/kamaze/project/tools/process_locker.rb,
lib/kamaze/project/tools/process_locker.rb

Overview

Process Locker

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

This class inherits a constructor from Kamaze::Project::Tools::BaseTool

Instance Attribute Details

#observer_peersHash|nil (readonly, protected) Originally defined in module Concern::Observable

Returns:

  • (Hash|nil)

Class Method Details

.method_missing(method, *args, &block) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/kamaze/project/tools/process_locker.rb', line 54

def method_missing(method, *args, &block)
  if respond_to_missing?(method)
    self.new.public_send(method, *args, &block)
  else
    super
  end
end

.respond_to_missing?(method, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


62
63
64
65
66
# File 'lib/kamaze/project/tools/process_locker.rb', line 62

def respond_to_missing?(method, include_private = false)
  return true if self.new.respond_to?(method, include_private)

  super(method, include_private)
end

Instance Method Details

#inflectorDry::Inflector (protected)

Returns:

  • (Dry::Inflector)


103
104
105
106
107
# File 'lib/kamaze/project/tools/process_locker.rb', line 103

def inflector
  require 'dry/inflector'

  Dry::Inflector.new
end

#lock(lockname) ⇒ Object

Manage lock on given block

Returns:



28
29
30
# File 'lib/kamaze/project/tools/process_locker.rb', line 28

def lock(lockname)
  mklock(lockname).acquire { yield }
end

#lock!(lockname) ⇒ Object

Manage lock on given block

Returns:

Raises:

  • (Errno::EALREADY)
  • (ProcessLock::AlreadyLocked)


37
38
39
40
41
42
# File 'lib/kamaze/project/tools/process_locker.rb', line 37

def lock!(lockname)
  mklock(lockname).acquire! { yield }
rescue ProcessLock::AlreadyLocked
  raise Errno::EALREADY if mklock(lockname).alive?
  raise
end

#mklock(lockname) ⇒ ProcessLock (protected)

Parameters:

  • lockname (String)

Returns:

  • (ProcessLock)


73
74
75
76
77
# File 'lib/kamaze/project/tools/process_locker.rb', line 73

def mklock(lockname)
  lockfile = mktemp(lockname)

  ProcessLock.new(lockfile)
end

#mktemp(lockname) ⇒ Pathname (protected)

Create a temporary file

Parameters:

  • lockname (String)

Returns:

  • (Pathname)


83
84
85
86
87
# File 'lib/kamaze/project/tools/process_locker.rb', line 83

def mktemp(lockname)
  lockname = Pathname.new(lockname.to_s).basename('.*')

  mktmpdir.join(lockname)
end

#mktmpdir(options = {}) ⇒ Pathname (protected)

Create tmpdir

Parameters:

  • options (Hash) (defaults to: {})

Returns:

  • (Pathname)


93
94
95
96
97
98
99
100
# File 'lib/kamaze/project/tools/process_locker.rb', line 93

def mktmpdir(options = {})
  tmpdir = self.tmpdir
  options[:mode] ||= 0o700

  FileUtils.mkdir_p(tmpdir, options)

  tmpdir
end

#tmpdirPathname

Returns:

  • (Pathname)


45
46
47
48
49
50
51
# File 'lib/kamaze/project/tools/process_locker.rb', line 45

def tmpdir
  tmp = Pathname.new(Dir.tmpdir)
  uid = Etc.getpwnam(Etc.getlogin).uid
  dir = [inflector.underscore(self.class.name).tr('/', '-'), uid].join('.')

  tmp.join(dir)
end