navigable-server 0.6.0 → 0.7.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.
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