lib/rubyonacid/factories/rinda.rb in rubyonacid-0.1.2 vs lib/rubyonacid/factories/rinda.rb in rubyonacid-0.2.0
- old
+ new
@@ -3,20 +3,23 @@
module RubyOnAcid
class RindaFactory < Factory
- #Time in seconds to wait for a value before giving up and returning the last retrieved value for the given key.
+ #Time in seconds to wait for a value before giving up and returning a default value for the given key.
#Default is 0, which will return immediately.
attr_accessor :timeout
+ #A factory to pull requests from if retrieval of values via Rinda times out.
+ attr_accessor :default_factory
#The URI to connect to. Default is "druby://127.0.0.1:7632" (7632 == RNDA).
attr_accessor :uri
def initialize(uri = "druby://127.0.0.1:7632", timeout = 0)
super
@uri = uri
@timeout = timeout
+ @default_factory = nil
@prior_values = {}
end
def start_service
DRb.start_service
@@ -28,10 +31,14 @@
@prior_values[key] ||= 0.0
begin
key, value = @space.take([key, Float], @timeout)
@prior_values[key] = value
rescue Rinda::RequestExpiredError => exception
- value = @prior_values[key]
+ if @default_factory
+ value = @default_factory.get_unit(key)
+ else
+ value = @prior_values[key]
+ end
end
value
end
end