class AutomationObject::Proxy::ThrottleProxy
Proxy
class to throttle methods on the subject
Public Class Methods
new(subject)
click to toggle source
Calls superclass method
AutomationObject::Proxy::Proxy::new
# File lib/automation_object/proxy/throttle_proxy.rb, line 9 def initialize(subject) super end
Public Instance Methods
add_method_throttle(method_symbol, time)
click to toggle source
# File lib/automation_object/proxy/throttle_proxy.rb, line 24 def add_method_throttle(method_symbol, time) raise ArgumentError, 'Expecting method_symbol argument to be a Symbol' unless method_symbol.is_a?(Symbol) raise ArgumentError, 'Expecting time argument to be Numeric' unless time.is_a?(Numeric) raise ArgumentError, "Expecting object to respond_to? #{method_symbol}" unless @subject.respond_to?(method_symbol) throttle_methods[method_symbol] = time end
delete_method_throttle(method_symbol)
click to toggle source
Delete throttle that exists @param method_symbol [Symbol] method symbol to remove throttle from
# File lib/automation_object/proxy/throttle_proxy.rb, line 36 def delete_method_throttle(method_symbol) throttle_methods.delete(method_symbol) end
method_missing(method_symbol, *args, &block)
click to toggle source
# File lib/automation_object/proxy/throttle_proxy.rb, line 17 def method_missing(method_symbol, *args, &block) start_time = Time.new.to_f execution_return = @subject.send(method_symbol, *args, &block) throttle_speed(method_symbol, start_time) execution_return end
throttle_methods()
click to toggle source
# File lib/automation_object/proxy/throttle_proxy.rb, line 13 def throttle_methods @throttle_methods ||= {} end
throttle_speed(method_symbol, start_time)
click to toggle source
Method to sleep the difference between actual and throttle time @param method_symbol [Symbol] method that is to be throttled @param start_time [Float] start time as float @return [nil]
# File lib/automation_object/proxy/throttle_proxy.rb, line 44 def throttle_speed(method_symbol, start_time) return unless throttle_methods.key?(method_symbol) total_time_taken = Time.new.to_f - start_time sleep_time = throttle_methods[method_symbol] - total_time_taken sleep(sleep_time) if sleep_time > 0 end