remi-rack-staticifier 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -18,8 +18,29 @@ You can use Rack::Staticifier to statically cache responses to your app.
18
18
 
19
19
  == Install
20
20
 
21
- ... coming soon ...
21
+ $ gem sources -a http://gems.github.com
22
+ $ sudo gem install remi-rack-staticifier
22
23
 
23
24
  == Usage
24
25
 
25
- ... coming soon ...
26
+ # this will cache ALL responses in a 'cache' directory
27
+ use Rack::Staticifier
28
+
29
+ # this will cache ALL responses in a 'public/my/cached/stuff' directory
30
+ use Rack::Staticifier, :root => 'public/my/cached/stuff'
31
+
32
+ # this will only cache requests with 'foo' in the URL
33
+ use Rack::Staticifier do |env, response|
34
+ env['PATH_INFO'].include?('foo')
35
+ end
36
+
37
+ # this will only cache requests with 'hi' in the response body
38
+ use Rack::Staticifier do |env, response|
39
+ # response is a regular Rack response, eg. [200, {}, ['hi there']]
40
+ body = ''
41
+ response.last.each {|string| body << string }
42
+ body.include?('hi')
43
+ end
44
+
45
+ # this will only cache requests with 'foo' in the URL (incase you don't want to pass a block)
46
+ use Rack::Staticifier, :cache_if => lambda { |env, response| env['PATH_INFO'].include?('foo') }
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 0
2
+ :patch: 1
3
3
  :major: 0
4
4
  :minor: 1
@@ -0,0 +1,28 @@
1
+ #! /usr/bin/env ruby
2
+ %w( rubygems sinatra rack/staticifier ).each {|lib| require lib }
3
+
4
+ # sinatra serves out of the public directory by default
5
+ use Rack::Staticifier, :root => 'public' do |env, response|
6
+ response.first == 200 # only staticly cache 200 responses, meaning /non-existent-page-name should render OK
7
+ end
8
+
9
+ $posts = {
10
+ 'hello-world' => 'Hello World!',
11
+ 'hi-there' => 'Hi from my blog post text'
12
+ }
13
+
14
+ get '/' do
15
+ "Home Page rendered at #{ Time.now }"
16
+ end
17
+
18
+ get '/:post.html' do
19
+ name = params['post']
20
+
21
+ if $posts.keys.include?(name)
22
+ $posts[name]
23
+
24
+ else
25
+ status 404
26
+ "Cannot find page: #{ name }"
27
+ end
28
+ end
@@ -1,6 +1,31 @@
1
1
  module Rack #:nodoc:
2
2
 
3
- # Rack::Staticifier doco ...
3
+ # Rack::Staticifier is Rack middleware for staticly caching responses.
4
+ #
5
+ # ==== Usage
6
+ #
7
+ # # this will cache ALL responses in a 'cache' directory
8
+ # use Rack::Staticifier
9
+ #
10
+ # # this will cache ALL responses in a 'public/my/cached/stuff' directory
11
+ # use Rack::Staticifier, :root => 'public/my/cached/stuff'
12
+ #
13
+ # # this will only cache requests with 'foo' in the URL
14
+ # use Rack::Staticifier do |env, response|
15
+ # env['PATH_INFO'].include?('foo')
16
+ # end
17
+ #
18
+ # # this will only cache requests with 'hi' in the response body
19
+ # use Rack::Staticifier do |env, response|
20
+ # # response is a regular Rack response, eg. [200, {}, ['hi there']]
21
+ # body = ''
22
+ # response.last.each {|string| body << string }
23
+ # body.include?('hi')
24
+ # end
25
+ #
26
+ # # this will only cache requests with 'foo' in the URL (incase you don't want to pass a block)
27
+ # use Rack::Staticifier, :cache_if => lambda { |env, response| env['PATH_INFO'].include?('foo') }
28
+ #
4
29
  class Staticifier
5
30
 
6
31
  # the Rack application
@@ -37,6 +62,7 @@ module Rack #:nodoc:
37
62
 
38
63
  def cache_response env, response
39
64
  request_path = env['PATH_INFO']
65
+ request_path << 'index.html' if request_path.end_with?('/')
40
66
 
41
67
  basename = ::File.basename request_path
42
68
  dirname = ::File.join config[:root], ::File.dirname(request_path) # TODO grab 'public' from the config options
@@ -11,6 +11,27 @@ describe Rack::Staticifier do
11
11
  @app = lambda {|env| [200, {}, ["hello from #{env['PATH_INFO']}"]] }
12
12
  end
13
13
 
14
+ after :all do
15
+ %w( public cache foo ).each {|dir| FileUtils.rm_rf dir } # clean up!
16
+ end
17
+
18
+ it 'should render index.html for any requests ending in a slash' do
19
+ app = Rack::Staticifier.new @app
20
+
21
+ # for the '/' route
22
+ File.file?("cache/index.html").should be_false
23
+ RackBox.request app, "/"
24
+ File.file?("cache/index.html").should be_true
25
+ File.read("cache/index.html").should == "hello from /"
26
+
27
+ %w( foo/ bar/ ).each do |uri|
28
+ File.file?("cache/#{uri}index.html").should be_false
29
+ RackBox.request app, "/#{uri}"
30
+ File.file?("cache/#{uri}index.html").should be_true
31
+ File.read("cache/#{uri}index.html").should == "hello from /#{uri}"
32
+ end
33
+ end
34
+
14
35
  it 'should cache all requests by default (in cache directory)' do
15
36
  app = Rack::Staticifier.new @app
16
37
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remi-rack-staticifier
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
  - remi
@@ -29,6 +29,7 @@ files:
29
29
  - lib/rack
30
30
  - lib/rack/staticifier.rb
31
31
  - spec/rack-staticifier_spec.rb
32
+ - examples/my-sinatra-blog.rb
32
33
  has_rdoc: true
33
34
  homepage: http://github.com/remi/rack-staticifier
34
35
  post_install_message: