qeweney 0.2 → 0.3
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +1 -1
- data/README.md +2 -2
- data/TODO.md +34 -0
- data/lib/qeweney.rb +3 -1
- data/lib/qeweney/mime_types.rb +33 -0
- data/lib/qeweney/response.rb +24 -2
- data/lib/qeweney/status.rb +77 -0
- data/lib/qeweney/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63226f0b1696e99fb7c6cb322420ddf08fa6b9a0abd3652a5867c9186e0dd5b2
|
4
|
+
data.tar.gz: abb173aa33639169d3341e553bcbc91a8595727fae03844daebc0cb82e51b881
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d43894a867eaf901cb4cdecf0d907f9257ffcdf369dc89ad1528738f006c854d07bf9850e54fe2fef6e316576593fa8d829f13bc82b5a8ba700a2726daa861b
|
7
|
+
data.tar.gz: d5f6d8eb6b520200b0864defcf5ef16f53965de0bac7304ca0bdf685faadf3f7528b8fecf0ba9377a3338bffbd993b851eb9e76af22fdd5dd966d4348a5ee28b
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
data/TODO.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
## Serve files / arbitrary content
|
2
|
+
|
3
|
+
- `#serve_file(path, opts)`
|
4
|
+
- See here: https://golang.org/pkg/net/http/#ServeFile
|
5
|
+
- support for `Range` header
|
6
|
+
- support for caching (specified in opts)
|
7
|
+
- support for serving from routing path:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
req.route do
|
11
|
+
req.on 'assets' do
|
12
|
+
req.serve_file(req.routing_path, base_path: STATIC_PATH)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# or convenience method
|
17
|
+
req.route do
|
18
|
+
req.on_static_route 'assets', base_path: STATIC_PATH
|
19
|
+
end
|
20
|
+
```
|
21
|
+
|
22
|
+
- `#serve_content(io, opts)`
|
23
|
+
- See here: https://golang.org/pkg/net/http/#ServeContent
|
24
|
+
- support for `Range` header
|
25
|
+
- support for caching (specified in opts)
|
26
|
+
- usage:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
req.route do
|
30
|
+
req.on 'mypdf' do
|
31
|
+
File.open('my.pdf', 'r') { |f| req.serve_content(io) }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
```
|
data/lib/qeweney.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Qeweney
|
4
|
+
# File extension to MIME type mapping
|
5
|
+
module MimeTypes
|
6
|
+
TYPES = {
|
7
|
+
'html' => 'text/html',
|
8
|
+
'css' => 'text/css',
|
9
|
+
'js' => 'application/javascript',
|
10
|
+
'txt' => 'text/plain'
|
11
|
+
|
12
|
+
'gif' => 'image/gif',
|
13
|
+
'jpg' => 'image/jpeg',
|
14
|
+
'jpeg' => 'image/jpeg',
|
15
|
+
'png' => 'image/png',
|
16
|
+
'ico' => 'image/x-icon',
|
17
|
+
|
18
|
+
'pdf' => 'application/pdf',
|
19
|
+
'json' => 'application/json',
|
20
|
+
}.freeze
|
21
|
+
|
22
|
+
def [](ref)
|
23
|
+
case ref
|
24
|
+
when Symbol
|
25
|
+
TYPES[ref.to_s]
|
26
|
+
when /\.?([^\.]+)$/
|
27
|
+
TYPES[Regexp.last_match(1)]
|
28
|
+
else
|
29
|
+
raise "Invalid argument #{ref.inspect}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/qeweney/response.rb
CHANGED
@@ -1,9 +1,31 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'status'
|
4
|
+
|
3
5
|
module Qeweney
|
4
6
|
module ResponseMethods
|
5
|
-
def redirect(url)
|
6
|
-
respond(nil, ':status' =>
|
7
|
+
def redirect(url, status = Status::FOUND)
|
8
|
+
respond(nil, ':status' => status, 'Location' => url)
|
9
|
+
end
|
10
|
+
|
11
|
+
def serve_file(path, opts)
|
12
|
+
File.open(file_full_path(path, opts), 'r') do |f|
|
13
|
+
serve_io(f, opts)
|
14
|
+
end
|
15
|
+
rescue Errno::ENOENT
|
16
|
+
respond(nil, ':status' => Status::NOT_FOUND)
|
17
|
+
end
|
18
|
+
|
19
|
+
def file_full_path(path, opts)
|
20
|
+
if (base_path = opts[:base_path])
|
21
|
+
File.join(opts[:base_path], path)
|
22
|
+
else
|
23
|
+
path
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def serve_io(io, opts)
|
28
|
+
respond(io.read)
|
7
29
|
end
|
8
30
|
end
|
9
31
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Qeweney
|
4
|
+
# HTTP status codes
|
5
|
+
module Status
|
6
|
+
# translated from https://golang.org/pkg/net/http/#pkg-constants
|
7
|
+
# https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
|
8
|
+
|
9
|
+
CONTINUE = 100 # RFC 7231, 6.2.1
|
10
|
+
SWITCHING_PROTOCOLS = 101 # RFC 7231, 6.2.2
|
11
|
+
PROCESSING = 102 # RFC 2518, 10.1
|
12
|
+
EARLY_HINTS = 103 # RFC 8297
|
13
|
+
|
14
|
+
OK = 200 # RFC 7231, 6.3.1
|
15
|
+
CREATED = 201 # RFC 7231, 6.3.2
|
16
|
+
ACCEPTED = 202 # RFC 7231, 6.3.3
|
17
|
+
NON_AUTHORITATIVE_INFO = 203 # RFC 7231, 6.3.4
|
18
|
+
NO_CONTENT = 204 # RFC 7231, 6.3.5
|
19
|
+
RESET_CONTENT = 205 # RFC 7231, 6.3.6
|
20
|
+
PARTIAL_CONTENT = 206 # RFC 7233, 4.1
|
21
|
+
MULTI_STATUS = 207 # RFC 4918, 11.1
|
22
|
+
ALREADY_REPORTED = 208 # RFC 5842, 7.1
|
23
|
+
IM_USED = 226 # RFC 3229, 10.4.1
|
24
|
+
|
25
|
+
MULTIPLE_CHOICES = 300 # RFC 7231, 6.4.1
|
26
|
+
MOVED_PERMANENTLY = 301 # RFC 7231, 6.4.2
|
27
|
+
FOUND = 302 # RFC 7231, 6.4.3
|
28
|
+
SEE_OTHER = 303 # RFC 7231, 6.4.4
|
29
|
+
NOT_MODIFIED = 304 # RFC 7232, 4.1
|
30
|
+
USE_PROXY = 305 # RFC 7231, 6.4.5
|
31
|
+
|
32
|
+
TEMPORARY_REDIRECT = 307 # RFC 7231, 6.4.7
|
33
|
+
PERMANENT_REDIRECT = 308 # RFC 7538, 3
|
34
|
+
|
35
|
+
BAD_REQUEST = 400 # RFC 7231, 6.5.1
|
36
|
+
UNAUTHORIZED = 401 # RFC 7235, 3.1
|
37
|
+
PAYMENT_REQUIRED = 402 # RFC 7231, 6.5.2
|
38
|
+
FORBIDDEN = 403 # RFC 7231, 6.5.3
|
39
|
+
NOT_FOUND = 404 # RFC 7231, 6.5.4
|
40
|
+
METHOD_NOT_ALLOWED = 405 # RFC 7231, 6.5.5
|
41
|
+
NOT_ACCEPTABLE = 406 # RFC 7231, 6.5.6
|
42
|
+
PROXY_AUTH_REQUIRED = 407 # RFC 7235, 3.2
|
43
|
+
REQUEST_TIMEOUT = 408 # RFC 7231, 6.5.7
|
44
|
+
CONFLICT = 409 # RFC 7231, 6.5.8
|
45
|
+
GONE = 410 # RFC 7231, 6.5.9
|
46
|
+
LENGTH_REQUIRED = 411 # RFC 7231, 6.5.10
|
47
|
+
PRECONDITION_FAILED = 412 # RFC 7232, 4.2
|
48
|
+
REQUEST_ENTITY_TOO_LARGE = 413 # RFC 7231, 6.5.11
|
49
|
+
REQUEST_URI_TOO_LONG = 414 # RFC 7231, 6.5.12
|
50
|
+
UNSUPPORTED_MEDIA_TYPE = 415 # RFC 7231, 6.5.13
|
51
|
+
REQUESTED_RANGE_NOT_SATISFIABLE = 416 # RFC 7233, 4.4
|
52
|
+
EXPECTATION_FAILED = 417 # RFC 7231, 6.5.14
|
53
|
+
TEAPOT = 418 # RFC 7168, 2.3.3
|
54
|
+
MISDIRECTED_REQUEST = 421 # RFC 7540, 9.1.2
|
55
|
+
UNPROCESSABLE_ENTITY = 422 # RFC 4918, 11.2
|
56
|
+
LOCKED = 423 # RFC 4918, 11.3
|
57
|
+
FAILED_DEPENDENCY = 424 # RFC 4918, 11.4
|
58
|
+
TOO_EARLY = 425 # RFC 8470, 5.2.
|
59
|
+
UPGRADE_REQUIRED = 426 # RFC 7231, 6.5.15
|
60
|
+
PRECONDITION_REQUIRED = 428 # RFC 6585, 3
|
61
|
+
TOO_MANY_REQUESTS = 429 # RFC 6585, 4
|
62
|
+
REQUEST_HEADER_FIELDS_TOO_LARGE = 431 # RFC 6585, 5
|
63
|
+
UNAVAILABLE_FOR_LEGAL_REASONS = 451 # RFC 7725, 3
|
64
|
+
|
65
|
+
INTERNAL_SERVER_ERROR = 500 # RFC 7231, 6.6.1
|
66
|
+
NOT_IMPLEMENTED = 501 # RFC 7231, 6.6.2
|
67
|
+
BAD_GATEWAY = 502 # RFC 7231, 6.6.3
|
68
|
+
SERVICE_UNAVAILABLE = 503 # RFC 7231, 6.6.4
|
69
|
+
GATEWAY_TIMEOUT = 504 # RFC 7231, 6.6.5
|
70
|
+
HTTP_VERSION_NOT_SUPPORTED = 505 # RFC 7231, 6.6.6
|
71
|
+
VARIANT_ALSO_NEGOTIATES = 506 # RFC 2295, 8.1
|
72
|
+
INSUFFICIENT_STORAGE = 507 # RFC 4918, 11.5
|
73
|
+
LOOP_DETECTED = 508 # RFC 5842, 7.2
|
74
|
+
NOT_EXTENDED = 510 # RFC 2774, 7
|
75
|
+
NETWORK_AUTHENTICATION_REQUIRED = 511 # RFC 6585, 6
|
76
|
+
end
|
77
|
+
end
|
data/lib/qeweney/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qeweney
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: escape_utils
|
@@ -81,11 +81,14 @@ files:
|
|
81
81
|
- LICENSE
|
82
82
|
- README.md
|
83
83
|
- Rakefile
|
84
|
+
- TODO.md
|
84
85
|
- lib/qeweney.rb
|
86
|
+
- lib/qeweney/mime_types.rb
|
85
87
|
- lib/qeweney/request.rb
|
86
88
|
- lib/qeweney/request_info.rb
|
87
89
|
- lib/qeweney/response.rb
|
88
90
|
- lib/qeweney/routing.rb
|
91
|
+
- lib/qeweney/status.rb
|
89
92
|
- lib/qeweney/version.rb
|
90
93
|
- qeweney.gemspec
|
91
94
|
- test/helper.rb
|