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