netrecorder 0.1.1 → 0.1.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.
data.tar.gz.sig CHANGED
Binary file
data/Manifest CHANGED
@@ -1,6 +1,9 @@
1
1
  Manifest
2
2
  README.rdoc
3
3
  Rakefile
4
+ features/manage_cache.feature
5
+ features/step_definitions/manage_cache_steps.rb
6
+ features/support/env.rb
4
7
  lib/config.rb
5
8
  lib/http.rb
6
9
  lib/http_header.rb
data/README.rdoc CHANGED
@@ -55,7 +55,4 @@ record mode
55
55
  >> rake features RECORD_NET_CALLS=true
56
56
 
57
57
  cache mode
58
- >> rake features
59
-
60
- == Todo
61
- * Tests
58
+ >> rake features
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('netrecorder', '0.1.1') do |p|
5
+ Echoe.new('netrecorder', '0.1.2') do |p|
6
6
  p.description = "Record network responses for easy stubbing of external calls"
7
7
  p.url = "http://github.com/tombombadil/netrecorder"
8
8
  p.author = "Chris Young"
@@ -0,0 +1,33 @@
1
+ Feature: Manage cache
2
+ In order to speed up my testing and avoid network calls
3
+ As a user
4
+ I want to be able to manage the cache
5
+
6
+ Scenario: Cache a page
7
+ Given caching is turned on
8
+ And a clear cache
9
+ When I visit "http://www.example.com"
10
+ And I save the cache
11
+ Then the cache should contain the example body
12
+
13
+ Scenario: Clear the cache
14
+ Given caching is turned on
15
+ Given a clear cache
16
+ And a cached example page
17
+ When I delete the cache
18
+ Then the cache should be empty
19
+
20
+ Scenario: Cache the same page twice
21
+ Given caching is turned on
22
+ And a clear cache
23
+ When I visit "http://www.example.com"
24
+ When I visit "http://www.example.com"
25
+ And I save the cache
26
+ Then the example entry should have 2 responses
27
+
28
+ Scenario: Load from a cache
29
+ Given caching is turned on
30
+ Given a clear cache
31
+ And a cached example page
32
+ And I have turned on fakeweb
33
+ Then I should not hit the web if i visit the example page
@@ -0,0 +1,66 @@
1
+ require 'rubygems'
2
+ require 'fakeweb'
3
+ require "#{File.dirname(__FILE__)}/../../lib/netrecorder"
4
+
5
+ Then "caching is turned on" do
6
+ NetRecorder.config do |config|
7
+ config.cache_file = File.join(File.dirname(__FILE__), '..', 'support', 'cache')
8
+ config.record_net_calls = true
9
+ end
10
+ end
11
+
12
+ And /^I save the cache$/ do
13
+ NetRecorder.cache!
14
+ end
15
+
16
+ And /^I visit "([^\"]*)"$/ do |arg1|
17
+ Net::HTTP.get URI.parse('http://www.example.com/')
18
+ end
19
+
20
+ Given /^(?:a clear cache|I delete the cache)$/ do
21
+ NetRecorder.clear_cache!
22
+ end
23
+
24
+ Then /^the cache should contain the example body$/ do
25
+ NetRecorder.fakes['GET']['http://www.example.com/'].first[:body].should ==
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 &quot;example.com&quot;,
32
+ &quot;example.net&quot;,
33
+ or &quot;example.org&quot; 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
+ }
40
+ end
41
+
42
+ Given /^a cached example page$/ do
43
+ Given "caching is turned on"
44
+ When %Q{I visit "http://www.example.com"}
45
+ And "I save the cache"
46
+ end
47
+
48
+ Then /^the cache should be empty$/ do
49
+ NetRecorder.fakes.should == nil
50
+ end
51
+
52
+ Then /^the example entry should have (.+) responses$/ do |count|
53
+ NetRecorder.fakes['GET']['http://www.example.com/'].length.should == count.to_i
54
+ end
55
+
56
+ Given /^I have turned on fakeweb$/ do
57
+ NetRecorder.config do |config|
58
+ config.cache_file = File.join(File.dirname(__FILE__), '..', 'support', 'cache')
59
+ config.fakeweb = true
60
+ end
61
+ end
62
+
63
+ Then /^I should not hit the web if i visit the example page$/ do
64
+ FakeWeb.allow_net_connect = false
65
+ Proc.new{Net::HTTP.get URI.parse('http://www.example.com/')}.should_not raise_error
66
+ end
@@ -0,0 +1 @@
1
+ # Empty for now
data/lib/http.rb CHANGED
@@ -4,7 +4,7 @@ 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 || {'GET' => {}, 'POST' => {}, 'DELETE' => {}, 'PUT' => {}}
7
+ @@fakes = fakes_cache || init_netrecorder_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)
@@ -22,13 +22,17 @@ module NetRecorder
22
22
  def self.fakes
23
23
  @@fakes
24
24
  end
25
+
26
+ def self.clear_netrecorder_cache! #:nodoc:
27
+ @@fakes = init_netrecorder_cache
28
+ end
25
29
  end
26
30
  end
27
31
  end
28
32
  end
29
33
 
30
- # Loads the yaml from the cache file and returns a hash
31
- def fakes_cache
34
+
35
+ def fakes_cache #:nodoc:
32
36
  fakes =
33
37
  if File.exist?(NetRecorder.cache_file)
34
38
  File.open(NetRecorder.cache_file, "r") do |f|
@@ -39,3 +43,8 @@ def fakes_cache
39
43
  return fakes if fakes.class == Hash
40
44
  nil
41
45
  end
46
+
47
+
48
+ def init_netrecorder_cache #:nodoc:
49
+ {'GET' => {}, 'POST' => {}, 'DELETE' => {}, 'PUT' => {}}
50
+ end
data/lib/netrecorder.rb CHANGED
@@ -13,8 +13,15 @@ module NetRecorder
13
13
  @@config.cache_file
14
14
  end
15
15
 
16
+ def self.fakes
17
+ File.open(@@config.cache_file, "r") do |f|
18
+ YAML.load(f.read)
19
+ end if File.exist?(@@config.cache_file)
20
+ end
21
+
16
22
  # configure netrecorder
17
23
  def self.config
24
+ @@configured ||= nil
18
25
  @@config = Config.new
19
26
  yield @@config
20
27
  clear_cache! if @@config.clear_cache
@@ -37,15 +44,12 @@ module NetRecorder
37
44
  if File.exist?(@@config.cache_file)
38
45
  File.delete(@@config.cache_file)
39
46
  end
47
+ Net::HTTP.clear_netrecorder_cache!
40
48
  end
41
49
 
42
50
  private
43
51
  # load the cache and register all of the urls with fakeweb
44
52
  def self.fakeweb
45
- fakes = File.open(@@config.cache_file, "r") do |f|
46
- YAML.load(f.read)
47
- end
48
-
49
53
  fakes.each do |method, value|
50
54
  value.each do |url, body|
51
55
  path = url
@@ -56,7 +60,9 @@ private
56
60
 
57
61
  # extend NET library to record requests and responses
58
62
  def self.record_net_calls
63
+ return if @@configured
59
64
  Net::HTTP.extend(NetHTTP)
60
65
  Net::HTTPHeader.extend(NetHTTPHeader)
66
+ @@configured = true
61
67
  end
62
68
  end
data/netrecorder.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{netrecorder}
5
- s.version = "0.1.1"
5
+ s.version = "0.1.2"
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
9
  s.cert_chain = ["/Users/chrisyoung/Documents/certificates/gem-public_cert.pem"]
10
- s.date = %q{2010-01-04}
10
+ s.date = %q{2010-01-05}
11
11
  s.description = %q{Record network responses for easy stubbing of external calls}
12
12
  s.email = %q{beesucker@gmail.com}
13
13
  s.extra_rdoc_files = ["README.rdoc", "lib/config.rb", "lib/http.rb", "lib/http_header.rb", "lib/netrecorder.rb"]
14
- s.files = ["Manifest", "README.rdoc", "Rakefile", "lib/config.rb", "lib/http.rb", "lib/http_header.rb", "lib/netrecorder.rb", "netrecorder.gemspec"]
14
+ 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
15
  s.homepage = %q{http://github.com/tombombadil/netrecorder}
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Netrecorder", "--main", "README.rdoc"]
17
17
  s.require_paths = ["lib"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netrecorder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Young
@@ -30,7 +30,7 @@ cert_chain:
30
30
  bIN1xy1IiuNcvw==
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2010-01-04 00:00:00 -07:00
33
+ date: 2010-01-05 00:00:00 -07:00
34
34
  default_executable:
35
35
  dependencies: []
36
36
 
@@ -50,6 +50,9 @@ files:
50
50
  - Manifest
51
51
  - README.rdoc
52
52
  - Rakefile
53
+ - features/manage_cache.feature
54
+ - features/step_definitions/manage_cache_steps.rb
55
+ - features/support/env.rb
53
56
  - lib/config.rb
54
57
  - lib/http.rb
55
58
  - lib/http_header.rb
metadata.gz.sig CHANGED
Binary file