beats-rack 0.1.0
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/.gitignore +9 -0
- data/.rvmrc +1 -0
- data/.yardopts +2 -0
- data/Gemfile +3 -0
- data/HISTORY.md +5 -0
- data/README.md +7 -0
- data/Rakefile +13 -0
- data/beats-rack.gemspec +24 -0
- data/lib/beats/rack.rb +3 -0
- data/lib/beats/rack/cors.rb +45 -0
- data/lib/beats/rack/no_cache.rb +18 -0
- data/lib/beats/version.rb +5 -0
- data/test/cors_test.rb +22 -0
- data/test/no_cache_test.rb +17 -0
- data/test/test_helper.rb +8 -0
- metadata +119 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm 1.9.3@beats-rack --create
|
data/.yardopts
ADDED
data/Gemfile
ADDED
data/HISTORY.md
ADDED
data/README.md
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
Beats Rack Middleware
|
2
|
+
=====================
|
3
|
+
|
4
|
+
An assorted collection of Goliath compatible Rack middleware.
|
5
|
+
|
6
|
+
* Beats::Rack::Cors - Adds Cross-Origin Resource Sharing headers for cross-domain Ajax calls.
|
7
|
+
* Beats::Rack::NoCache - Adds cache headers that tells clients that the response should never be cached.
|
data/Rakefile
ADDED
data/beats-rack.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "beats/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "beats-rack"
|
7
|
+
s.version = Beats::Rack::VERSION
|
8
|
+
s.authors = ["Niklas Holmgren"]
|
9
|
+
s.email = ["niklas@sutajio.se"]
|
10
|
+
s.homepage = "https://github.com/ProjectDaisy/beats-rack"
|
11
|
+
s.summary = %q{An assorted collection of Goliath compatible Rack middleware.}
|
12
|
+
s.description = %q{An assorted collection of Goliath compatible Rack middleware.}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.add_dependency 'goliath'
|
20
|
+
s.add_development_dependency 'rake'
|
21
|
+
s.add_development_dependency 'yard'
|
22
|
+
s.add_development_dependency 'redcarpet'
|
23
|
+
s.add_development_dependency 'github-markup'
|
24
|
+
end
|
data/lib/beats/rack.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'goliath/rack'
|
2
|
+
|
3
|
+
module Beats
|
4
|
+
module Rack
|
5
|
+
class Cors
|
6
|
+
include Goliath::Rack::AsyncMiddleware
|
7
|
+
|
8
|
+
DEFAULT_OPTIONS = {
|
9
|
+
:origin => '*',
|
10
|
+
:methods => 'GET',
|
11
|
+
:headers => 'Accept, Authorization, Content-Type, Origin',
|
12
|
+
:expose_headers => 'Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Location, Pragma'
|
13
|
+
}
|
14
|
+
|
15
|
+
def initialize(app, options = {})
|
16
|
+
super(app)
|
17
|
+
@options = DEFAULT_OPTIONS.merge(options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(env)
|
21
|
+
if env['REQUEST_METHOD'] == 'OPTIONS'
|
22
|
+
[200, cors_headers, []]
|
23
|
+
else
|
24
|
+
super(env)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def post_process(env, status, headers, body)
|
29
|
+
[status, cors_headers.merge(headers), body]
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def cors_headers
|
35
|
+
headers = {}
|
36
|
+
headers['Access-Control-Allow-Origin'] = @options[:origin]
|
37
|
+
headers['Access-Control-Allow-Methods'] = @options[:methods]
|
38
|
+
headers['Access-Control-Allow-Headers'] = @options[:headers]
|
39
|
+
headers['Access-Control-Expose-Headers'] = @options[:expose_headers]
|
40
|
+
headers
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'goliath/rack'
|
2
|
+
|
3
|
+
module Beats
|
4
|
+
module Rack
|
5
|
+
class NoCache
|
6
|
+
include Goliath::Rack::AsyncMiddleware
|
7
|
+
|
8
|
+
NO_CACHE_HEADERS = {
|
9
|
+
'Cache-Control' => 'no-store',
|
10
|
+
'Pragma' => 'no-cache'
|
11
|
+
}
|
12
|
+
|
13
|
+
def post_process(env, status, headers, body)
|
14
|
+
[status, NO_CACHE_HEADERS.merge(headers), body]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/test/cors_test.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.expand_path('test/test_helper')
|
2
|
+
|
3
|
+
class CorsTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@app = lambda do |env|
|
7
|
+
[200, {}, '']
|
8
|
+
end
|
9
|
+
@env = Goliath::Env.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_respond_to_options_and_return_default_cors_headers
|
13
|
+
@env['PATH_INFO'] = '/'
|
14
|
+
@env['REQUEST_METHOD'] = 'OPTIONS'
|
15
|
+
res = Beats::Rack::Cors.new(@app).call(@env)
|
16
|
+
assert_equal '*', res[1]['Access-Control-Allow-Origin']
|
17
|
+
assert_equal 'GET', res[1]['Access-Control-Allow-Methods']
|
18
|
+
assert_equal 'Accept, Authorization, Content-Type, Origin', res[1]['Access-Control-Allow-Headers']
|
19
|
+
assert_equal 'Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Location, Pragma', res[1]['Access-Control-Expose-Headers']
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path('test/test_helper')
|
2
|
+
|
3
|
+
class NoCacheTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@app = lambda do |env|
|
7
|
+
[200, {}, '']
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_should_return_cache_control_and_pragma_headers
|
12
|
+
res = Beats::Rack::NoCache.new(@app).post_process({}, 200, {}, '')
|
13
|
+
assert_equal 'no-store', res[1]['Cache-Control']
|
14
|
+
assert_equal 'no-cache', res[1]['Pragma']
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: beats-rack
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Niklas Holmgren
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: goliath
|
16
|
+
requirement: &70107904959620 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70107904959620
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &70107904959200 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70107904959200
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: yard
|
38
|
+
requirement: &70107904958760 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70107904958760
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: redcarpet
|
49
|
+
requirement: &70107904958340 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70107904958340
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: github-markup
|
60
|
+
requirement: &70107904957920 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70107904957920
|
69
|
+
description: An assorted collection of Goliath compatible Rack middleware.
|
70
|
+
email:
|
71
|
+
- niklas@sutajio.se
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- .rvmrc
|
78
|
+
- .yardopts
|
79
|
+
- Gemfile
|
80
|
+
- HISTORY.md
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- beats-rack.gemspec
|
84
|
+
- lib/beats/rack.rb
|
85
|
+
- lib/beats/rack/cors.rb
|
86
|
+
- lib/beats/rack/no_cache.rb
|
87
|
+
- lib/beats/version.rb
|
88
|
+
- test/cors_test.rb
|
89
|
+
- test/no_cache_test.rb
|
90
|
+
- test/test_helper.rb
|
91
|
+
homepage: https://github.com/ProjectDaisy/beats-rack
|
92
|
+
licenses: []
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options: []
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
requirements: []
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 1.8.17
|
112
|
+
signing_key:
|
113
|
+
specification_version: 3
|
114
|
+
summary: An assorted collection of Goliath compatible Rack middleware.
|
115
|
+
test_files:
|
116
|
+
- test/cors_test.rb
|
117
|
+
- test/no_cache_test.rb
|
118
|
+
- test/test_helper.rb
|
119
|
+
has_rdoc:
|