webrick-route_servlet 1.2.1 → 1.2.2
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/README.md +43 -0
- data/lib/webrick/route_servlet.rb +30 -14
- data/lib/webrick/route_servlet/action_servlet.rb +3 -6
- data/lib/webrick/route_servlet/http_request.rb +1 -0
- data/lib/webrick/route_servlet/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea2b3e3f91704a6122a1c5a3aa35e46c912142a3
|
4
|
+
data.tar.gz: 8f6b55aecfcf2a0ba62a0f40a5a5c96e2bb2fecc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe7b63371a13fc1a686a8aba3ac48c5d4dd6cb84bdab1a1cf3f28e0e58eabb5deea6d4bc5222ea3b37bd406d32e6a73a2a2f5db61ca17ff2efba2d05fca30bca
|
7
|
+
data.tar.gz: 65167911e10308ab4bbfa05f32dfa4fda801b7725b6bf523859c77d3537bbe4208d38602b32bb03727d13e209008838ccb5910c6d5f1edf4b1834e3fe3e29e00
|
data/README.md
CHANGED
@@ -31,6 +31,49 @@ Or install it yourself as:
|
|
31
31
|
|
32
32
|
https://github.com/yoshida-eth0/ruby-webrick-route_servlet/tree/master/example
|
33
33
|
|
34
|
+
## Supported methods
|
35
|
+
|
36
|
+
match
|
37
|
+
|
38
|
+
s.match "/:controller(/:action(/:id))(.:format)", ActionServlet
|
39
|
+
s.match "/*path", NotFoundServlet
|
40
|
+
|
41
|
+
root
|
42
|
+
|
43
|
+
s.root IndexServlet
|
44
|
+
|
45
|
+
resources
|
46
|
+
|
47
|
+
s.resources "/photos", PhotoServlet
|
48
|
+
|
49
|
+
resource
|
50
|
+
|
51
|
+
s.resource "/profile", ProfileServlet
|
52
|
+
|
53
|
+
get / post / put / delete
|
54
|
+
|
55
|
+
s.get "/photos", PhotoServlet
|
56
|
+
s.post "/photos", PhotoServlet
|
57
|
+
s.put "/photos/123", PhotoServlet
|
58
|
+
s.delete "/photos/123", PhotoServlet
|
59
|
+
|
60
|
+
## Supported options
|
61
|
+
|
62
|
+
via
|
63
|
+
|
64
|
+
s.match "/photos/show", PhotoServlet, :via => :get
|
65
|
+
s.match "/photos/show", PhotoServlet, :via => [:get, :post]
|
66
|
+
|
67
|
+
constraints
|
68
|
+
|
69
|
+
s.match "/photos/show", PhotoServlet, :constraints => { :id => /[A-Z]\d{5}/ }
|
70
|
+
s.match "/photos/show", PhotoServlet, :id => /[A-Z]\d{5}/
|
71
|
+
|
72
|
+
only / except
|
73
|
+
|
74
|
+
s.resources "/photo", PhotoServlet, :only => [:index]
|
75
|
+
s.resources "/photo", PhotoServlet, :except => [:index, :show]
|
76
|
+
|
34
77
|
## Contributing
|
35
78
|
|
36
79
|
1. Fork it
|
@@ -47,7 +47,8 @@ module WEBrick
|
|
47
47
|
if md
|
48
48
|
params = Hash[md.names.map(&:to_sym).zip(md.captures)]
|
49
49
|
params.delete_if{|k,v| v.nil?}
|
50
|
-
req.
|
50
|
+
req.action = params[:action] || request_options[:action]
|
51
|
+
req.params = params
|
51
52
|
return [servlet, servlet_options]
|
52
53
|
end
|
53
54
|
end
|
@@ -60,19 +61,22 @@ module WEBrick
|
|
60
61
|
|
61
62
|
def match(re, servlet, *servlet_options, **request_options)
|
62
63
|
@routes ||= []
|
63
|
-
|
64
|
+
re = _normalize_path_re(re, request_options)
|
65
|
+
_select_via(request_options).each do |via|
|
66
|
+
@routes << [via, re, servlet, servlet_options, request_options]
|
67
|
+
end
|
64
68
|
end
|
65
69
|
|
66
70
|
def root(servlet, *servlet_options, **request_options)
|
67
71
|
@routes ||= []
|
68
|
-
@routes.unshift([:*, _normalize_path_re("/"), servlet, servlet_options, request_options])
|
72
|
+
@routes.unshift([:*, _normalize_path_re("/", request_options), servlet, servlet_options, request_options])
|
69
73
|
end
|
70
74
|
|
71
75
|
["get", "post", "put", "delete"].each do |method|
|
72
76
|
class_eval %{
|
73
77
|
def #{method}(re, servlet, *servlet_options, **request_options)
|
74
78
|
@routes ||= []
|
75
|
-
@routes << [:#{method.upcase}, _normalize_path_re(re), servlet, servlet_options, request_options]
|
79
|
+
@routes << [:#{method.upcase}, _normalize_path_re(re, request_options), servlet, servlet_options, request_options]
|
76
80
|
end
|
77
81
|
}
|
78
82
|
end
|
@@ -118,7 +122,7 @@ module WEBrick
|
|
118
122
|
@routes ||= []
|
119
123
|
end
|
120
124
|
|
121
|
-
def _normalize_path_re(re)
|
125
|
+
def _normalize_path_re(re, request_options)
|
122
126
|
unless Regexp===re
|
123
127
|
# normalize slash
|
124
128
|
re = re.to_s.gsub(%r#/{2,}#, "/")
|
@@ -128,16 +132,28 @@ module WEBrick
|
|
128
132
|
re = re.sub(%r#^/?#, "^/").sub(%r#/?$#, '/?$')
|
129
133
|
# normalize parentheses
|
130
134
|
re = re.gsub(")", ")?")
|
131
|
-
# named capture
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
+
# constrain named capture
|
136
|
+
constraints = request_options[:constraints] || request_options
|
137
|
+
keys = re.scan(%r#:([^/()\.]+)#).map(&:first).sort{|a,b| b.length <=> a.length}
|
138
|
+
keys.each do |key|
|
139
|
+
value_re = Regexp.new("(?<#{key}>[^/]+?)")
|
140
|
+
if Regexp===constraints[key.to_sym]
|
141
|
+
value_re = /(?<#{key}>#{constraints[key.to_sym]})/
|
142
|
+
end
|
143
|
+
re = re.gsub(":#{key}", value_re.to_s)
|
144
|
+
end
|
135
145
|
re = Regexp.new(re)
|
136
146
|
end
|
137
147
|
re
|
138
148
|
end
|
139
149
|
private :_normalize_path_re
|
140
150
|
|
151
|
+
def _select_via(request_options)
|
152
|
+
via = request_options[:via] || :*
|
153
|
+
via = [via] unless Array===via
|
154
|
+
a = via.map(&:to_sym).map(&:upcase)
|
155
|
+
end
|
156
|
+
|
141
157
|
def _select_rest_actions(actions, request_options)
|
142
158
|
actions
|
143
159
|
|
@@ -148,11 +164,11 @@ module WEBrick
|
|
148
164
|
actions.select!{|k,v| only.include?(k)}
|
149
165
|
end
|
150
166
|
|
151
|
-
#
|
152
|
-
if request_options[:
|
153
|
-
|
154
|
-
|
155
|
-
actions.delete_if{|k,v|
|
167
|
+
# except
|
168
|
+
if request_options[:except]
|
169
|
+
except = request_options[:except]
|
170
|
+
except = [except] unless Array===except
|
171
|
+
actions.delete_if{|k,v| except.include?(k)}
|
156
172
|
end
|
157
173
|
|
158
174
|
actions
|
@@ -2,13 +2,10 @@ module WEBrick
|
|
2
2
|
module RouteServlet
|
3
3
|
class ActionServlet < WEBrick::HTTPServlet::AbstractServlet
|
4
4
|
def service(req, res)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
if respond_to?(action)
|
9
|
-
send(action, req, res)
|
5
|
+
if respond_to?(req.action)
|
6
|
+
send(req.action, req, res)
|
10
7
|
else
|
11
|
-
raise RuntimeError, "action is not implemented: #{self.class}##{action}"
|
8
|
+
raise RuntimeError, "action is not implemented: #{self.class}##{req.action}"
|
12
9
|
end
|
13
10
|
end
|
14
11
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webrick-route_servlet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoshida Tetsuya
|
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
78
|
version: '0'
|
79
79
|
requirements: []
|
80
80
|
rubyforge_project:
|
81
|
-
rubygems_version: 2.0.
|
81
|
+
rubygems_version: 2.0.0
|
82
82
|
signing_key:
|
83
83
|
specification_version: 4
|
84
84
|
summary: WEBrick::RouteServlet is like a Rails routes.rb. This servlet recognizes
|