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



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

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)


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

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

#inflectorObject (protected)



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

def inflector
  ActiveSupport::Inflector
end

#lock(lockname) ⇒ Object

Manage lock on given block

Returns:



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

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

#lock!(lockname) ⇒ Object

Manage lock on given block

Returns:

Raises:

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


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

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)


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

def mklock(lockname)
  lockfile = mktemp(lockname)

  ProcessLock.new(lockfile)
end

#mktemp(lockname) ⇒ Pathname (protected)

Create a temporary file

Parameters:

  • lockname (String)

Returns:

  • (Pathname)


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

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)


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

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

  FileUtils.mkdir_p(tmpdir, options)

  tmpdir
end

#tmpdirPathname

Returns:

  • (Pathname)


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

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