W3cubDocs

/Ruby 3

class Rinda::TupleEntry

Parent:
Object
Included modules:
DRb::DRbUndumped

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

Attributes

expires[RW]

Public Class Methods

new(ary, sec=nil) Show source
# 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

Creates a TupleEntry based on ary with an optional renewer or expiry time sec.

A renewer must implement the renew method which returns a Numeric, nil, or true to indicate when the tuple has expired.

Public Instance Methods

[](key) Show source
# File lib/rinda/tuplespace.rb, line 110
def [](key)
  @tuple[key]
end

Retrieves key from the tuple.

alive?() Show source
# File lib/rinda/tuplespace.rb, line 44
def alive?
  !canceled? && !expired?
end

A TupleEntry is dead when it is canceled or expired.

cancel() Show source
# File lib/rinda/tuplespace.rb, line 37
def cancel
  @cancel = true
end

Marks this TupleEntry as canceled.

canceled?() Show source
# File lib/rinda/tuplespace.rb, line 57
def canceled?; @cancel; end

Returns the canceled status.

expired?() Show source
# 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

Has this tuple expired? (true/false).

A tuple has expired when its expiry timer based on the sec argument to initialize runs out.

fetch(key) Show source
# File lib/rinda/tuplespace.rb, line 117
def fetch(key)
  @tuple.fetch(key)
end

Fetches key from the tuple.

make_expires(sec=nil) Show source
# 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

Returns an expiry Time based on sec which can be one of:

Numeric

sec seconds into the future

true

the expiry time is the start of 1970 (i.e. expired)

nil

it is Tue Jan 19 03:14:07 GMT Standard Time 2038 (i.e. when UNIX clocks will die)

make_tuple(ary) Show source
# File lib/rinda/tuplespace.rb, line 131
def make_tuple(ary)
  Rinda::Tuple.new(ary)
end

Creates a Rinda::Tuple for ary.

renew(sec_or_renewer) Show source
# File lib/rinda/tuplespace.rb, line 84
def renew(sec_or_renewer)
  sec, @renewer = get_renewer(sec_or_renewer)
  @expires = make_expires(sec)
end

Reset the expiry time according to sec_or_renewer.

nil

it is set to expire in the far future.

true

it has expired.

Numeric

it will expire in that many seconds.

Otherwise the argument refers to some kind of renewer object which will reset its expiry time.

size() Show source
# File lib/rinda/tuplespace.rb, line 124
def size
  @tuple.size
end

The size of the tuple.

value() Show source
# File lib/rinda/tuplespace.rb, line 52
def value; @tuple.value; end

Return the object which makes up the tuple itself: the Array or Hash.

Private Instance Methods

get_renewer(it) Show source
# 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

Returns a valid argument to make_expires and the renewer or nil.

Given true, nil, or Numeric, returns that value and nil (no actual renewer). Otherwise it returns an expiry value from calling it.renew and the renewer.

Ruby Core © 1993–2020 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.