navigable-server 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5938d19f2fef581f5329cb345a2141b9994d13de64a04a364a273095b52f3001
4
- data.tar.gz: 8463bc00fa4035f7d4d31212eef94c34c2bad9d21649cec59983e709e19a3651
3
+ metadata.gz: d3238ea73512027978b85f41e2c6c43b3af251f3290beb980356f568a8f95702
4
+ data.tar.gz: 226b37a18f21fec58e6cf87492ccb9e9867371848545c38b822f51dad7b40a81
5
5
  SHA512:
6
- metadata.gz: a79b3ed8a998efde770f54d2352774a2365ca9213ff49520810486e225f2b9a9fa6c8ce07ea5a18575fc580b620834aab1f319f44302ee960bff72bfb8a4665b
7
- data.tar.gz: 78299c73d9e5fe6c941dfd3d85e8e1f44f8d932e9b3b969092a1f234fcf67098d3d0ea132ff337420ad36595607044238a7c9f695ca403731aa868e5093dc6e1
6
+ metadata.gz: 5301252d54622cd12f6438f11b2e9cb5b7960833559aab0fd6fdcd61525905359a7167ac98404b3bcf0a3f7d7c579e7074dc389accdbcb93ce68a904fd2facdb
7
+ data.tar.gz: 4cb4ea7f3ba6bad54a31da6535e7dc633779757f0471c9a44db64b57434a4b2217dd753e3cde52d06ee81c3743f4b2a5053d98cbaa984aff080b2ea9f1d35f1f
@@ -15,6 +15,7 @@ require 'navigable/server/response'
15
15
  require 'navigable/server/rack_adapter'
16
16
  require 'navigable/server/router'
17
17
  require 'navigable/server/endpoint'
18
+ require 'navigable/server/cors'
18
19
 
19
20
  module Navigable
20
21
  module Server
@@ -24,6 +25,7 @@ module Navigable
24
25
 
25
26
  def self.rack_app
26
27
  @server ||= Rack::Builder.new(Server.router) do
28
+ use Navigable::Server::CORS::Middleware
27
29
  use Rack::BodyParser, :parsers => BODY_PARSERS
28
30
  use Rack::AbstractFormat
29
31
  end
@@ -0,0 +1,54 @@
1
+ module Navigable
2
+ module Server
3
+ class CORS
4
+ class << self
5
+ def config
6
+ yield(self)
7
+ end
8
+
9
+ def headers
10
+ @headers ||= {}
11
+ end
12
+
13
+ def headers=(headers)
14
+ raise ArgumentError.new("Expected headers to be a Hash, received a #{headers.class} instead") unless headers.is_a?(Hash)
15
+
16
+ @headers = headers
17
+ end
18
+ end
19
+
20
+ class Middleware
21
+ def initialize(app)
22
+ @app = app
23
+ end
24
+
25
+ def call(env)
26
+ return @app.call(env) unless cors_configured? && cors_request?(env)
27
+
28
+ cors_response
29
+ end
30
+
31
+ private
32
+
33
+ def cors_configured?
34
+ !Navigable::Server::CORS.headers.empty?
35
+ end
36
+
37
+ def cors_request?(env)
38
+ env['REQUEST_METHOD'] == 'OPTIONS'
39
+ end
40
+
41
+ def cors_response
42
+ [200, default_headers.merge(Navigable::Server::CORS.headers), []]
43
+ end
44
+
45
+ def default_headers
46
+ {
47
+ 'Content-Type' => 'text/plain',
48
+ 'Content-Length' => '0'
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Navigable
4
4
  module Server
5
- VERSION = "0.6.0"
5
+ VERSION = "0.7.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: navigable-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alan Ridlehoover
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-12-06 00:00:00.000000000 Z
12
+ date: 2020-12-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -197,6 +197,7 @@ files:
197
197
  - bin/console
198
198
  - bin/setup
199
199
  - lib/navigable/server.rb
200
+ - lib/navigable/server/cors.rb
200
201
  - lib/navigable/server/endpoint.rb
201
202
  - lib/navigable/server/rack_adapter.rb
202
203
  - lib/navigable/server/request.rb