cryx-cacheability 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :minor: 1
3
- :patch: 0
3
+ :patch: 1
4
4
  :major: 0
@@ -7,8 +7,12 @@ module RestClient
7
7
  class MockHTTPResponse
8
8
  attr_reader :code, :headers, :body
9
9
  def initialize(rack_response)
10
- @code, @headers, @body = rack_response
10
+ @code, @headers, io = rack_response
11
+ @body = ""
12
+ io.each{ |block| @body << block }
13
+ io.close if io.respond_to?(:close)
11
14
  end
15
+
12
16
  def to_hash
13
17
  @headers
14
18
  end
@@ -37,13 +41,20 @@ module RestClient
37
41
  "PATH_INFO" => path_info,
38
42
  "QUERY_STRING" => uri.query,
39
43
  "SERVER_NAME" => uri.host,
40
- "SERVER_PORT" => uri.port.to_s
44
+ "SERVER_PORT" => uri.port.to_s,
45
+ "rack.version" => Rack::VERSION,
46
+ "rack.run_once" => false,
47
+ "rack.multithread" => true,
48
+ "rack.multiprocess" => true,
49
+ "rack.url_scheme" => uri.scheme,
50
+ "rack.input" => StringIO.new,
51
+ "rack.errors" => StringIO.new # Rack-Cache writes errors into this field
41
52
  }
42
53
  debeautify_headers(additional_headers).each do |key, value|
43
54
  env.merge!("HTTP_"+key.to_s.gsub("-", "_").upcase => value)
44
55
  end
45
56
  response = MockHTTPResponse.new(cache.call(env))
46
- RestClient::Response.new(response.body.to_s, response)
57
+ RestClient::Response.new(response.body, response)
47
58
  else
48
59
  super(additional_headers)
49
60
  end
@@ -66,9 +77,8 @@ module RestClient
66
77
  response = get(debeautify_headers(http_headers), pass_through_cache=false)
67
78
  response.headers.delete(:x_content_digest) # don't know why, but it seems to make the validation fail if kept...
68
79
  [response.code, debeautify_headers( response.headers ), response.to_s]
69
- rescue RestClient::NotModified
70
- # should be modified to include response headers when the rest-client gem is up to date
71
- [304, {}, ""]
80
+ rescue RestClient::NotModified => e
81
+ [304, e.response.to_hash, ""]
72
82
  end
73
83
  end
74
84
  end
@@ -1,5 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
2
  require 'restclient'
3
+ require File.dirname(__FILE__) + '/../lib/cacheability/restclient'
4
+
3
5
 
4
6
  describe RestClient::CacheableResource do
5
7
  require File.dirname(__FILE__) + '/../lib/cacheability/restclient'
@@ -18,6 +20,8 @@ describe RestClient::CacheableResource do
18
20
  describe "correctly instantiated" do
19
21
  before do
20
22
  @mock_cache = mock('rack-cache singleton')
23
+ @mock_rack_errors = mock('string io')
24
+ @mock_304_net_http_response = mock('http response', :code => 304, :body => "", :to_hash => {'header1' => 'value1'})
21
25
  Rack::Cache.stub!(:new).and_return(@mock_cache)
22
26
  @env = {
23
27
  'REQUEST_METHOD' => 'GET',
@@ -31,7 +35,7 @@ describe RestClient::CacheableResource do
31
35
  end
32
36
 
33
37
  it "should pass through the cache" do
34
- @resource.cache.should_receive(:call).with( hash_including( @env.merge({'HTTP_ADDITIONAL_HEADER' => 'whatever'}) ) )
38
+ @resource.cache.should_receive(:call).with( hash_including( @env.merge({'HTTP_ADDITIONAL_HEADER' => 'whatever'}) ) ).and_return([200, {}, "response body"])
35
39
  @resource['/?q1=a&q2=b'].get(:additional_header => 'whatever')
36
40
  end
37
41
 
@@ -48,9 +52,9 @@ describe RestClient::CacheableResource do
48
52
  end
49
53
 
50
54
  it "should return a 304 not modified response if the call to the backend returned a 304 not modified response" do
51
- @resource.should_receive(:get).with({'ADDITIONAL-HEADER' => 'whatever'}, false).and_raise(RestClient::NotModified)
55
+ @resource.should_receive(:get).with({'ADDITIONAL-HEADER' => 'whatever'}, false).and_raise(RestClient::NotModified.new(@mock_304_net_http_response))
52
56
  response = @resource.call(@env.merge({'HTTP_ADDITIONAL_HEADER' => 'whatever'}))
53
- response.should == [304, {}, ""]
57
+ response.should == [304, {"header1"=>"value1"}, ""]
54
58
  end
55
59
 
56
60
  it "should render a RestClient::Response even when the data is coming from the cache" do
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,8 @@
1
+ require 'rubygems'
1
2
  require 'spec'
2
3
 
3
4
  $LOAD_PATH.unshift(File.dirname(__FILE__))
4
5
 
5
- require File.dirname(__FILE__) + '/../lib/cacheability'
6
6
 
7
7
  Spec::Runner.configure do |config|
8
8
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cryx-cacheability
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Rohr
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-02 00:00:00 -08:00
12
+ date: 2009-03-31 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,7 +22,7 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: "0"
24
24
  version:
25
- description: TODO
25
+ description: A gem that makes client-side caching of HTTP requests a no-brainer. It is built upon the Rack:Cache gem from Ryan Tomayko.
26
26
  email: cyril.rohr@irisa.fr
27
27
  executables: []
28
28
 
@@ -37,6 +37,7 @@ files:
37
37
  - lib/cacheability.rb
38
38
  - spec/cacheability_spec.rb
39
39
  - spec/spec_helper.rb
40
+ - spec/test.rb
40
41
  has_rdoc: true
41
42
  homepage: http://github.com/cryx/cacheability
42
43
  post_install_message: