Module: FakeWeb::Utility
- Defined in:
- lib/fake_web/utility.rb
Overview
:nodoc:
Class Method Summary collapse
- .decode_userinfo_from_header(header) ⇒ Object
- .encode_unsafe_chars_in_userinfo(userinfo) ⇒ Object
- .produce_side_effects_of_net_http_request(request, body) ⇒ Object
- .puts_warning_for_net_http_around_advice_libs_if_needed ⇒ Object
- .puts_warning_for_net_http_replacement_libs_if_needed ⇒ Object
- .record_loaded_net_http_replacement_libs ⇒ Object
-
.request_uri_as_string(net_http, request) ⇒ Object
Returns a string with a normalized version of a Net::HTTP request’s URI.
- .strip_default_port_from_uri(uri) ⇒ Object
-
.uri_escape(*args) ⇒ Object
Wrapper for URI escaping that switches between URI::Parser#escape and URI.escape for 1.9-compatibility.
Class Method Details
.decode_userinfo_from_header(header) ⇒ Object
4 5 6 |
# File 'lib/fake_web/utility.rb', line 4 def self.decode_userinfo_from_header(header) header.sub(/^Basic /, "").unpack("m").first end |
.encode_unsafe_chars_in_userinfo(userinfo) ⇒ Object
8 9 10 11 |
# File 'lib/fake_web/utility.rb', line 8 def self.encode_unsafe_chars_in_userinfo(userinfo) unsafe_in_userinfo = /[^#{URI::REGEXP::PATTERN::UNRESERVED};&=+$,]|^(#{URI::REGEXP::PATTERN::ESCAPED})/ userinfo.split(":").map { |part| uri_escape(part, unsafe_in_userinfo) }.join(":") end |
.produce_side_effects_of_net_http_request(request, body) ⇒ Object
51 52 53 54 |
# File 'lib/fake_web/utility.rb', line 51 def self.produce_side_effects_of_net_http_request(request, body) request.set_body_internal(body) request.content_length = request.body.length unless request.body.nil? end |
.puts_warning_for_net_http_around_advice_libs_if_needed ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/fake_web/utility.rb', line 56 def self.puts_warning_for_net_http_around_advice_libs_if_needed libs = {"Samuel" => defined?(Samuel)} warnings = libs.select { |_, loaded| loaded }.map do |name, _| <<-TEXT.gsub(/ {10}/, '') \e[1mWarning: FakeWeb was loaded after #{name}\e[0m * #{name}'s code is being ignored when a request is handled by FakeWeb, because both libraries work by patching Net::HTTP. * To fix this, just reorder your requires so that FakeWeb is before #{name}. TEXT end $stderr.puts "\n" + warnings.join("\n") + "\n" if warnings.any? end |
.puts_warning_for_net_http_replacement_libs_if_needed ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/fake_web/utility.rb', line 74 def self.puts_warning_for_net_http_replacement_libs_if_needed libs = {"RightHttpConnection" => defined?(RightHttpConnection)} warnings = libs.select { |_, loaded| loaded }. reject { |name, _| @loaded_net_http_replacement_libs.include?(name) }. map do |name, _| <<-TEXT.gsub(/ {10}/, '') \e[1mWarning: #{name} was loaded after FakeWeb\e[0m * FakeWeb's code is being ignored, because #{name} replaces parts of Net::HTTP without deferring to other libraries. This will break Net::HTTP requests. * To fix this, just reorder your requires so that #{name} is before FakeWeb. TEXT end $stderr.puts "\n" + warnings.join("\n") + "\n" if warnings.any? end |
.record_loaded_net_http_replacement_libs ⇒ Object
69 70 71 72 |
# File 'lib/fake_web/utility.rb', line 69 def self.record_loaded_net_http_replacement_libs libs = {"RightHttpConnection" => defined?(RightHttpConnection)} @loaded_net_http_replacement_libs = libs.map { |name, loaded| name if loaded }.compact end |
.request_uri_as_string(net_http, request) ⇒ Object
Returns a string with a normalized version of a Net::HTTP request’s URI.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/fake_web/utility.rb', line 22 def self.request_uri_as_string(net_http, request) protocol = net_http.use_ssl? ? "https" : "http" path = request.path path = URI.parse(request.path).request_uri if request.path =~ /^http/ if request["authorization"] =~ /^Basic / userinfo = FakeWeb::Utility.decode_userinfo_from_header(request["authorization"]) userinfo = FakeWeb::Utility.encode_unsafe_chars_in_userinfo(userinfo) + "@" else userinfo = "" end #added to make it work with gem koala (0.8.0) delete_object( ) path.insert(0, '/') unless path.start_with?('/') uri = "#{protocol}://#{userinfo}#{net_http.address}:#{net_http.port}#{path}" end |
.strip_default_port_from_uri(uri) ⇒ Object
13 14 15 16 17 18 19 |
# File 'lib/fake_web/utility.rb', line 13 def self.strip_default_port_from_uri(uri) case uri when %r{^http://} then uri.sub(%r{:80(/|$)}, '\1') when %r{^https://} then uri.sub(%r{:443(/|$)}, '\1') else uri end end |
.uri_escape(*args) ⇒ Object
Wrapper for URI escaping that switches between URI::Parser#escape and URI.escape for 1.9-compatibility
43 44 45 46 47 48 49 |
# File 'lib/fake_web/utility.rb', line 43 def self.uri_escape(*args) if URI.const_defined?(:Parser) URI::Parser.new.escape(*args) else URI.escape(*args) end end |