netrecorder 0.1.2 → 0.1.3
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.
- data/Manifest +0 -1
- data/README.rdoc +4 -0
- data/Rakefile +4 -3
- data/features/manage_cache.feature +9 -1
- data/features/step_definitions/manage_cache_steps.rb +26 -18
- data/lib/http.rb +8 -14
- data/lib/netrecorder.rb +9 -9
- data/netrecorder.gemspec +15 -5
- metadata +45 -27
- data.tar.gz.sig +0 -1
- metadata.gz.sig +0 -0
data/Manifest
CHANGED
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
@@ -2,13 +2,14 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
4
|
|
5
|
-
Echoe.new('netrecorder', '0.1.
|
5
|
+
Echoe.new('netrecorder', '0.1.3') do |p|
|
6
6
|
p.description = "Record network responses for easy stubbing of external calls"
|
7
|
-
p.url = "http://github.com/
|
7
|
+
p.url = "http://github.com/chrisyoung/netrecorder"
|
8
8
|
p.author = "Chris Young"
|
9
9
|
p.email = "beesucker@gmail.com"
|
10
10
|
p.ignore_pattern = ["tmp/*", "script/*"]
|
11
|
-
p.development_dependencies =
|
11
|
+
p.development_dependencies = %w(echoe cucumber rspec)
|
12
|
+
p.runtime_dependencies = %w(fakeweb)
|
12
13
|
end
|
13
14
|
|
14
15
|
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
@@ -9,7 +9,15 @@ Scenario: Cache a page
|
|
9
9
|
When I visit "http://www.example.com"
|
10
10
|
And I save the cache
|
11
11
|
Then the cache should contain the example body
|
12
|
-
|
12
|
+
|
13
|
+
Scenario: Cache a page with a Net::HTTP request with a block
|
14
|
+
Given caching is turned on
|
15
|
+
And a clear cache
|
16
|
+
When I visit "http://www.example.com" using a Net::HTTP request with a block
|
17
|
+
And I save the cache
|
18
|
+
Then the cache should contain the example body
|
19
|
+
And the Net::HTTP request should return the response
|
20
|
+
|
13
21
|
Scenario: Clear the cache
|
14
22
|
Given caching is turned on
|
15
23
|
Given a clear cache
|
@@ -2,6 +2,16 @@ require 'rubygems'
|
|
2
2
|
require 'fakeweb'
|
3
3
|
require "#{File.dirname(__FILE__)}/../../lib/netrecorder"
|
4
4
|
|
5
|
+
module NetRecorderMatchers
|
6
|
+
def be_the_example_dot_com_response
|
7
|
+
simple_matcher("the example.com response") do |given|
|
8
|
+
given =~ /You have reached this web page by typing.*example\.com/
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
World(NetRecorderMatchers)
|
14
|
+
|
5
15
|
Then "caching is turned on" do
|
6
16
|
NetRecorder.config do |config|
|
7
17
|
config.cache_file = File.join(File.dirname(__FILE__), '..', 'support', 'cache')
|
@@ -13,8 +23,20 @@ And /^I save the cache$/ do
|
|
13
23
|
NetRecorder.cache!
|
14
24
|
end
|
15
25
|
|
16
|
-
And /^I visit "([^\"]*)"$/ do |
|
17
|
-
Net::HTTP.get URI.parse(
|
26
|
+
And /^I visit "([^\"]*)"$/ do |url|
|
27
|
+
Net::HTTP.get URI.parse(url)
|
28
|
+
end
|
29
|
+
|
30
|
+
When /^I visit "([^\"]*)" using a Net::HTTP request with a block$/ do |url|
|
31
|
+
uri = URI.parse(url)
|
32
|
+
@last_response = Net::HTTP.new(uri.host, uri.port).start do |http|
|
33
|
+
http.get(uri.path.empty? ? '/' : uri.path)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
Then /^the Net::HTTP request should return the response$/ do
|
38
|
+
@last_response.should_not be_nil
|
39
|
+
@last_response.body.should be_the_example_dot_com_response
|
18
40
|
end
|
19
41
|
|
20
42
|
Given /^(?:a clear cache|I delete the cache)$/ do
|
@@ -22,21 +44,7 @@ Given /^(?:a clear cache|I delete the cache)$/ do
|
|
22
44
|
end
|
23
45
|
|
24
46
|
Then /^the cache should contain the example body$/ do
|
25
|
-
NetRecorder.fakes[
|
26
|
-
%Q{<HTML>
|
27
|
-
<HEAD>
|
28
|
-
<TITLE>Example Web Page</TITLE>
|
29
|
-
</HEAD>
|
30
|
-
<body>
|
31
|
-
<p>You have reached this web page by typing "example.com",
|
32
|
-
"example.net",
|
33
|
-
or "example.org" into your web browser.</p>
|
34
|
-
<p>These domain names are reserved for use in documentation and are not available
|
35
|
-
for registration. See <a href="http://www.rfc-editor.org/rfc/rfc2606.txt">RFC
|
36
|
-
2606</a>, Section 3.</p>
|
37
|
-
</BODY>
|
38
|
-
</HTML>
|
39
|
-
}
|
47
|
+
NetRecorder.fakes.first[1][:body].first[:body].should be_the_example_dot_com_response
|
40
48
|
end
|
41
49
|
|
42
50
|
Given /^a cached example page$/ do
|
@@ -50,7 +58,7 @@ Then /^the cache should be empty$/ do
|
|
50
58
|
end
|
51
59
|
|
52
60
|
Then /^the example entry should have (.+) responses$/ do |count|
|
53
|
-
NetRecorder.fakes[
|
61
|
+
NetRecorder.fakes.first[1][:body].length.should == count.to_i
|
54
62
|
end
|
55
63
|
|
56
64
|
Given /^I have turned on fakeweb$/ do
|
data/lib/http.rb
CHANGED
@@ -4,18 +4,17 @@ module NetRecorder
|
|
4
4
|
def self.extended(base) #:nodoc:
|
5
5
|
base.class_eval do
|
6
6
|
alias :alias_for_request :request
|
7
|
-
@@fakes = fakes_cache ||
|
7
|
+
@@fakes = fakes_cache || []
|
8
8
|
|
9
9
|
# request is overridden and the request and response are stored as a hash that can be written to a cache file
|
10
10
|
def request(req, body = nil, &block)
|
11
11
|
response = alias_for_request(req, body)
|
12
12
|
path = "http://#{req.bauth if req.bauth}#{req['host']}#{req.path}"
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
return response
|
13
|
+
existing_fake = @@fakes.select {|fake| fake[0] == path && fake[1][:method] == req.method}.first
|
14
|
+
existing_fake[1][:body] << {:body => response.body.to_s} and return response if existing_fake
|
15
|
+
@@fakes << [path, {:method => req.method, :body => [{:body => response.body.to_s}]}]
|
16
|
+
yield response if block
|
17
|
+
response
|
19
18
|
end
|
20
19
|
|
21
20
|
# returns the fakes hash
|
@@ -24,7 +23,7 @@ module NetRecorder
|
|
24
23
|
end
|
25
24
|
|
26
25
|
def self.clear_netrecorder_cache! #:nodoc:
|
27
|
-
@@fakes =
|
26
|
+
@@fakes = []
|
28
27
|
end
|
29
28
|
end
|
30
29
|
end
|
@@ -42,9 +41,4 @@ def fakes_cache #:nodoc:
|
|
42
41
|
|
43
42
|
return fakes if fakes.class == Hash
|
44
43
|
nil
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
def init_netrecorder_cache #:nodoc:
|
49
|
-
{'GET' => {}, 'POST' => {}, 'DELETE' => {}, 'PUT' => {}}
|
50
|
-
end
|
44
|
+
end
|
data/lib/netrecorder.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# NetRecorder allows you to record requests and responses from the web
|
2
2
|
|
3
3
|
require 'fakeweb'
|
4
|
+
require 'yaml'
|
4
5
|
require "#{File.dirname(__FILE__)}/http"
|
5
6
|
require "#{File.dirname(__FILE__)}/http_header"
|
6
7
|
require "#{File.dirname(__FILE__)}/config"
|
@@ -14,9 +15,11 @@ module NetRecorder
|
|
14
15
|
end
|
15
16
|
|
16
17
|
def self.fakes
|
17
|
-
File.
|
18
|
-
|
19
|
-
|
18
|
+
if File.exist?(@@config.cache_file)
|
19
|
+
File.open(@@config.cache_file, "r") do |f|
|
20
|
+
YAML.load(f.read)
|
21
|
+
end
|
22
|
+
end || []
|
20
23
|
end
|
21
24
|
|
22
25
|
# configure netrecorder
|
@@ -24,9 +27,9 @@ module NetRecorder
|
|
24
27
|
@@configured ||= nil
|
25
28
|
@@config = Config.new
|
26
29
|
yield @@config
|
30
|
+
record_net_calls
|
27
31
|
clear_cache! if @@config.clear_cache
|
28
32
|
fakeweb if @@config.fakeweb
|
29
|
-
record_net_calls if @@config.record_net_calls
|
30
33
|
end
|
31
34
|
|
32
35
|
# returns true if record_net_calls is set to true in the config
|
@@ -50,11 +53,8 @@ module NetRecorder
|
|
50
53
|
private
|
51
54
|
# load the cache and register all of the urls with fakeweb
|
52
55
|
def self.fakeweb
|
53
|
-
fakes.each do |
|
54
|
-
|
55
|
-
path = url
|
56
|
-
FakeWeb.register_uri(method.downcase.to_sym, url, body)
|
57
|
-
end
|
56
|
+
fakes.each do |fake|
|
57
|
+
FakeWeb.register_uri(fake[1][:method].downcase.to_sym, fake[0], fake[1][:body])
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
data/netrecorder.gemspec
CHANGED
@@ -2,22 +2,20 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{netrecorder}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.3"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Chris Young"]
|
9
|
-
s.
|
10
|
-
s.date = %q{2010-01-05}
|
9
|
+
s.date = %q{2010-01-21}
|
11
10
|
s.description = %q{Record network responses for easy stubbing of external calls}
|
12
11
|
s.email = %q{beesucker@gmail.com}
|
13
12
|
s.extra_rdoc_files = ["README.rdoc", "lib/config.rb", "lib/http.rb", "lib/http_header.rb", "lib/netrecorder.rb"]
|
14
13
|
s.files = ["Manifest", "README.rdoc", "Rakefile", "features/manage_cache.feature", "features/step_definitions/manage_cache_steps.rb", "features/support/env.rb", "lib/config.rb", "lib/http.rb", "lib/http_header.rb", "lib/netrecorder.rb", "netrecorder.gemspec"]
|
15
|
-
s.homepage = %q{http://github.com/
|
14
|
+
s.homepage = %q{http://github.com/chrisyoung/netrecorder}
|
16
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Netrecorder", "--main", "README.rdoc"]
|
17
16
|
s.require_paths = ["lib"]
|
18
17
|
s.rubyforge_project = %q{netrecorder}
|
19
18
|
s.rubygems_version = %q{1.3.5}
|
20
|
-
s.signing_key = %q{/Volumes/Secure/Certificates/gem-private_key.pem}
|
21
19
|
s.summary = %q{Record network responses for easy stubbing of external calls}
|
22
20
|
|
23
21
|
if s.respond_to? :specification_version then
|
@@ -25,8 +23,20 @@ Gem::Specification.new do |s|
|
|
25
23
|
s.specification_version = 3
|
26
24
|
|
27
25
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
26
|
+
s.add_runtime_dependency(%q<fakeweb>, [">= 0"])
|
27
|
+
s.add_development_dependency(%q<echoe>, [">= 0"])
|
28
|
+
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
29
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
28
30
|
else
|
31
|
+
s.add_dependency(%q<fakeweb>, [">= 0"])
|
32
|
+
s.add_dependency(%q<echoe>, [">= 0"])
|
33
|
+
s.add_dependency(%q<cucumber>, [">= 0"])
|
34
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
29
35
|
end
|
30
36
|
else
|
37
|
+
s.add_dependency(%q<fakeweb>, [">= 0"])
|
38
|
+
s.add_dependency(%q<echoe>, [">= 0"])
|
39
|
+
s.add_dependency(%q<cucumber>, [">= 0"])
|
40
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
31
41
|
end
|
32
42
|
end
|
metadata
CHANGED
@@ -1,39 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netrecorder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Young
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
- |
|
12
|
-
-----BEGIN CERTIFICATE-----
|
13
|
-
MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMRMwEQYDVQQDDApjaHJp
|
14
|
-
c3lvdW5nMRUwEwYKCZImiZPyLGQBGRYFYnV6YXoxEzARBgoJkiaJk/IsZAEZFgNj
|
15
|
-
b20wHhcNMTAwMTAxMDE0MTA2WhcNMTEwMTAxMDE0MTA2WjBBMRMwEQYDVQQDDApj
|
16
|
-
aHJpc3lvdW5nMRUwEwYKCZImiZPyLGQBGRYFYnV6YXoxEzARBgoJkiaJk/IsZAEZ
|
17
|
-
FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDu37vOHls+p6xf
|
18
|
-
vzazqbwWkjZhh+p6t8cMhDKzMD2O+ITMSIouKg8z2DkIDtvSnkZb3pfWEC/YkZu1
|
19
|
-
79RahOE79mSC4IB1gLeyEMmTg1TPJkNxIuoG632Sp09j2Eg8EUW1EToSFsh+gIwz
|
20
|
-
FcCBFWQ1yq0IgfQZ9+RM8a8Ei6uKfQXmm4wK6vZT5Lxp8Dv0nELoO1dkYV1WXkGh
|
21
|
-
AAFhUMX2Y9tp0x2XZztO2Z+AUL4GYD1PyU2Afh7qp/qQJZMVS0YJjulB2bnW2yn/
|
22
|
-
7vlBadeBo3Ohp1J+OJuMUtmnuOAcKo+4cbj3HT4xTyuUa+V3izENJKX3qWCTk1D+
|
23
|
-
mU8TzNlzAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
|
24
|
-
BBSTLbhEokEPfV+oVZKmXVmGucmgljANBgkqhkiG9w0BAQUFAAOCAQEAQqRkDRig
|
25
|
-
aHqxsoqnJjG9FgZCIidnYhLNj7c3hXy8OQKJMZYau5VSDZb8dS4hC+jxQuyXiRJr
|
26
|
-
z5E16Gbqkb2fRC/YU63FnfIg2ce7PlGTp8yw0Xypn3QBYywDAWWJS4TdguikEDOM
|
27
|
-
e8IOmSKyOVJ7Zn6DIC0qyVtdcacXuKXWqqYQaWNwFwlaSlud5mQlyB77lcj5E5Lc
|
28
|
-
2mBFwT18jFQay2vOU/lgBDXBQ/VmrgL22gnhLL2nSf++CHM8miqa39Jk2MPaTbMs
|
29
|
-
tMtvELogNijvQYORkxU83coIjJ0bIsxgbjeBoFEcWCKkq/e8uSLULcJR4nULhvR3
|
30
|
-
bIN1xy1IiuNcvw==
|
31
|
-
-----END CERTIFICATE-----
|
10
|
+
cert_chain: []
|
32
11
|
|
33
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-21 00:00:00 -07:00
|
34
13
|
default_executable:
|
35
|
-
dependencies:
|
36
|
-
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: fakeweb
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: echoe
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: cucumber
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0"
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: rspec
|
47
|
+
type: :development
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
37
55
|
description: Record network responses for easy stubbing of external calls
|
38
56
|
email: beesucker@gmail.com
|
39
57
|
executables: []
|
@@ -59,7 +77,7 @@ files:
|
|
59
77
|
- lib/netrecorder.rb
|
60
78
|
- netrecorder.gemspec
|
61
79
|
has_rdoc: true
|
62
|
-
homepage: http://github.com/
|
80
|
+
homepage: http://github.com/chrisyoung/netrecorder
|
63
81
|
licenses: []
|
64
82
|
|
65
83
|
post_install_message:
|
data.tar.gz.sig
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
>ϊ�^�êƸʶ.�����n�y]��� B�)̸���=7b�J�垉=�4
|
metadata.gz.sig
DELETED
Binary file
|