module FoundersToolkit::Util::Lockable

Public Instance Methods

locked(method_name, ttl, name_proc) click to toggle source
# File lib/founders_toolkit/util/lockable.rb, line 23
def locked(method_name, ttl, name_proc)
  define_method("locked_#{method_name}") do |*args|
    lock_name = instance_exec(&name_proc)
    lock = locker.lock(lock_name, ttl)
    return unless lock

    begin
      __send__("unlocked_#{method_name}".to_sym, *args)
    ensure
      locker.unlock(lock)
    end
  end

  alias_method "unlocked_#{method_name}".to_sym, method_name.to_sym
  alias_method method_name.to_sym, "locked_#{method_name}".to_sym
end
locker() click to toggle source
# File lib/founders_toolkit/util/lockable.rb, line 14
def locker
  @locker ||= Redlock::Client.new([Redis.new])
end
with_lock(name, ttl, &block) click to toggle source
# File lib/founders_toolkit/util/lockable.rb, line 18
def with_lock(name, ttl, &block)
  locker.lock!(name, ttl, &block)
end