webmock 0.7.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. data/CHANGELOG +9 -0
  2. data/README.md +169 -76
  3. data/Rakefile +2 -1
  4. data/VERSION +1 -1
  5. data/lib/webmock.rb +12 -9
  6. data/lib/webmock/adapters/rspec.rb +20 -22
  7. data/lib/webmock/adapters/rspec/matchers.rb +4 -4
  8. data/lib/webmock/adapters/rspec/webmock_matcher.rb +2 -2
  9. data/lib/webmock/adapters/test_unit.rb +20 -21
  10. data/lib/webmock/http_lib_adapters/net_http.rb +51 -15
  11. data/lib/webmock/request_profile.rb +5 -44
  12. data/lib/webmock/request_registry.rb +10 -11
  13. data/lib/webmock/request_signature.rb +44 -0
  14. data/lib/webmock/request_stub.rb +3 -3
  15. data/lib/webmock/response.rb +1 -1
  16. data/lib/webmock/rspec.rb +1 -0
  17. data/lib/webmock/test_unit.rb +1 -0
  18. data/lib/webmock/util/hash_counter.rb +16 -8
  19. data/lib/webmock/util/headers.rb +23 -0
  20. data/lib/webmock/util/uri.rb +81 -0
  21. data/lib/webmock/webmock.rb +16 -19
  22. data/spec/net_http_spec.rb +10 -9
  23. data/spec/other_net_http_libs_spec.rb +3 -1
  24. data/spec/request_profile_spec.rb +6 -116
  25. data/spec/request_registry_spec.rb +12 -17
  26. data/spec/request_signature_spec.rb +155 -0
  27. data/spec/request_stub_spec.rb +2 -2
  28. data/spec/response_spec.rb +1 -1
  29. data/spec/spec_helper.rb +4 -1
  30. data/spec/util/hash_counter_spec.rb +4 -4
  31. data/spec/util/headers_spec.rb +11 -0
  32. data/spec/util/uri_spec.rb +213 -0
  33. data/spec/vendor/addressable/lib/addressable/uri.rb +8 -0
  34. data/spec/vendor/addressable/lib/uri.rb +0 -0
  35. data/spec/webmock_spec.rb +58 -10
  36. data/test/test_helper.rb +5 -1
  37. data/test/test_webmock.rb +11 -6
  38. data/webmock.gemspec +21 -6
  39. metadata +28 -6
  40. data/lib/webmock/url.rb +0 -46
  41. data/lib/webmock/utility.rb +0 -65
  42. data/spec/utility_spec.rb +0 -70
@@ -4,13 +4,18 @@ require 'ostruct'
4
4
 
5
5
  class TestWebMock < Test::Unit::TestCase
6
6
 
7
- def http_request(method, url, options = {})
8
- url = URI.parse(url)
7
+ def http_request(method, uri, options = {})
8
+ begin
9
+ uri = URI.parse(uri)
10
+ rescue
11
+ uri = Addressable::URI.heuristic_parse(uri)
12
+ end
9
13
  response = nil
10
14
  clazz = Net::HTTP.const_get("#{method.to_s.capitalize}")
11
- req = clazz.new(url.path, options[:headers])
12
- http = Net::HTTP.new(url.host, url.port)
13
- http.use_ssl = true if url.scheme == "https"
15
+ req = clazz.new("#{uri.path}#{uri.query ? '?' : ''}#{uri.query}", options[:headers])
16
+ req.basic_auth uri.user, uri.password if uri.user
17
+ http = Net::HTTP.new(uri.host, uri.port)
18
+ http.use_ssl = true if uri.scheme == "https"
14
19
  response = http.start {|http|
15
20
  http.request(req, options[:body])
16
21
  }
@@ -18,7 +23,7 @@ class TestWebMock < Test::Unit::TestCase
18
23
  :body => response.body,
19
24
  :headers => response,
20
25
  :status => response.code })
21
- end
26
+ end
22
27
 
23
28
 
24
29
  def setup
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{webmock}
8
- s.version = "0.7.1"
8
+ s.version = "0.7.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bartosz Blimke"]
12
- s.date = %q{2009-11-20}
12
+ s.date = %q{2009-11-24}
13
13
  s.description = %q{WebMock allows stubbing HTTP requests and setting expectations on HTTP requests.}
14
14
  s.email = %q{bartosz.blimke@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
  ]
19
19
  s.files = [
20
20
  ".gitignore",
21
+ "CHANGELOG",
21
22
  "LICENSE",
22
23
  "README.md",
23
24
  "Rakefile",
@@ -34,23 +35,30 @@ Gem::Specification.new do |s|
34
35
  "lib/webmock/request_execution_verifier.rb",
35
36
  "lib/webmock/request_profile.rb",
36
37
  "lib/webmock/request_registry.rb",
38
+ "lib/webmock/request_signature.rb",
37
39
  "lib/webmock/request_stub.rb",
38
40
  "lib/webmock/response.rb",
39
- "lib/webmock/url.rb",
41
+ "lib/webmock/rspec.rb",
42
+ "lib/webmock/test_unit.rb",
40
43
  "lib/webmock/util/hash_counter.rb",
41
- "lib/webmock/utility.rb",
44
+ "lib/webmock/util/headers.rb",
45
+ "lib/webmock/util/uri.rb",
42
46
  "lib/webmock/webmock.rb",
43
47
  "spec/net_http_spec.rb",
44
48
  "spec/other_net_http_libs_spec.rb",
45
49
  "spec/request_execution_verifier_spec.rb",
46
50
  "spec/request_profile_spec.rb",
47
51
  "spec/request_registry_spec.rb",
52
+ "spec/request_signature_spec.rb",
48
53
  "spec/request_stub_spec.rb",
49
54
  "spec/response_spec.rb",
50
55
  "spec/spec.opts",
51
56
  "spec/spec_helper.rb",
52
57
  "spec/util/hash_counter_spec.rb",
53
- "spec/utility_spec.rb",
58
+ "spec/util/headers_spec.rb",
59
+ "spec/util/uri_spec.rb",
60
+ "spec/vendor/addressable/lib/addressable/uri.rb",
61
+ "spec/vendor/addressable/lib/uri.rb",
54
62
  "spec/vendor/right_http_connection-1.2.4/History.txt",
55
63
  "spec/vendor/right_http_connection-1.2.4/Manifest.txt",
56
64
  "spec/vendor/right_http_connection-1.2.4/README.txt",
@@ -88,11 +96,15 @@ Gem::Specification.new do |s|
88
96
  "spec/request_execution_verifier_spec.rb",
89
97
  "spec/request_profile_spec.rb",
90
98
  "spec/request_registry_spec.rb",
99
+ "spec/request_signature_spec.rb",
91
100
  "spec/request_stub_spec.rb",
92
101
  "spec/response_spec.rb",
93
102
  "spec/spec_helper.rb",
94
103
  "spec/util/hash_counter_spec.rb",
95
- "spec/utility_spec.rb",
104
+ "spec/util/headers_spec.rb",
105
+ "spec/util/uri_spec.rb",
106
+ "spec/vendor/addressable/lib/addressable/uri.rb",
107
+ "spec/vendor/addressable/lib/uri.rb",
96
108
  "spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb",
97
109
  "spec/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb",
98
110
  "spec/vendor/right_http_connection-1.2.4/setup.rb",
@@ -113,11 +125,14 @@ Gem::Specification.new do |s|
113
125
  s.specification_version = 3
114
126
 
115
127
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
128
+ s.add_runtime_dependency(%q<addressable>, [">= 2.1.1"])
116
129
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
117
130
  else
131
+ s.add_dependency(%q<addressable>, [">= 2.1.1"])
118
132
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
119
133
  end
120
134
  else
135
+ s.add_dependency(%q<addressable>, [">= 2.1.1"])
121
136
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
122
137
  end
123
138
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webmock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bartosz Blimke
@@ -9,9 +9,19 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-20 00:00:00 +00:00
12
+ date: 2009-11-24 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: addressable
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.1.1
24
+ version:
15
25
  - !ruby/object:Gem::Dependency
16
26
  name: rspec
17
27
  type: :development
@@ -33,6 +43,7 @@ extra_rdoc_files:
33
43
  - README.md
34
44
  files:
35
45
  - .gitignore
46
+ - CHANGELOG
36
47
  - LICENSE
37
48
  - README.md
38
49
  - Rakefile
@@ -49,23 +60,30 @@ files:
49
60
  - lib/webmock/request_execution_verifier.rb
50
61
  - lib/webmock/request_profile.rb
51
62
  - lib/webmock/request_registry.rb
63
+ - lib/webmock/request_signature.rb
52
64
  - lib/webmock/request_stub.rb
53
65
  - lib/webmock/response.rb
54
- - lib/webmock/url.rb
66
+ - lib/webmock/rspec.rb
67
+ - lib/webmock/test_unit.rb
55
68
  - lib/webmock/util/hash_counter.rb
56
- - lib/webmock/utility.rb
69
+ - lib/webmock/util/headers.rb
70
+ - lib/webmock/util/uri.rb
57
71
  - lib/webmock/webmock.rb
58
72
  - spec/net_http_spec.rb
59
73
  - spec/other_net_http_libs_spec.rb
60
74
  - spec/request_execution_verifier_spec.rb
61
75
  - spec/request_profile_spec.rb
62
76
  - spec/request_registry_spec.rb
77
+ - spec/request_signature_spec.rb
63
78
  - spec/request_stub_spec.rb
64
79
  - spec/response_spec.rb
65
80
  - spec/spec.opts
66
81
  - spec/spec_helper.rb
67
82
  - spec/util/hash_counter_spec.rb
68
- - spec/utility_spec.rb
83
+ - spec/util/headers_spec.rb
84
+ - spec/util/uri_spec.rb
85
+ - spec/vendor/addressable/lib/addressable/uri.rb
86
+ - spec/vendor/addressable/lib/uri.rb
69
87
  - spec/vendor/right_http_connection-1.2.4/History.txt
70
88
  - spec/vendor/right_http_connection-1.2.4/Manifest.txt
71
89
  - spec/vendor/right_http_connection-1.2.4/README.txt
@@ -125,11 +143,15 @@ test_files:
125
143
  - spec/request_execution_verifier_spec.rb
126
144
  - spec/request_profile_spec.rb
127
145
  - spec/request_registry_spec.rb
146
+ - spec/request_signature_spec.rb
128
147
  - spec/request_stub_spec.rb
129
148
  - spec/response_spec.rb
130
149
  - spec/spec_helper.rb
131
150
  - spec/util/hash_counter_spec.rb
132
- - spec/utility_spec.rb
151
+ - spec/util/headers_spec.rb
152
+ - spec/util/uri_spec.rb
153
+ - spec/vendor/addressable/lib/addressable/uri.rb
154
+ - spec/vendor/addressable/lib/uri.rb
133
155
  - spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb
134
156
  - spec/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb
135
157
  - spec/vendor/right_http_connection-1.2.4/setup.rb
@@ -1,46 +0,0 @@
1
- module WebMock
2
-
3
- class URL
4
-
5
- def self.normalize_uri(uri)
6
- return uri if uri.is_a?(Regexp)
7
- normalized_uri =
8
- case uri
9
- when URI then uri
10
- when String
11
- uri = 'http://' + uri unless uri.match('^https?://')
12
- URI.parse(uri)
13
- end
14
- normalized_uri.query = sort_query_params(normalized_uri.query)
15
- normalized_uri.normalize
16
- end
17
-
18
- def self.variations_of_uri_as_strings(uri_object)
19
- normalized_uri = normalize_uri(uri_object.dup)
20
- normalized_uri_string = normalized_uri.to_s
21
-
22
- variations = [normalized_uri_string]
23
-
24
- # if the port is implied in the original, add a copy with an explicit port
25
- if normalized_uri.default_port == normalized_uri.port
26
- variations << normalized_uri_string.sub(
27
- /#{Regexp.escape(normalized_uri.request_uri)}$/,
28
- ":#{normalized_uri.port}#{normalized_uri.request_uri}")
29
- end
30
-
31
- variations
32
- end
33
-
34
- private
35
-
36
- def self.sort_query_params(query)
37
- if query.nil? || query.empty?
38
- nil
39
- else
40
- query.split('&').sort.join('&')
41
- end
42
- end
43
-
44
- end
45
-
46
- end
@@ -1,65 +0,0 @@
1
- #This file is taken from FakeWeb (fakeweb.rubyforge.org/) and adopted
2
-
3
- module WebMock
4
- module Utility #:nodoc:
5
-
6
- def self.decode_userinfo_from_header(header)
7
- header.sub(/^Basic /, "").unpack("m").first
8
- end
9
-
10
- def self.encode_unsafe_chars_in_userinfo(userinfo)
11
- unsafe_in_userinfo = /[^#{URI::REGEXP::PATTERN::UNRESERVED};&=+$,]|^(#{URI::REGEXP::PATTERN::ESCAPED})/
12
- userinfo.split(":").map { |part| URI.escape(part, unsafe_in_userinfo) }.join(":")
13
- end
14
-
15
- def self.strip_default_port_from_uri(uri)
16
- case uri
17
- when %r{^http://} then uri.sub(%r{:80(/|$)}, '\1')
18
- when %r{^https://} then uri.sub(%r{:443(/|$)}, '\1')
19
- else uri
20
- end
21
- end
22
-
23
- def self.puts_warning_for_net_http_around_advice_libs_if_needed
24
- libs = {"Samuel" => defined?(Samuel)}
25
- warnings = libs.select { |_, loaded| loaded }.map do |name, _|
26
- <<-TEXT.gsub(/ {10}/, '')
27
- \e[1mWarning: WebMock was loaded after #{name}\e[0m
28
- * #{name}'s code is being ignored when a request is handled by WebMock,
29
- because both libraries work by patching Net::HTTP.
30
- * To fix this, just reorder your requires so that WebMock is before #{name}.
31
- TEXT
32
- end
33
- $stderr.puts "\n" + warnings.join("\n") + "\n" if warnings.any?
34
- end
35
-
36
- def self.record_loaded_net_http_replacement_libs
37
- libs = {"RightHttpConnection" => defined?(RightHttpConnection)}
38
- @loaded_net_http_replacement_libs = libs.map { |name, loaded| name if loaded }.compact
39
- end
40
-
41
- def self.puts_warning_for_net_http_replacement_libs_if_needed
42
- libs = {"RightHttpConnection" => defined?(RightHttpConnection)}
43
- warnings = libs.select { |_, loaded| loaded }.
44
- reject { |name, _| @loaded_net_http_replacement_libs.include?(name) }.
45
- map do |name, _|
46
- <<-TEXT.gsub(/ {10}/, '')
47
- \e[1mWarning: #{name} was loaded after WebMock\e[0m
48
- * WebMock's code is being ignored, because #{name} replaces parts of
49
- Net::HTTP without deferring to other libraries. This will break Net::HTTP requests.
50
- * To fix this, just reorder your requires so that #{name} is before WebMock.
51
- TEXT
52
- end
53
- $stderr.puts "\n" + warnings.join("\n") + "\n" if warnings.any?
54
- end
55
-
56
- def self.normalize_headers(headers)
57
- return nil unless headers
58
- array = headers.map { |name, value|
59
- [name.to_s.split(/_|-/).map { |segment| segment.capitalize }.join("-"), value.to_s]
60
- }
61
- Hash[*array.flatten]
62
- end
63
-
64
- end
65
- end
@@ -1,70 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe Utility do
4
-
5
- it "should decode_userinfo_from_header handles basic auth" do
6
- authorization_header = "Basic dXNlcm5hbWU6c2VjcmV0"
7
- userinfo = Utility.decode_userinfo_from_header(authorization_header)
8
- userinfo.should == "username:secret"
9
- end
10
-
11
- it "should encode unsafe chars in userinfo does not encode userinfo safe punctuation" do
12
- userinfo = "user;&=+$,:secret"
13
- userinfo.should == Utility.encode_unsafe_chars_in_userinfo(userinfo)
14
- end
15
-
16
- it "should encode unsafe chars in userinfo does not encode rfc 3986 unreserved characters" do
17
- userinfo = "-.!~*'()abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:secret"
18
- userinfo.should == Utility.encode_unsafe_chars_in_userinfo(userinfo)
19
- end
20
-
21
- it "should encode unsafe chars in userinfo does encode other characters" do
22
- userinfo, safe_userinfo = 'us#rn@me:sec//ret?"', 'us%23rn%40me:sec%2F%2Fret%3F%22'
23
- safe_userinfo.should == Utility.encode_unsafe_chars_in_userinfo(userinfo)
24
- end
25
-
26
- it "should strip_default_port_from_uri strips 80 from http with path" do
27
- uri = "http://example.com:80/foo/bar"
28
- stripped_uri = Utility.strip_default_port_from_uri(uri)
29
- stripped_uri.should == "http://example.com/foo/bar"
30
- end
31
-
32
- it "should strip_default_port_from_uri strips 80 from http without path" do
33
- uri = "http://example.com:80"
34
- stripped_uri = Utility.strip_default_port_from_uri(uri)
35
- stripped_uri.should == "http://example.com"
36
- end
37
-
38
- it "should strip_default_port_from_uri strips 443 from https without path" do
39
- uri = "https://example.com:443"
40
- stripped_uri = Utility.strip_default_port_from_uri(uri)
41
- stripped_uri.should == "https://example.com"
42
- end
43
-
44
- it "should strip_default_port_from_uri strips 443 from https" do
45
- uri = "https://example.com:443/foo/bar"
46
- stripped_uri = Utility.strip_default_port_from_uri(uri)
47
- stripped_uri.should == "https://example.com/foo/bar"
48
- end
49
-
50
- it "should strip_default_port_from_uri does not strip 8080 from http" do
51
- uri = "http://example.com:8080/foo/bar"
52
- uri.should == Utility.strip_default_port_from_uri(uri)
53
- end
54
-
55
- it "should strip_default_port_from_uri does not strip 443 from http" do
56
- uri = "http://example.com:443/foo/bar"
57
- uri.should == Utility.strip_default_port_from_uri(uri)
58
- end
59
-
60
- it "should strip_default_port_from_uri does not strip 80 from query string" do
61
- uri = "http://example.com/?a=:80&b=c"
62
- uri.should == Utility.strip_default_port_from_uri(uri)
63
- end
64
-
65
- it "should strip_default_port_from_uri does not modify strings that do not start with http or https" do
66
- uri = "httpz://example.com:80/"
67
- uri.should == Utility.strip_default_port_from_uri(uri)
68
- end
69
-
70
- end