rack-try_static 0.0.4 → 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/Rakefile +26 -0
- data/lib/rack/contrib/try_static.rb +13 -13
- data/rack-try_static.gemspec +49 -0
- data/test/documents/index.htm +1 -0
- data/test/documents/index.html +1 -0
- data/test/spec_rack_try_static.rb +51 -0
- metadata +13 -8
data/Rakefile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'rake/rdoctask'
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
4
|
+
desc "Run all the tests"
|
5
|
+
task :default => [:test]
|
6
|
+
|
7
|
+
desc "Generate RDox"
|
8
|
+
task "RDOX" do
|
9
|
+
sh "specrb -Ilib:test -a --rdox >RDOX"
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Run specs with test/unit style output"
|
13
|
+
task :test do
|
14
|
+
sh "specrb -Ilib:test -w #{ENV['TEST'] || '-a'} #{ENV['TESTOPTS']}"
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run specs with specdoc style output"
|
18
|
+
task :spec do
|
19
|
+
sh "specrb -Ilib:test -s -w #{ENV['TEST'] || '-a'} #{ENV['TESTOPTS']}"
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Run all the tests"
|
23
|
+
task :fulltest do
|
24
|
+
sh "specrb -Ilib:test -w #{ENV['TEST'] || '-a'} #{ENV['TESTOPTS']}"
|
25
|
+
end
|
26
|
+
|
@@ -1,24 +1,24 @@
|
|
1
1
|
require 'rack/static'
|
2
2
|
|
3
3
|
module ::Rack
|
4
|
-
class TryStatic
|
4
|
+
class TryStatic
|
5
5
|
|
6
6
|
def initialize(app, options)
|
7
|
-
|
8
|
-
@try =
|
7
|
+
@app = app
|
8
|
+
@try = ['', *options.delete(:try)]
|
9
|
+
@static = ::Rack::Static.new(
|
10
|
+
lambda { [404, {}, []] },
|
11
|
+
options)
|
9
12
|
end
|
10
13
|
|
11
14
|
def call(env)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
private
|
20
|
-
def try_next(env)
|
21
|
-
env.merge('PATH_INFO' => env['PATH_INFO'] + @try[@next])
|
15
|
+
orig_path = env['PATH_INFO']
|
16
|
+
found = nil
|
17
|
+
@try.each do |path|
|
18
|
+
resp = @static.call(env.merge!({'PATH_INFO' => orig_path + path}))
|
19
|
+
break if 404 != resp[0] && found = resp
|
20
|
+
end
|
21
|
+
found or @app.call(env.merge!('PATH_INFO' => orig_path))
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env gem build
|
2
|
+
# encoding: utf-8
|
3
|
+
# vim: ft=ruby
|
4
|
+
|
5
|
+
require "base64"
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "rack-try_static"
|
9
|
+
s.version = "0.1.1"
|
10
|
+
s.date = Time.now.strftime '%Y-%m-%d'
|
11
|
+
|
12
|
+
s.authors = ["gmarik"]
|
13
|
+
s.email = Base64.decode64("Z21hcmlrQGdtYWlsLmNvbQ==\n")
|
14
|
+
|
15
|
+
s.homepage = "http://github.com/gmarik/rack-try_static"
|
16
|
+
s.summary = "rack middleware to serve static files with specified patterns"
|
17
|
+
s.description = "#{s.summary}. Check out http://gmarik.info/blog/2010/05/10/blogging-with-jekyll-and-heroku-for-free for more..."
|
18
|
+
|
19
|
+
s.cert_chain = nil
|
20
|
+
|
21
|
+
# files
|
22
|
+
s.files = `git ls-files`.split("\n")
|
23
|
+
|
24
|
+
#Dir["bin/*"].map(&File.method(:basename))
|
25
|
+
#s.default_executable = "example"
|
26
|
+
s.require_paths = ["lib"]
|
27
|
+
|
28
|
+
# Ruby version
|
29
|
+
s.required_ruby_version = ::Gem::Requirement.new(">= 1.8.6")
|
30
|
+
|
31
|
+
# dependencies
|
32
|
+
# RubyGems has runtime dependencies (add_dependency) and
|
33
|
+
s.add_dependency 'rack', '1.1.0'
|
34
|
+
|
35
|
+
s.has_rdoc = false
|
36
|
+
#s.extra_rdoc_files = %w[README.rdoc COPYING]
|
37
|
+
|
38
|
+
# development dependencies (add_development_dependency)
|
39
|
+
s.add_development_dependency "test-spec"
|
40
|
+
|
41
|
+
s.require_paths = %w[lib]
|
42
|
+
s.test_files = s.files.select {|path| path =~ /^test\/spec_.*\.rb/}
|
43
|
+
|
44
|
+
#s.post_install_message = s.name + ' installed'
|
45
|
+
|
46
|
+
# RubyForge
|
47
|
+
#s.rubyforge_project = "example"
|
48
|
+
end
|
49
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
index.htm
|
@@ -0,0 +1 @@
|
|
1
|
+
index.html
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'test/spec'
|
2
|
+
|
3
|
+
require 'rack'
|
4
|
+
require 'rack/contrib/try_static'
|
5
|
+
require 'rack/mock'
|
6
|
+
|
7
|
+
class DummyApp
|
8
|
+
def call(env)
|
9
|
+
[200, {}, ["Hello World"]]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def request(options = {})
|
15
|
+
options.merge!({
|
16
|
+
:urls => %w[/],
|
17
|
+
:root => ::File.expand_path(::File.dirname(__FILE__)),
|
18
|
+
})
|
19
|
+
|
20
|
+
@request =
|
21
|
+
Rack::MockRequest.new(
|
22
|
+
Rack::TryStatic.new(
|
23
|
+
DummyApp.new, options))
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "Rack::TryStatic" do
|
27
|
+
context 'when tries fail' do
|
28
|
+
it 'should not serve' do
|
29
|
+
res = request(:try => ['html']).get('/documents')
|
30
|
+
res.should.be.ok
|
31
|
+
res.body.should == "Hello World"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when tries succeed' do
|
36
|
+
it 'should serve first found' do
|
37
|
+
res = request(:try => ['.html', '/index.html', '/index.htm']).get('/documents')
|
38
|
+
res.should.be.ok
|
39
|
+
res.body.strip.should == "index.html"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when tries not needed' do
|
44
|
+
it 'should serve existing' do
|
45
|
+
res = request(:try => ['/index.html']).get('/documents/existing.html')
|
46
|
+
res.should.be.ok
|
47
|
+
res.body.strip.should == "existing.html"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
metadata
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-try_static
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- gmarik
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain:
|
17
|
-
date: 2010-09-
|
17
|
+
date: 2010-09-19 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
37
|
+
name: test-spec
|
38
38
|
prerelease: false
|
39
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
@@ -57,7 +57,12 @@ extra_rdoc_files: []
|
|
57
57
|
|
58
58
|
files:
|
59
59
|
- README.md
|
60
|
+
- Rakefile
|
60
61
|
- lib/rack/contrib/try_static.rb
|
62
|
+
- rack-try_static.gemspec
|
63
|
+
- test/documents/index.htm
|
64
|
+
- test/documents/index.html
|
65
|
+
- test/spec_rack_try_static.rb
|
61
66
|
has_rdoc: true
|
62
67
|
homepage: http://github.com/gmarik/rack-try_static
|
63
68
|
licenses: []
|
@@ -94,5 +99,5 @@ rubygems_version: 1.3.7
|
|
94
99
|
signing_key:
|
95
100
|
specification_version: 3
|
96
101
|
summary: rack middleware to serve static files with specified patterns
|
97
|
-
test_files:
|
98
|
-
|
102
|
+
test_files:
|
103
|
+
- test/spec_rack_try_static.rb
|