rack-gist 1.0.7 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.7
1
+ 1.1.0
data/lib/rack/gist.rb CHANGED
@@ -6,7 +6,9 @@ module Rack
6
6
  def initialize(app, options = {})
7
7
  @app = app
8
8
  @options = {
9
- :jquery => true
9
+ :jquery => true,
10
+ :cache_time => 3600,
11
+ :http_cache_time => 3600
10
12
  }.merge(options)
11
13
  end
12
14
 
@@ -55,15 +57,18 @@ module Rack
55
57
  def serve_gist(env)
56
58
  gist_id, file = path(env).match(regex)[1,2]
57
59
  cache = @options[:cache]
58
- gist = (cache ? cache.fetch(cache_key(gist_id, file), :expires_in => 3600) { get_gist(gist_id, file) } : get_gist(gist_id, file)).to_s
59
- [
60
- 200,
61
- {
62
- 'Content-Type' => 'application/javascript',
63
- 'Content-Length' => Rack::Utils.bytesize(gist).to_s
64
- },
65
- [gist]
66
- ]
60
+ gist = (cache ? cache.fetch(cache_key(gist_id, file), :expires_in => @options[:cache_time]) { get_gist(gist_id, file) } : get_gist(gist_id, file)).to_s
61
+ headers = {
62
+ 'Content-Type' => 'application/javascript',
63
+ 'Content-Length' => Rack::Utils.bytesize(gist).to_s,
64
+ 'Vary' => 'Accept-Encoding'
65
+ }
66
+
67
+ if @options[:http_cache_time]
68
+ headers['Cache-Control'] = "public, must-revalidate, max-age=#{@options[:http_cache_time]}"
69
+ end
70
+
71
+ [200, headers, [gist]]
67
72
  end
68
73
 
69
74
  def get_gist(gist_id, file)
data/rack-gist.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rack-gist}
8
- s.version = "1.0.7"
8
+ s.version = "1.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Daniel Huckstep"]
12
- s.date = %q{2010-08-24}
12
+ s.date = %q{2010-09-02}
13
13
  s.description = %q{Load gists in the background. KTHXBYE!}
14
14
  s.email = %q{darkhelmet@darkhelmetlive.com}
15
15
  s.extra_rdoc_files = [
@@ -143,7 +143,24 @@ describe "Rack::Gist" do
143
143
  headers['Content-Type'].should == 'application/javascript'
144
144
 
145
145
  RestClient.should_not_receive(:get)
146
- cache.should_receive(:fetch).once.with("rack-gist:#{@gist_id}:example.pig", :expires_in => 3600).and_return(body) # !.hour
146
+ cache.should_receive(:fetch).once.with("rack-gist:#{@gist_id}:example.pig", :expires_in => 3600).and_return(body) # 1.hour
147
+
148
+ status, headers, body2 = a.call(mock_env("/gist.github.com/#{@gist_id}/example.pig.js"))
149
+ status.should == 200
150
+ headers['Content-Type'].should == 'application/javascript'
151
+ body.should == body2
152
+ end
153
+ end
154
+
155
+ it 'should cache things for a different time if given cache_time' do
156
+ cache = ActiveSupport::Cache::MemoryStore.new
157
+ middleware(:cache => cache, :cache_time => 60).tap do |a|
158
+ status, headers, body = a.call(mock_env("/gist.github.com/#{@gist_id}/example.pig.js"))
159
+ status.should == 200
160
+ headers['Content-Type'].should == 'application/javascript'
161
+
162
+ RestClient.should_not_receive(:get)
163
+ cache.should_receive(:fetch).once.with("rack-gist:#{@gist_id}:example.pig", :expires_in => 60).and_return(body) # 1.hour
147
164
 
148
165
  status, headers, body2 = a.call(mock_env("/gist.github.com/#{@gist_id}/example.pig.js"))
149
166
  status.should == 200
@@ -158,4 +175,28 @@ describe "Rack::Gist" do
158
175
  status.should == 404
159
176
  end
160
177
  end
178
+
179
+ it 'should set http caching headers by default' do
180
+ middleware.tap do |a|
181
+ status, headers, body = a.call(mock_env("/gist.github.com/#{@gist_id}/example.pig.js"))
182
+ headers['Vary'].should == 'Accept-Encoding'
183
+ headers['Cache-Control'].should == 'public, must-revalidate, max-age=3600' # 1.hour
184
+ end
185
+ end
186
+
187
+ it 'should be able to configure cache time' do
188
+ middleware(:http_cache_time => 60).tap do |a|
189
+ status, headers, body = a.call(mock_env("/gist.github.com/#{@gist_id}/example.pig.js"))
190
+ headers['Vary'].should == 'Accept-Encoding'
191
+ headers['Cache-Control'].should == 'public, must-revalidate, max-age=60' # 1.hour
192
+ end
193
+ end
194
+
195
+ it 'should be able to disable caching by setting http_cache_time to nil' do
196
+ middleware(:http_cache_time => nil).tap do |a|
197
+ status, headers, body = a.call(mock_env("/gist.github.com/#{@gist_id}/example.pig.js"))
198
+ headers['Vary'].should == 'Accept-Encoding'
199
+ headers['Cache-Control'].should be_nil
200
+ end
201
+ end
161
202
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-gist
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 7
10
- version: 1.0.7
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Daniel Huckstep
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-24 00:00:00 -06:00
18
+ date: 2010-09-02 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency