rack-cors 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rack-cors might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.travis.yml +4 -3
- data/{CHANGELOG → CHANGELOG.md} +9 -0
- data/Gemfile +1 -1
- data/README.md +15 -11
- data/lib/rack/cors.rb +4 -6
- data/lib/rack/cors/version.rb +1 -1
- data/rack-cors.gemspec +6 -6
- data/test/cors/test.cors.coffee +5 -0
- data/test/cors/test.cors.js +16 -8
- data/test/unit/cors_test.rb +45 -11
- data/test/unit/test.ru +1 -0
- metadata +31 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4545ac1af54d2749c6f78b031efef78c2d8ec7cb7f5395d64bd79ee4dbd953fc
|
4
|
+
data.tar.gz: 9fac4069c1fdc45c1cbfae5a4cd8cafd83a27533f4f1557b9ff773158343aa57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8752bb4af30efe706487939b2daaa8a5189dafac69935d75d5359273f72bf2260a60570d769695675c69efda9b9ccd86e2cddfe01e6bfff504216cfdb42f856c
|
7
|
+
data.tar.gz: 3bb3628b7b1d7a4cc25651be3dac3848d60e433a7887911a263cae258a619cb30446aa46be2cde278a7ca5176feceeb2f3dbf7394764c1dc4a34737ae58ec6eb
|
data/.travis.yml
CHANGED
data/{CHANGELOG → CHANGELOG.md}
RENAMED
@@ -1,6 +1,15 @@
|
|
1
1
|
# Change Log
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## 1.0.3 - 2019-03-24
|
5
|
+
### Changed
|
6
|
+
- Don't send 'Content-Type' header with pre-flight requests
|
7
|
+
- Allow ruby array for vary header config
|
8
|
+
|
9
|
+
## 1.0.2 - 2017-10-22
|
10
|
+
### Fixed
|
11
|
+
- Automatically allow simple headers when headers are set
|
12
|
+
|
4
13
|
## 1.0.1 - 2017-07-18
|
5
14
|
### Fixed
|
6
15
|
- Allow lambda origin configuration
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -13,7 +13,7 @@ Install the gem:
|
|
13
13
|
Or in your Gemfile:
|
14
14
|
|
15
15
|
```ruby
|
16
|
-
gem 'rack-cors'
|
16
|
+
gem 'rack-cors'
|
17
17
|
```
|
18
18
|
|
19
19
|
|
@@ -25,7 +25,6 @@ Put something like the code below in `config/application.rb` of your Rails appli
|
|
25
25
|
```ruby
|
26
26
|
module YourApp
|
27
27
|
class Application < Rails::Application
|
28
|
-
|
29
28
|
# ...
|
30
29
|
|
31
30
|
# Rails 5
|
@@ -33,7 +32,7 @@ module YourApp
|
|
33
32
|
config.middleware.insert_before 0, Rack::Cors do
|
34
33
|
allow do
|
35
34
|
origins '*'
|
36
|
-
resource '*', :
|
35
|
+
resource '*', headers: :any, methods: [:get, :post, :options]
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
@@ -42,15 +41,14 @@ module YourApp
|
|
42
41
|
config.middleware.insert_before 0, "Rack::Cors" do
|
43
42
|
allow do
|
44
43
|
origins '*'
|
45
|
-
resource '*', :
|
44
|
+
resource '*', headers: :any, methods: [:get, :post, :options]
|
46
45
|
end
|
47
46
|
end
|
48
|
-
|
49
47
|
end
|
50
48
|
end
|
51
49
|
```
|
52
50
|
|
53
|
-
We use `insert_before` to make sure `Rack::Cors` runs at the beginning of the stack to make sure it isn't interfered with
|
51
|
+
We use `insert_before` to make sure `Rack::Cors` runs at the beginning of the stack to make sure it isn't interfered with by other middleware (see `Rack::Cache` note in **Common Gotchas** section). Check out the [rails 4 example](https://github.com/cyu/rack-cors/tree/master/examples/rails4) and [rails 3 example](https://github.com/cyu/rack-cors/tree/master/examples/rails3).
|
54
52
|
|
55
53
|
See The [Rails Guide to Rack](http://guides.rubyonrails.org/rails_on_rack.html) for more details on rack middlewares or watch the [railscast](http://railscasts.com/episodes/151-rack-middleware).
|
56
54
|
|
@@ -69,16 +67,22 @@ use Rack::Cors do
|
|
69
67
|
|
70
68
|
resource '/file/list_all/', :headers => 'x-domain-token'
|
71
69
|
resource '/file/at/*',
|
72
|
-
:
|
73
|
-
:
|
74
|
-
:
|
75
|
-
:
|
70
|
+
methods: [:get, :post, :delete, :put, :patch, :options, :head],
|
71
|
+
headers: 'x-domain-token',
|
72
|
+
expose: ['Some-Custom-Response-Header'],
|
73
|
+
max_age: 600
|
76
74
|
# headers to expose
|
77
75
|
end
|
78
76
|
|
79
77
|
allow do
|
80
78
|
origins '*'
|
81
|
-
resource '/public/*', :
|
79
|
+
resource '/public/*', headers: :any, methods: :get
|
80
|
+
|
81
|
+
# Only allow a request for a specific host
|
82
|
+
resource '/api/v1/*',
|
83
|
+
headers: :any,
|
84
|
+
methods: :get,
|
85
|
+
if: proc { |env| env['HTTP_HOST'] == 'api.example.com' }
|
82
86
|
end
|
83
87
|
end
|
84
88
|
```
|
data/lib/rack/cors.rb
CHANGED
@@ -16,10 +16,8 @@ module Rack
|
|
16
16
|
# retaining the old key for backwards compatibility
|
17
17
|
ENV_KEY = 'rack.cors'.freeze
|
18
18
|
|
19
|
-
OPTIONS
|
20
|
-
VARY
|
21
|
-
CONTENT_TYPE = 'Content-Type'.freeze
|
22
|
-
TEXT_PLAIN = 'text/plain'.freeze
|
19
|
+
OPTIONS = 'OPTIONS'.freeze
|
20
|
+
VARY = 'Vary'.freeze
|
23
21
|
|
24
22
|
DEFAULT_VARY_HEADERS = ['Origin'].freeze
|
25
23
|
|
@@ -117,7 +115,7 @@ module Rack
|
|
117
115
|
else
|
118
116
|
DEFAULT_VARY_HEADERS
|
119
117
|
end
|
120
|
-
headers[VARY] = ((vary ? vary.split(/,\s*/) : []) + cors_vary_headers).uniq.join(', ')
|
118
|
+
headers[VARY] = ((vary ? ([vary].flatten.map { |v| v.split(/,\s*/) }.flatten) : []) + cors_vary_headers).uniq.join(', ')
|
121
119
|
end
|
122
120
|
|
123
121
|
if debug? && result = env[RACK_CORS]
|
@@ -363,7 +361,7 @@ module Rack
|
|
363
361
|
end
|
364
362
|
|
365
363
|
def process_preflight(env, result)
|
366
|
-
headers = {
|
364
|
+
headers = {}
|
367
365
|
|
368
366
|
request_method = env[HTTP_ACCESS_CONTROL_REQUEST_METHOD]
|
369
367
|
if request_method.nil?
|
data/lib/rack/cors/version.rb
CHANGED
data/rack-cors.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Rack::Cors::VERSION
|
9
9
|
spec.authors = ["Calvin Yu"]
|
10
10
|
spec.email = ["me@sourcebender.com"]
|
11
|
-
spec.description = %q{Middleware that will make Rack-based apps CORS compatible.
|
11
|
+
spec.description = %q{Middleware that will make Rack-based apps CORS compatible. Fork the project here: https://github.com/cyu/rack-cors}
|
12
12
|
spec.summary = %q{Middleware for enabling Cross-Origin Resource Sharing in Rack apps}
|
13
13
|
spec.homepage = "https://github.com/cyu/rack-cors"
|
14
14
|
spec.license = "MIT"
|
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler", "
|
22
|
-
spec.add_development_dependency "rake"
|
23
|
-
spec.add_development_dependency "minitest", "
|
24
|
-
spec.add_development_dependency "mocha", "
|
25
|
-
spec.add_development_dependency "rack-test", "
|
21
|
+
spec.add_development_dependency "bundler", ">= 1.16.0", '< 3'
|
22
|
+
spec.add_development_dependency "rake", "~> 12.3.0"
|
23
|
+
spec.add_development_dependency "minitest", "~> 5.11.0"
|
24
|
+
spec.add_development_dependency "mocha", "~> 1.6.0"
|
25
|
+
spec.add_development_dependency "rack-test", "~> 1.1.0"
|
26
26
|
end
|
data/test/cors/test.cors.coffee
CHANGED
@@ -12,6 +12,11 @@ describe 'CORS', ->
|
|
12
12
|
expect(data).to.eql('Hello world')
|
13
13
|
done()
|
14
14
|
|
15
|
+
it 'should allow PATCH access to dynamic resource', (done) ->
|
16
|
+
$.ajax("http://#{CORS_SERVER}/", type: 'PATCH').done (data, textStatus, jqXHR) ->
|
17
|
+
expect(data).to.eql('Hello world')
|
18
|
+
done()
|
19
|
+
|
15
20
|
it 'should allow HEAD access to dynamic resource', (done) ->
|
16
21
|
$.ajax("http://#{CORS_SERVER}/", type: 'HEAD').done (data, textStatus, jqXHR) ->
|
17
22
|
expect(jqXHR.status).to.eql(200)
|
data/test/cors/test.cors.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
// Generated by CoffeeScript
|
1
|
+
// Generated by CoffeeScript 2.3.1
|
2
2
|
(function() {
|
3
3
|
var CORS_SERVER;
|
4
4
|
|
@@ -6,21 +6,29 @@
|
|
6
6
|
|
7
7
|
describe('CORS', function() {
|
8
8
|
it('should allow access to dynamic resource', function(done) {
|
9
|
-
return $.get(
|
9
|
+
return $.get(`http://${CORS_SERVER}/`, function(data, status, xhr) {
|
10
10
|
expect(data).to.eql('Hello world');
|
11
11
|
return done();
|
12
12
|
});
|
13
13
|
});
|
14
14
|
it('should allow PUT access to dynamic resource', function(done) {
|
15
|
-
return $.ajax(
|
15
|
+
return $.ajax(`http://${CORS_SERVER}/`, {
|
16
16
|
type: 'PUT'
|
17
17
|
}).done(function(data, textStatus, jqXHR) {
|
18
18
|
expect(data).to.eql('Hello world');
|
19
19
|
return done();
|
20
20
|
});
|
21
21
|
});
|
22
|
+
it('should allow PATCH access to dynamic resource', function(done) {
|
23
|
+
return $.ajax(`http://${CORS_SERVER}/`, {
|
24
|
+
type: 'PATCH'
|
25
|
+
}).done(function(data, textStatus, jqXHR) {
|
26
|
+
expect(data).to.eql('Hello world');
|
27
|
+
return done();
|
28
|
+
});
|
29
|
+
});
|
22
30
|
it('should allow HEAD access to dynamic resource', function(done) {
|
23
|
-
return $.ajax(
|
31
|
+
return $.ajax(`http://${CORS_SERVER}/`, {
|
24
32
|
type: 'HEAD'
|
25
33
|
}).done(function(data, textStatus, jqXHR) {
|
26
34
|
expect(jqXHR.status).to.eql(200);
|
@@ -28,7 +36,7 @@
|
|
28
36
|
});
|
29
37
|
});
|
30
38
|
it('should allow DELETE access to dynamic resource', function(done) {
|
31
|
-
return $.ajax(
|
39
|
+
return $.ajax(`http://${CORS_SERVER}/`, {
|
32
40
|
type: 'DELETE'
|
33
41
|
}).done(function(data, textStatus, jqXHR) {
|
34
42
|
expect(data).to.eql('Hello world');
|
@@ -36,7 +44,7 @@
|
|
36
44
|
});
|
37
45
|
});
|
38
46
|
it('should allow OPTIONS access to dynamic resource', function(done) {
|
39
|
-
return $.ajax(
|
47
|
+
return $.ajax(`http://${CORS_SERVER}/`, {
|
40
48
|
type: 'OPTIONS'
|
41
49
|
}).done(function(data, textStatus, jqXHR) {
|
42
50
|
expect(jqXHR.status).to.eql(200);
|
@@ -44,7 +52,7 @@
|
|
44
52
|
});
|
45
53
|
});
|
46
54
|
it('should allow access to static resource', function(done) {
|
47
|
-
return $.get(
|
55
|
+
return $.get(`http://${CORS_SERVER}/static.txt`, function(data, status, xhr) {
|
48
56
|
expect($.trim(data)).to.eql("hello world");
|
49
57
|
return done();
|
50
58
|
});
|
@@ -52,7 +60,7 @@
|
|
52
60
|
return it('should allow post resource', function(done) {
|
53
61
|
return $.ajax({
|
54
62
|
type: 'POST',
|
55
|
-
url:
|
63
|
+
url: `http://${CORS_SERVER}/cors`,
|
56
64
|
beforeSend: function(xhr) {
|
57
65
|
return xhr.setRequestHeader('X-Requested-With', 'XMLHTTPRequest');
|
58
66
|
},
|
data/test/unit/cors_test.rb
CHANGED
@@ -19,11 +19,11 @@ end
|
|
19
19
|
|
20
20
|
module MiniTest::Assertions
|
21
21
|
def assert_cors_success(response)
|
22
|
-
|
22
|
+
assert !response.headers['Access-Control-Allow-Origin'].nil?, "Expected a successful CORS response"
|
23
23
|
end
|
24
24
|
|
25
25
|
def assert_not_cors_success(response)
|
26
|
-
|
26
|
+
assert response.headers['Access-Control-Allow-Origin'].nil?, "Expected a failed CORS response"
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -40,6 +40,18 @@ class CaptureResult
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
class FakeProxy
|
44
|
+
def initialize(app, options = {})
|
45
|
+
@app = app
|
46
|
+
end
|
47
|
+
|
48
|
+
def call(env)
|
49
|
+
status, headers, body = @app.call(env)
|
50
|
+
headers['Vary'] = %w(Origin User-Agent)
|
51
|
+
[status, headers, body]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
43
55
|
Rack::MockResponse.infect_an_assertion :assert_cors_success, :must_render_cors_success, :only_one_argument
|
44
56
|
Rack::MockResponse.infect_an_assertion :assert_not_cors_success, :wont_render_cors_success, :only_one_argument
|
45
57
|
|
@@ -48,11 +60,12 @@ describe Rack::Cors do
|
|
48
60
|
|
49
61
|
attr_accessor :cors_result
|
50
62
|
|
51
|
-
def load_app(name)
|
63
|
+
def load_app(name, options = {})
|
52
64
|
test = self
|
53
65
|
Rack::Builder.new do
|
54
66
|
use CaptureResult, :holder => test
|
55
67
|
eval File.read(File.dirname(__FILE__) + "/#{name}.ru")
|
68
|
+
use FakeProxy if options[:proxy]
|
56
69
|
map('/') do
|
57
70
|
run proc { |env|
|
58
71
|
[200, {'Content-Type' => 'text/html'}, ['success']]
|
@@ -133,6 +146,15 @@ describe Rack::Cors do
|
|
133
146
|
last_response.headers['Vary'].must_equal 'Origin, Host'
|
134
147
|
end
|
135
148
|
|
149
|
+
describe 'with array of upstream Vary headers' do
|
150
|
+
let(:app) { load_app('test', { proxy: true }) }
|
151
|
+
|
152
|
+
it 'should add to them' do
|
153
|
+
successful_cors_request '/vary_test'
|
154
|
+
last_response.headers['Vary'].must_equal 'Origin, User-Agent, Host'
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
136
158
|
it 'should add Vary header if Access-Control-Allow-Origin header was added and if it is specific' do
|
137
159
|
successful_cors_request '/', :origin => "http://192.168.0.3:8080"
|
138
160
|
last_response.headers['Access-Control-Allow-Origin'].must_equal 'http://192.168.0.3:8080'
|
@@ -244,6 +266,19 @@ describe Rack::Cors do
|
|
244
266
|
cors.call({'HTTP_ORIGIN' => 'test.com'})
|
245
267
|
end
|
246
268
|
end
|
269
|
+
|
270
|
+
it 'should use Logger if none is set' do
|
271
|
+
app = mock
|
272
|
+
app.stubs(:call).returns([200, {}, ['']])
|
273
|
+
|
274
|
+
logger = mock
|
275
|
+
Logger.expects(:new).returns(logger)
|
276
|
+
logger.expects(:tap).returns(logger)
|
277
|
+
logger.expects(:debug)
|
278
|
+
|
279
|
+
cors = Rack::Cors.new(app, :debug => true) {}
|
280
|
+
cors.call({'HTTP_ORIGIN' => 'test.com'})
|
281
|
+
end
|
247
282
|
end
|
248
283
|
|
249
284
|
describe 'preflight requests' do
|
@@ -280,6 +315,11 @@ describe Rack::Cors do
|
|
280
315
|
last_response.must_render_cors_success
|
281
316
|
end
|
282
317
|
|
318
|
+
it 'allows PATCH method' do
|
319
|
+
preflight_request('http://localhost:3000', '/', :methods => [ :patch ])
|
320
|
+
last_response.must_render_cors_success
|
321
|
+
end
|
322
|
+
|
283
323
|
it 'should allow header case insensitive match' do
|
284
324
|
preflight_request('http://localhost:3000', '/single_header', :headers => 'X-Domain-Token')
|
285
325
|
last_response.must_render_cors_success
|
@@ -313,12 +353,6 @@ describe Rack::Cors do
|
|
313
353
|
last_response.headers['Access-Control-Allow-Origin'].must_equal 'file://'
|
314
354
|
end
|
315
355
|
|
316
|
-
it 'should return a Content-Type' do
|
317
|
-
preflight_request('http://localhost:3000', '/')
|
318
|
-
last_response.must_render_cors_success
|
319
|
-
last_response.headers['Content-Type'].wont_be_nil
|
320
|
-
end
|
321
|
-
|
322
356
|
describe '' do
|
323
357
|
|
324
358
|
let(:app) do
|
@@ -332,7 +366,7 @@ describe Rack::Cors do
|
|
332
366
|
end
|
333
367
|
end
|
334
368
|
map('/') do
|
335
|
-
run ->(env) { [500, {
|
369
|
+
run ->(env) { [500, {}, ['FAIL!']] }
|
336
370
|
end
|
337
371
|
end
|
338
372
|
end
|
@@ -389,7 +423,7 @@ describe Rack::Cors do
|
|
389
423
|
end
|
390
424
|
end
|
391
425
|
map('/') do
|
392
|
-
run ->(env) { [200, {'
|
426
|
+
run ->(env) { [200, {'Access-Control-Allow-Origin' => 'http://foo.net'}, ['success']] }
|
393
427
|
end
|
394
428
|
end
|
395
429
|
end
|
data/test/unit/test.ru
CHANGED
@@ -19,6 +19,7 @@ use Rack::Cors do
|
|
19
19
|
resource '/expose_multiple_headers', :expose => %w{expose-test-1 expose-test-2}
|
20
20
|
resource '/conditional', :methods => :get, :if => proc { |env| !!env['HTTP_X_OK'] }
|
21
21
|
resource '/vary_test', :methods => :get, :vary => %w{ Origin Host }
|
22
|
+
resource '/patch_test', :methods => :patch
|
22
23
|
# resource '/file/at/*',
|
23
24
|
# :methods => [:get, :post, :put, :delete],
|
24
25
|
# :headers => :any,
|
metadata
CHANGED
@@ -1,87 +1,92 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-cors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Calvin Yu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.16.0
|
20
|
+
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
22
|
+
version: '3'
|
20
23
|
type: :development
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.16.0
|
30
|
+
- - "<"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
32
|
+
version: '3'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rake
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- - "
|
37
|
+
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
39
|
+
version: 12.3.0
|
34
40
|
type: :development
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
|
-
- - "
|
44
|
+
- - "~>"
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
46
|
+
version: 12.3.0
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: minitest
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- - "
|
51
|
+
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: 5.
|
53
|
+
version: 5.11.0
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
|
-
- - "
|
58
|
+
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: 5.
|
60
|
+
version: 5.11.0
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: mocha
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
|
-
- - "
|
65
|
+
- - "~>"
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
67
|
+
version: 1.6.0
|
62
68
|
type: :development
|
63
69
|
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
|
-
- - "
|
72
|
+
- - "~>"
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
74
|
+
version: 1.6.0
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
76
|
name: rack-test
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
72
78
|
requirements:
|
73
|
-
- - "
|
79
|
+
- - "~>"
|
74
80
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
81
|
+
version: 1.1.0
|
76
82
|
type: :development
|
77
83
|
prerelease: false
|
78
84
|
version_requirements: !ruby/object:Gem::Requirement
|
79
85
|
requirements:
|
80
|
-
- - "
|
86
|
+
- - "~>"
|
81
87
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
83
|
-
description: 'Middleware that will make Rack-based apps CORS compatible.
|
84
|
-
here: http://blog.sourcebender.com/2010/06/09/introducin-rack-cors.html. Fork the
|
88
|
+
version: 1.1.0
|
89
|
+
description: 'Middleware that will make Rack-based apps CORS compatible. Fork the
|
85
90
|
project here: https://github.com/cyu/rack-cors'
|
86
91
|
email:
|
87
92
|
- me@sourcebender.com
|
@@ -90,7 +95,7 @@ extensions: []
|
|
90
95
|
extra_rdoc_files: []
|
91
96
|
files:
|
92
97
|
- ".travis.yml"
|
93
|
-
- CHANGELOG
|
98
|
+
- CHANGELOG.md
|
94
99
|
- Gemfile
|
95
100
|
- LICENSE.txt
|
96
101
|
- README.md
|
@@ -129,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
134
|
version: '0'
|
130
135
|
requirements: []
|
131
136
|
rubyforge_project:
|
132
|
-
rubygems_version: 2.
|
137
|
+
rubygems_version: 2.7.6
|
133
138
|
signing_key:
|
134
139
|
specification_version: 4
|
135
140
|
summary: Middleware for enabling Cross-Origin Resource Sharing in Rack apps
|