class Kamaze::Project::Tools::ProcessLocker
Process Locker
Attributes
fs[R]
@return [Module<FileUtils>]
inflector[R]
@return [Dry::Inflector]
lockdir[R]
@return [String]
Public Class Methods
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/kamaze/project/tools/process_locker.rb, line 77 def method_missing(method, *args, &block) if respond_to_missing?(method) return self.new.public_send(method, *args, &block) end super end
respond_to_missing?(method, include_private = false)
click to toggle source
Calls superclass method
# File lib/kamaze/project/tools/process_locker.rb, line 85 def respond_to_missing?(method, include_private = false) return true if self.new.respond_to?(method, include_private) super(method, include_private) end
Public Instance Methods
lock(lockname) { || ... }
click to toggle source
Manage lock on given block
@return [Object]
# File lib/kamaze/project/tools/process_locker.rb, line 46 def lock(lockname) mklock(lockname).acquire { yield } end
lock!(lockname) { || ... }
click to toggle source
Manage lock on given block
@raise [Errno::EALREADY] @raise [ProcessLock::AlreadyLocked] @return [Object]
# File lib/kamaze/project/tools/process_locker.rb, line 55 def lock!(lockname) mklock(lockname).acquire! { yield } rescue ProcessLock::AlreadyLocked # noinspection RubyResolve raise Errno::EALREADY if mklock(lockname).alive? raise end
lockdir=(lockdir)
click to toggle source
mutable_attributes()
click to toggle source
# File lib/kamaze/project/tools/process_locker.rb, line 29 def mutable_attributes [:lockdir] end
tmpdir()
click to toggle source
Get tmpdir where lock files are stored.
@return [Pathname]
# File lib/kamaze/project/tools/process_locker.rb, line 67 def tmpdir require 'tmpdir' unless Dir.respond_to?(:tmpdir) Pathname.new(Dir.tmpdir).join('%<libname>s.%<uid>s' % { # @formatter:off libname: inflector.underscore(self.class.name).split('/')[0..1].join('-'), uid: Etc.getpwnam(Etc.getlogin).uid, # @formatter:on }, lockdir) end
Protected Instance Methods
mklock(lockname)
click to toggle source
@param [String] lockname @return [ProcessLock]
# File lib/kamaze/project/tools/process_locker.rb, line 115 def mklock(lockname) mktemp(lockname).yield_self { |lockfile| ProcessLock.new(lockfile) } end
mktemp(lockname)
click to toggle source
Create a temporary file
@param [String] lockname @return [Pathname]
# File lib/kamaze/project/tools/process_locker.rb, line 123 def mktemp(lockname) Pathname.new(lockname.to_s).basename('.*').yield_self { |fp| mktmpdir.join(fp) } end
mktmpdir(**options)
click to toggle source
Create “tmpdir“
@return [Pathname]
# File lib/kamaze/project/tools/process_locker.rb, line 130 def mktmpdir(**options) self.tmpdir.tap do |tmpdir| options[:mode] ||= 0o700 fs.mkdir_p(tmpdir, **options) end end
setup()
click to toggle source
# File lib/kamaze/project/tools/process_locker.rb, line 100 def setup @fs ||= FileUtils @inflector ||= Kamaze::Project::Inflector.new unless lockdir # rubocop:disable Style/GuardClause self.lockdir = lambda do return Kamaze::Project.instance.name if Kamaze::Project.instance Digest::SHA1.hexdigest(__FILE__) # Does not avoid collision if package is globally installed end.call end end