cryx-cacheability 0.1.0 → 0.1.1

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/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: