tsurezure 0.0.2 → 0.0.34
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/tsurezure.rb +21 -5
- data/lib/utils/http_utils.rb +3 -1
- data/lib/utils/response.rb +22 -20
- data/readme.md +7 -2
- metadata +3 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 818cbc747a3775c0d73c76bad34638238d99bdbb3363adf1bd1104e635e8ab3e
|
4
|
+
data.tar.gz: 00c69ab8c119c41aa6481460518b27b5b9d29b7405263473be83d0fdb2a3a0c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7c352282df3696c3e2458d0c883d416a5202d16d2df7394ea36989cd8b31985b5fad00040eed6b7771fd2294a4c888f713f70280205540b626016804afa488e
|
7
|
+
data.tar.gz: e2e008a906f18c39fddf09c64fd238d2fdf06b73ea9e2f89425d8a8d4fdaea91b86cd0dbc1083b10d3d95c390dcd7b14e5ef9893c2f59917919878bcab73a59f
|
data/lib/tsurezure.rb
CHANGED
@@ -14,6 +14,9 @@ $TRZR_PROCESS_MODE = nil
|
|
14
14
|
$TRZR_LOG = true
|
15
15
|
TRZR_STARTED_AT = Time.now.to_i
|
16
16
|
|
17
|
+
INVALID_RESPONSE_FORMAT = "if responding from a middleware, \
|
18
|
+
you must return a hash that includes a :message property."
|
19
|
+
|
17
20
|
ARGV.each do |arg|
|
18
21
|
$TRZR_PROCESS_MODE = 'development' if arg == '--development'
|
19
22
|
$TRZR_PROCESS_MODE = 'production' if arg == '--production'
|
@@ -78,7 +81,7 @@ class Tsurezure
|
|
78
81
|
# to initialize: session and length of response
|
79
82
|
responder = HTTPUtils::ServerResponse.new(
|
80
83
|
@session,
|
81
|
-
res[:message].bytesize
|
84
|
+
res[:message].nil? ? '' : res[:message].bytesize
|
82
85
|
)
|
83
86
|
|
84
87
|
go_through_middleware request_object, responder, res, type
|
@@ -86,7 +89,7 @@ class Tsurezure
|
|
86
89
|
|
87
90
|
def get_correct_middleware(request_object)
|
88
91
|
@middleware.keys.select do |pat|
|
89
|
-
HTTPUtils::URLUtils.matches_url_regex(pat, request_object[:url]) ||
|
92
|
+
HTTPUtils::URLUtils.matches_url_regex?(pat, request_object[:url]) ||
|
90
93
|
pat == '*'
|
91
94
|
end
|
92
95
|
end
|
@@ -103,16 +106,29 @@ class Tsurezure
|
|
103
106
|
request
|
104
107
|
end
|
105
108
|
|
109
|
+
def respond_with_error(error)
|
110
|
+
Logbook::Dev.log(error)
|
111
|
+
|
112
|
+
message = { error: error }.to_json
|
113
|
+
|
114
|
+
responder = HTTPUtils::ServerResponse.new(
|
115
|
+
@session,
|
116
|
+
message.bytesize
|
117
|
+
)
|
118
|
+
|
119
|
+
responder.respond message, {}, 500, 'application/json'
|
120
|
+
end
|
121
|
+
|
106
122
|
def send_middleware_response(req, resp, type)
|
107
123
|
res = resp.merge req
|
108
124
|
|
125
|
+
return respond_with_error INVALID_RESPONSE_FORMAT if res[:message].nil?
|
126
|
+
|
109
127
|
responder = HTTPUtils::ServerResponse.new(
|
110
128
|
@session,
|
111
129
|
res[:message].bytesize
|
112
130
|
)
|
113
131
|
|
114
|
-
# pp res
|
115
|
-
|
116
132
|
responder.respond res[:message], res[:options] || {}, res[:status], type
|
117
133
|
end
|
118
134
|
|
@@ -294,7 +310,7 @@ class Tsurezure
|
|
294
310
|
end
|
295
311
|
|
296
312
|
at_exit do
|
297
|
-
if $TRZR_PROCESS_MODE == 'development' && $TRZR_LOG
|
313
|
+
if $TRZR_PROCESS_MODE == 'development' && $TRZR_LOG == true
|
298
314
|
time = Time.now.to_i - TRZR_STARTED_AT
|
299
315
|
puts
|
300
316
|
puts '[trzr_dev] shutting down. goodbye...'
|
data/lib/utils/http_utils.rb
CHANGED
@@ -25,6 +25,8 @@ module HTTPUtils
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.url_path_matches?(url, path)
|
28
|
+
return true if url == path
|
29
|
+
|
28
30
|
split_url = url.split '/'
|
29
31
|
split_path = path.split '/'
|
30
32
|
|
@@ -49,7 +51,7 @@ module HTTPUtils
|
|
49
51
|
hash_with_variables
|
50
52
|
end
|
51
53
|
|
52
|
-
def self.matches_url_regex(url, regex)
|
54
|
+
def self.matches_url_regex?(url, regex)
|
53
55
|
return unless url_path_matches? url, regex
|
54
56
|
|
55
57
|
matches = url.scan %r{((?<=\/):[^\/]+)}
|
data/lib/utils/response.rb
CHANGED
@@ -2,6 +2,19 @@
|
|
2
2
|
|
3
3
|
require_relative './http_utils' # mainly used to create http responses.
|
4
4
|
|
5
|
+
VALID_METHODS = %w[
|
6
|
+
CONNECT COPY DELETE GET HEAD
|
7
|
+
LINK LOCK MKCOL MOVE OPTIONS
|
8
|
+
PATCH POST PROPFIND PROPPATCH
|
9
|
+
PURGE PUT TRACE UNLINK UNLOCK
|
10
|
+
VIEW
|
11
|
+
].freeze
|
12
|
+
|
13
|
+
CHECK_METHOD_WARNING = "not found. \
|
14
|
+
please ensure you're using the right method!"
|
15
|
+
|
16
|
+
INVALID_METHOD_WARNING = 'an invalid method was used!'
|
17
|
+
|
5
18
|
##
|
6
19
|
# module for handling all incoming requests to the server
|
7
20
|
# stands for TsurezureResponse
|
@@ -9,36 +22,24 @@ module TResponse
|
|
9
22
|
include HTTPUtils
|
10
23
|
# anything that will be needed to create responses
|
11
24
|
class Utils
|
25
|
+
attr_reader :valid_methods
|
26
|
+
|
12
27
|
def initialize
|
13
|
-
@valid_methods =
|
14
|
-
CONNECT COPY DELETE GET HEAD
|
15
|
-
LINK LOCK MKCOL MOVE OPTIONS
|
16
|
-
OPTIONS PATCH POST PROPFIND
|
17
|
-
PROPPATCH PURGE PUT TRACE
|
18
|
-
UNLINK UNLOCK VIEW
|
19
|
-
]
|
28
|
+
@valid_methods = VALID_METHODS
|
20
29
|
end
|
21
30
|
|
22
|
-
attr_reader :valid_methods
|
23
|
-
|
24
31
|
def self.validate_request(request_params)
|
25
32
|
# make sure the user has provided a valid http
|
26
33
|
# method, a valid uri, and a valid response /
|
27
34
|
# response type
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
OPTIONS PATCH POST PROPFIND
|
32
|
-
PROPPATCH PURGE PUT TRACE
|
33
|
-
UNLINK UNLOCK VIEW
|
34
|
-
]
|
35
|
-
|
36
|
-
return false unless valid_methods.include? request_params[:method]
|
35
|
+
return true if VALID_METHODS.include? request_params[:method]
|
36
|
+
|
37
|
+
Logbook::Dev.log(INVALID_METHOD_WARNING)
|
37
38
|
end
|
38
39
|
|
39
40
|
def self.get_correct_endpoint(request_object, endpoints)
|
40
41
|
endpoints.keys.select do |pat|
|
41
|
-
HTTPUtils::URLUtils.matches_url_regex(pat, request_object[:url])
|
42
|
+
HTTPUtils::URLUtils.matches_url_regex?(pat, request_object[:url])
|
42
43
|
end
|
43
44
|
end
|
44
45
|
|
@@ -61,8 +62,9 @@ module TResponse
|
|
61
62
|
@endpoints = endpoints[request[:method]]
|
62
63
|
|
63
64
|
# if no endpoint, respond with root endpoint or 404 middleware
|
64
|
-
|
65
65
|
unless Utils.ensure_response(request, @endpoints) == true
|
66
|
+
Logbook::Dev.log(CHECK_METHOD_WARNING)
|
67
|
+
|
66
68
|
return { options: { content_type: 'application/json' },
|
67
69
|
code: 22, status: 404,
|
68
70
|
message: { status: 404, message: 'undefined endpoint' }.to_json }
|
data/readme.md
CHANGED
@@ -30,6 +30,7 @@ to build the gem: run `gem build tsurezure.gemspec`. then, install using `gem in
|
|
30
30
|
- `rake start` will run the server in production mode
|
31
31
|
- `rake dev` will run the server in development mode
|
32
32
|
- `rake dev_silent` will run the server in development mode with no logs
|
33
|
+
- `rake build` will build a `.gem` file based on `tsurezure.gemspec`
|
33
34
|
|
34
35
|
### actually using tsurezure:
|
35
36
|
|
@@ -39,9 +40,9 @@ as for how to use tsurezure, here's a simple script to get started:
|
|
39
40
|
require 'tsurezure'
|
40
41
|
|
41
42
|
# create an instance of tsurezure
|
42
|
-
server = Tsurezure.new
|
43
|
+
server = Tsurezure.new 8888
|
43
44
|
|
44
|
-
# url: http://localhost:8888
|
45
|
+
# url: http://localhost:8888
|
45
46
|
|
46
47
|
# create an endpoint
|
47
48
|
server.register 'get', '/user/:id', lambda { |req|
|
@@ -134,10 +135,14 @@ add_middleware path, callback, options
|
|
134
135
|
|
135
136
|
`options` for middleware are the same as the `options` for endpoints.
|
136
137
|
|
138
|
+
**anything** returned from a middleware will be interpreted as you trying to send a modified response. and of course, ruby will interpret the last reached statement in a method as an implicit return. to avoid this, if you want to have a middleware that doesn't necessarily send a response, just use a `return` at the end of your method to return `nil`.
|
139
|
+
|
137
140
|
* * *
|
138
141
|
|
139
142
|
## todo
|
140
143
|
|
144
|
+
- [ ] I'm wondering if I should change the implementation of the middleware functionality. currently, the middleware has no idea where the request it's processing is about to go. I'm thinking it may be a good idea to pass in the request's determined `responder` function which is determined before middleware is called (see `tsurezure.rb:135-160`). this will allow users to choose whether to call the final responder function. I don't know if this would be better or just different.
|
145
|
+
|
141
146
|
- [ ] make it so registered uris can only be accessed with the specified method, and everything else returns a 405 (maybe make this an option??)
|
142
147
|
|
143
148
|
- [ ] give the user an option to add middleware specifically for catching errors
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tsurezure
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.34
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jpegzilla
|
@@ -14,22 +14,16 @@ dependencies:
|
|
14
14
|
name: json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.8'
|
20
17
|
- - ">="
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
19
|
+
version: 2.3.0
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '1.8'
|
30
24
|
- - ">="
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
26
|
+
version: 2.3.0
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: pry
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|