класс Rinda::TupleEntry
Класс TupleEntry представляет собой Кортеж (т.е. возможную запись в некотором пространстве кортежей) вместе с данными о времени истечения срока действия и отмене.
Атрибуты
Открытые методы класса
# File lib/rinda/tuplespace.rb, line 26 def initialize(ary, sec=nil) @cancel = false @expires = nil @tuple = make_tuple(ary) @renewer = nil renew(sec) end
Создаёт экземпляр TupleEntry на основе ary с необязательным временем продления или истечения срока действия sec.
Объект продления должен реализовывать метод renew, который возвращает числовое значение, null или true, чтобы указать, когда кортеж истек.
Открытые методы экземпляра
# File lib/rinda/tuplespace.rb, line 110 def [](key) @tuple[key] end
Извлекает key из кортежа.
# File lib/rinda/tuplespace.rb, line 44 def alive? !canceled? && !expired? end
Экземпляр TupleEntry считается неактивным, когда он отменён или срок его действия истек.
# File lib/rinda/tuplespace.rb, line 37 def cancel @cancel = true end
Отмечает данный экземпляр TupleEntry как отменённый.
# File lib/rinda/tuplespace.rb, line 57 def canceled?; @cancel; end
Возвращает статус отмены.
# File lib/rinda/tuplespace.rb, line 65 def expired? return true unless @expires return false if @expires > Time.now return true if @renewer.nil? renew(@renewer) return true unless @expires return @expires < Time.now end
Истек срок действия данного кортежа? (true/false).
Кортеж истекает, когда таймер истечения срока действия, основанный на sec аргументе инициализации, заканчивается.
# File lib/rinda/tuplespace.rb, line 117 def fetch(key) @tuple.fetch(key) end
Извлекает key из кортежа.
# File lib/rinda/tuplespace.rb, line 96
def make_expires(sec=nil)
case sec
when Numeric
Time.now + sec
when true
Time.at(1)
when nil
Time.at(2**31-1)
end
end Возвращает время истечения срока действия Time на основе sec, которое может быть одним из:
- Числовое значение
-
secсекунды в будущем -
true -
время истечения срока действия — начало 1970 года (т.е. истек)
-
nil -
время истечения срока действия — вторник 1 января 19 03:14:07 GMT по стандартному времени 2038 (т.е. время истечения срока действия системных часов Unix)
# File lib/rinda/tuplespace.rb, line 131 def make_tuple(ary) Rinda::Tuple.new(ary) end
Создаёт Rinda::Tuple для ary.
# File lib/rinda/tuplespace.rb, line 84 def renew(sec_or_renewer) sec, @renewer = get_renewer(sec_or_renewer) @expires = make_expires(sec) end
Переустанавливает время истечения срока действия в соответствии с sec_or_renewer.
-
nil -
установлено истечение срока действия в далёком будущем.
-
true -
срок действия истек.
- Числовое значение
-
срок действия истечёт через указанное количество секунд.
В противном случае аргумент относится к какому-либо объекту продления, который переустановит время истечения срока действия.
# File lib/rinda/tuplespace.rb, line 124 def size @tuple.size end
Размер кортежа.
# File lib/rinda/tuplespace.rb, line 52 def value; @tuple.value; end
Возвращает объект, составляющий сам кортеж: массив или словарь.
Закрытые методы экземпляра
# File lib/rinda/tuplespace.rb, line 144
def get_renewer(it)
case it
when Numeric, true, nil
return it, nil
else
begin
return it.renew, it
rescue Exception
return it, nil
end
end
end Возвращает допустимый аргумент для #make_expires и объект продления или null.
Для true, nil, или числового значения возвращает это значение и nil (нет фактического объекта продления). В противном случае возвращает значение времени истечения срока действия, полученное при вызове it.renew и объект продления.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.