A TupleEntry
is a Tuple
(i.e. a possible entry in some Tuplespace) together with expiry and cancellation data.
# File tmp/rubies/ruby-3.2.0/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.
# File tmp/rubies/ruby-3.2.0/lib/rinda/tuplespace.rb, line 110
def [](key)
@tuple[key]
end
Retrieves key
from the tuple.
# File tmp/rubies/ruby-3.2.0/lib/rinda/tuplespace.rb, line 44
def alive?
!canceled? && !expired?
end
A TupleEntry
is dead when it is canceled or expired.
# File tmp/rubies/ruby-3.2.0/lib/rinda/tuplespace.rb, line 37
def cancel
@cancel = true
end
Marks this TupleEntry
as canceled.
# File tmp/rubies/ruby-3.2.0/lib/rinda/tuplespace.rb, line 57
def canceled?; @cancel; end
Returns the canceled status.
# File tmp/rubies/ruby-3.2.0/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.
# File tmp/rubies/ruby-3.2.0/lib/rinda/tuplespace.rb, line 117
def fetch(key)
@tuple.fetch(key)
end
Fetches key
from the tuple.
# File tmp/rubies/ruby-3.2.0/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.
# File tmp/rubies/ruby-3.2.0/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
# File tmp/rubies/ruby-3.2.0/lib/rinda/tuplespace.rb, line 131
def make_tuple(ary)
Rinda::Tuple.new(ary)
end
Creates a Rinda::Tuple
for ary
.
# File tmp/rubies/ruby-3.2.0/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.
# File tmp/rubies/ruby-3.2.0/lib/rinda/tuplespace.rb, line 124
def size
@tuple.size
end
The size of the tuple.
# File tmp/rubies/ruby-3.2.0/lib/rinda/tuplespace.rb, line 52
def value; @tuple.value; end