Spec-Zone.ru › Ruby 2.5

класс Rinda::TupleEntry

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

A TupleEntry — это Кортеж (то есть возможная запись в некотором Tuplespace) вместе с данными о сроке действия и отмене.

Атрибуты

expires[RW]

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

new(ary, sec=nil) Показать исходный код
# File lib/rinda/tuplespace.rb, line 25
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 109
def [](key)
  @tuple[key]
end

Возвращает key из кортежа.

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

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

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

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

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

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

expired?() Показать исходный код
# File lib/rinda/tuplespace.rb, line 64
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 116
def fetch(key)
  @tuple.fetch(key)
end

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

make_expires(sec=nil) Показать исходный код
# File lib/rinda/tuplespace.rb, line 95
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 января 1970 г., 03:14:07 по Гринвичу, стандартное время Time 2038 (т.е. когда часы UNIX умрут)

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

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

renew(sec_or_renewer) Показать исходный код
# File lib/rinda/tuplespace.rb, line 83
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 123
def size
  @tuple.size
end

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

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

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

Закрытые методы экземпляра

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