44 lines
947 B
Ruby
44 lines
947 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Dav4rack
|
|
# Lock
|
|
class Lock
|
|
attr_reader :store
|
|
|
|
def initialize(args = {})
|
|
@args = args
|
|
@store = nil
|
|
@args[:created_at] = Time.current
|
|
@args[:updated_at] = Time.current
|
|
end
|
|
|
|
def store=(store)
|
|
raise TypeError, 'Expecting LockStore' unless store.respond_to? :remove
|
|
|
|
@store = store
|
|
end
|
|
|
|
def destroy
|
|
@store&.remove self
|
|
end
|
|
|
|
def remaining_timeout
|
|
@args[:timeout].to_i - (Time.now.to_i - @args[:created_at].to_i)
|
|
end
|
|
|
|
def respond_to_missing?(_name, _include_private)
|
|
true
|
|
end
|
|
|
|
def method_missing(*args)
|
|
if @args.key?(args.first.to_sym)
|
|
@args[args.first.to_sym]
|
|
elsif args.first.to_s[-1, 1] == '='
|
|
@args[args.first.to_s[0, args.first.to_s.length - 1].to_sym] = args[1]
|
|
else
|
|
raise NoMethodError, "Undefined method #{args.first} for #{self}"
|
|
end
|
|
end
|
|
end
|
|
end
|