Spec-Zone.ru › Ruby 2.7

class Rinda::TupleEntry

Parent:
Объект
Included modules:
DRb::DRbUndumped

A TupleEntry is a Tuple (i.e. a possible entry in some Tuplespace) together with expiry and cancellation data.

Атрибуты

expires[RW]

Публичные методы класса

new(ary, sec=nil) Показать исходный код
# 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, который возвращает Numeric, nil или true для индикации истечения времени жизни кортежа.

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

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

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

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

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

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

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

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

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

expired?() Показать исходный код
# 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 при инициализации, заканчивает отсчёт.

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

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

make_expires(sec=nil) Показать исходный код
# 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, которое может быть:

Numeric

sec секунды в будущем

true

время истечения — начало 1970 года (т.е. истекло)

nil

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

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

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

renew(sec_or_renewer) Показать исходный код
# 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

время истечения истекло.

Numeric

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

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

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

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

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

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

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

get_renewer(it) Показать исходный код
# 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 и объект обновления или nil.

Принимая true, nil, или Numeric, возвращает это значение и 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