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.
@@ -0,0 +1,9 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ /coverage
5
+ pkg/*
6
+ .yardoc/
7
+ doc/
8
+ *~
9
+ *#
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.3@beats-rack --create
@@ -0,0 +1,2 @@
1
+ --markup-provider=redcarpet
2
+ --markup=markdown
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,5 @@
1
+
2
+ ### 0.1.0 (2012-04-12)
3
+
4
+ * Added a CORS middleware
5
+ * Added a "no cache" middleware
@@ -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.
@@ -0,0 +1,13 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ $LOAD_PATH.unshift 'lib'
5
+
6
+ task :default => [:test]
7
+
8
+ desc 'Run test suite'
9
+ task :test do
10
+ Dir.glob('test/**/*_test.rb').each do |file|
11
+ require File.expand_path(file)
12
+ end
13
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'beats/rack/cors'
3
+ require 'beats/rack/no_cache'
@@ -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
@@ -0,0 +1,5 @@
1
+ module Beats
2
+ module Rack
3
+ VERSION = '0.1.0'
4
+ end
5
+ end
@@ -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
@@ -0,0 +1,8 @@
1
+ dir = File.dirname(File.expand_path(__FILE__))
2
+ $LOAD_PATH.unshift dir + '/../lib'
3
+
4
+ require 'rubygems'
5
+ require 'test/unit'
6
+ require 'pp'
7
+ require 'goliath/env'
8
+ require 'beats/rack'
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: