Spec-Zone.ru › Ruby 2.3

класс Rinda::TupleEntry

Родитель:
Объект
Включенные модули:
DRb::DRbUndumped

Класс TupleEntry представляет собой Кортеж (то есть потенциальную запись в пространстве кортежей) вместе с данными о времени истечения срока действия и отмене.

Атрибуты

expires[RW]

Общедоступные методы класса

new(ary, sec=nil) Показать исходный код
# File lib/rinda/tuplespace.rb, line 27
def initialize(ary, sec=nil)
  @cancel = false
  @expires = nil
  @tuple = make_tuple(ary)
  @renewer = nil
  renew(sec)
end

Создает TupleEntry на основе ary с необязательным временем продления или истечения срока действия sec.

Объект продления должен реализовывать метод renew, который возвращает числовое значение, null или true, чтобы указать, когда кортеж истек.

Общедоступные методы экземпляра

[](key) Показать исходный код
# File lib/rinda/tuplespace.rb, line 111
def [](key)
  @tuple[key]
end

Извлекает key из кортежа.

alive?() Показать исходный код
# File lib/rinda/tuplespace.rb, line 45
def alive?
  !canceled? && !expired?
end

Элемент TupleEntry считается неактивным, когда он отменён или истек.

cancel() Показать исходный код
# File lib/rinda/tuplespace.rb, line 38
def cancel
  @cancel = true
end

Помечает этот TupleEntry как отменённый.

canceled?() Показать исходный код
# File lib/rinda/tuplespace.rb, line 58
def canceled?; @cancel; end

Возвращает статус отмены.

expired?() Показать исходный код
# File lib/rinda/tuplespace.rb, line 66
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 при инициализации, истекает.

fetch(key) Показать исходный код
# File lib/rinda/tuplespace.rb, line 118
def fetch(key)
  @tuple.fetch(key)
end

Извлекает key из кортежа.

make_expires(sec=nil) Показать исходный код
# File lib/rinda/tuplespace.rb, line 97
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

время истечения срока действия — 19 января 2038 года в 03:14:07 по Гринвичу (т. е. когда часы UNIX умрут)

make_tuple(ary) Показать исходный код
# File lib/rinda/tuplespace.rb, line 132
def make_tuple(ary)
  Rinda::Tuple.new(ary)
end

Создаёт Rinda::Tuple для ary.

renew(sec_or_renewer) Показать исходный код
# File lib/rinda/tuplespace.rb, line 85
def renew(sec_or_renewer)
  sec, @renewer = get_renewer(sec_or_renewer)
  @expires = make_expires(sec)
end

Сбрасывает время истечения срока действия в соответствии с sec_or_renewer.

nil

время истечения срока действия устанавливается в далёкое будущее.

true

срок действия истек.

Числовое значение

срок действия истечёт через указанное количество секунд.

В противном случае аргумент ссылается на какой-либо объект продления, который сбросит время истечения срока действия.

size() Показать исходный код
# File lib/rinda/tuplespace.rb, line 125
def size
  @tuple.size
end

Размер кортежа.

value() Показать исходный код
# File lib/rinda/tuplespace.rb, line 53
def value; @tuple.value; end

Возвращает объект, составляющий сам кортеж: массив или словарь.

Приватные методы экземпляра

get_renewer(it) Показать исходный код
# File lib/rinda/tuplespace.rb, line 145
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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API