# File lib/typhoeus/remote.rb, line 11 11: def allow_net_connect 12: @allow_net_connect = true if @allow_net_connect.nil? 13: @allow_net_connect 14: end
# File lib/typhoeus/remote.rb, line 16 16: def allow_net_connect=(value) 17: @allow_net_connect = value 18: end
# File lib/typhoeus/remote.rb, line 274 274: def cache=(cache) 275: @cache = cache 276: end
# File lib/typhoeus/remote.rb, line 216 216: def call_remote_method(method_name, args) 217: m = @remote_methods[method_name] 218: 219: base_uri = args.delete(:base_uri) || m.base_uri || "" 220: 221: if args.has_key? :path 222: path = args.delete(:path) 223: else 224: path = m.interpolate_path_with_arguments(args) 225: end 226: path ||= "" 227: 228: http_method = m.http_method 229: url = base_uri + path 230: options = m.merge_options(args) 231: 232: # proxy_object = memoized_proxy_object(http_method, url, options) 233: # return proxy_object unless proxy_object.nil? 234: # 235: # if m.cache_responses? 236: # object = @cache.get(get_memcache_response_key(method_name, args)) 237: # if object 238: # set_memoized_proxy_object(http_method, url, options, object) 239: # return object 240: # end 241: # end 242: 243: proxy = memoized_proxy_object(http_method, url, options) 244: unless proxy 245: if m.cache_responses? 246: options[:cache] = @cache 247: options[:cache_key] = get_memcache_response_key(method_name, args) 248: options[:cache_timeout] = m.cache_ttl 249: end 250: proxy = send(http_method, url, options) 251: end 252: proxy 253: end
# File lib/typhoeus/remote.rb, line 104 104: def check_expected_headers!(response_args, options) 105: missing_headers = {} 106: 107: response_args[:expected_headers].each do |key, value| 108: if options[:headers].nil? 109: missing_headers[key] = [value, nil] 110: elsif ((options[:headers][key] && value != :anything) && 111: options[:headers][key] != value) 112: 113: missing_headers[key] = [value, options[:headers][key]] 114: end 115: end 116: 117: unless missing_headers.empty? 118: raise headers_error_summary(response_args, options, missing_headers, 'expected') 119: end 120: end
# File lib/typhoeus/remote.rb, line 122 122: def check_unexpected_headers!(response_args, options) 123: bad_headers = {} 124: response_args[:unexpected_headers].each do |key, value| 125: if (options[:headers][key] && value == :anything) || 126: (options[:headers][key] == value) 127: bad_headers[key] = [value, options[:headers][key]] 128: end 129: end 130: 131: unless bad_headers.empty? 132: raise headers_error_summary(response_args, options, bad_headers, 'did not expect') 133: end 134: end
# File lib/typhoeus/remote.rb, line 265 265: def clear_memoized_proxy_objects 266: lambda { @memoized_proxy_objects = {} } 267: end
# File lib/typhoeus/remote.rb, line 278 278: def define_remote_method(name, args = {}) 279: @remote_defaults ||= {} 280: args[:method] ||= @remote_defaults[:method] 281: args[:on_success] ||= @remote_defaults[:on_success] 282: args[:on_failure] ||= @remote_defaults[:on_failure] 283: args[:base_uri] ||= @remote_defaults[:base_uri] 284: args[:path] ||= @remote_defaults[:path] 285: m = RemoteMethod.new(args) 286: 287: @remote_methods ||= {} 288: @remote_methods[name] = m 289: 290: class_eval def self.#{name.to_s}(args = {}) call_remote_method(:#{name.to_s}, args) end 291: end
# File lib/typhoeus/remote.rb, line 89 89: def enforce_allow_net_connect!(http_verb, url, params = nil) 90: if !allow_net_connect 91: message = "Real HTTP connections are disabled. Unregistered request: " << 92: "#{http_verb.to_s.upcase} #{url}\n" << 93: " Try: mock(:#{http_verb}, :url => \"#{url}\"" 94: if params 95: message << ",\n :params => #{params.inspect}" 96: end 97: 98: message << ")" 99: 100: raise MockExpectedError, message 101: end 102: end
# File lib/typhoeus/remote.rb, line 51 51: def flatten_and_sort_hash(params) 52: params = params.dup 53: 54: # Flatten any sub-hashes to a single string. 55: params.keys.each do |key| 56: if params[key].is_a?(Hash) 57: params[key] = params[key].sort_by { |k, v| k.to_s.downcase }.to_s 58: end 59: end 60: 61: params.sort_by { |k, v| k.to_s.downcase } 62: end
# File lib/typhoeus/remote.rb, line 269 269: def get_memcache_response_key(remote_method_name, args) 270: result = "#{remote_method_name.to_s}-#{args.to_s}" 271: (Digest::SHA2.new << result).to_s 272: end
# File lib/typhoeus/remote.rb, line 64 64: def get_mock(method, url, options) 65: return nil unless @remote_mocks 66: if @remote_mocks.has_key? method 67: extra_response_args = { :requested_http_method => method, 68: :requested_url => url, 69: :start_time => Time.now } 70: mock_key = mock_key_for(url, options[:params]) 71: if @remote_mocks[method].has_key? mock_key 72: get_mock_and_run_handlers(method, 73: @remote_mocks[method][mock_key].merge( 74: extra_response_args), 75: options) 76: elsif @remote_mocks[method].has_key? :catch_all 77: get_mock_and_run_handlers(method, 78: @remote_mocks[method][:catch_all].merge( 79: extra_response_args), 80: options) 81: else 82: nil 83: end 84: else 85: nil 86: end 87: end
# File lib/typhoeus/remote.rb, line 148 148: def get_mock_and_run_handlers(method, response_args, options) 149: response = Response.new(response_args) 150: 151: if response_args.has_key? :expected_body 152: raise "#{method} expected body of \"#{response_args[:expected_body]}\" but received #{options[:body]}" if response_args[:expected_body] != options[:body] 153: end 154: 155: if response_args.has_key? :expected_headers 156: check_expected_headers!(response_args, options) 157: end 158: 159: if response_args.has_key? :unexpected_headers 160: check_unexpected_headers!(response_args, options) 161: end 162: 163: if response.code >= 200 && response.code < 300 && options.has_key?(:on_success) 164: response = options[:on_success].call(response) 165: elsif options.has_key?(:on_failure) 166: response = options[:on_failure].call(response) 167: end 168: 169: encode_nil_response(response) 170: end
If we get subclassed, make sure that child inherits the remote defaults of the parent class.
# File lib/typhoeus/remote.rb, line 212 212: def inherited(child) 213: child.__send__(:remote_defaults, @remote_defaults) 214: end
# File lib/typhoeus/remote.rb, line 260 260: def memoized_proxy_object(http_method, url, options) 261: @memoized_proxy_objects ||= {} 262: @memoized_proxy_objects["#{http_method}_#{url}_#{options.to_s}"] 263: end
# File lib/typhoeus/remote.rb, line 20 20: def mock(method, args = {}) 21: @remote_mocks ||= {} 22: @remote_mocks[method] ||= {} 23: args[:code] ||= 200 24: args[:body] ||= "" 25: args[:headers] ||= "" 26: args[:time] ||= 0 27: url = args.delete(:url) 28: url ||= :catch_all 29: params = args.delete(:params) 30: 31: key = mock_key_for(url, params) 32: 33: @remote_mocks[method][key] = args 34: end
Returns a key for a given URL and passed in set of Typhoeus options to be used to store/retrieve a corresponding mock.
# File lib/typhoeus/remote.rb, line 39 39: def mock_key_for(url, params = nil) 40: if url == :catch_all 41: url 42: else 43: key = url 44: if params and !params.empty? 45: key += flatten_and_sort_hash(params).to_s 46: end 47: key 48: end 49: end
# File lib/typhoeus/remote.rb, line 204 204: def remote_defaults(options) 205: @remote_defaults ||= {} 206: @remote_defaults.merge!(options) if options 207: @remote_defaults 208: end
# File lib/typhoeus/remote.rb, line 188 188: def remote_proxy_object(url, method, options) 189: easy = Typhoeus.get_easy_object 190: 191: easy.url = url 192: easy.method = method 193: easy.headers = options[:headers] if options.has_key?(:headers) 194: easy.headers["User-Agent"] = (options[:user_agent] || Typhoeus::USER_AGENT) 195: easy.params = options[:params] if options[:params] 196: easy.request_body = options[:body] if options[:body] 197: easy.timeout = options[:timeout] if options[:timeout] 198: easy.set_headers 199: 200: proxy = Typhoeus::RemoteProxyObject.new(clear_memoized_proxy_objects, easy, options) 201: set_memoized_proxy_object(method, url, options, proxy) 202: end
# File lib/typhoeus/remote.rb, line 255 255: def set_memoized_proxy_object(http_method, url, options, object) 256: @memoized_proxy_objects ||= {} 257: @memoized_proxy_objects["#{http_method}_#{url}_#{options.to_s}"] = object 258: end
# File lib/typhoeus/remote.rb, line 302 302: def decode_nil_response(response) 303: response == :__nil__ ? nil : response 304: end
# File lib/typhoeus/remote.rb, line 298 298: def encode_nil_response(response) 299: response == nil ? :__nil__ : response 300: end
# File lib/typhoeus/remote.rb, line 136 136: def headers_error_summary(response_args, options, missing_headers, lead_in) 137: error = "#{lead_in} the following headers: #{response_args[:expected_headers].inspect}, but received: #{options[:headers].inspect}\n\n" 138: error << "Differences:\n" 139: error << "------------\n" 140: missing_headers.each do |key, values| 141: error << " - #{key}: #{lead_in} #{values[0].inspect}, got #{values[1].inspect}\n" 142: end 143: 144: error 145: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.