webrick-route_servlet 1.0.1 → 1.1.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 +4 -4
- data/example/{simple_server.rb → multi_routes.rb} +28 -14
- data/example/simple_routes.rb +54 -0
- data/lib/webrick/route_servlet.rb +13 -4
- data/lib/webrick/route_servlet/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4acab3896a5966e52a287750419797607524db9f
|
4
|
+
data.tar.gz: 782551c377a6ad7b591b8b60a1e9d62649ff209f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0202005cc2f708ad284fe629bc0c24d692d81b324391781f121a04b6fc6262f7d214e4901dc0df1fc8dc9ebb76ed4df230a277fbb63e72ddb7f7a9538199b72a
|
7
|
+
data.tar.gz: 0770f6cf8afef2a15377e714a55b0bff18b46cefcfcd58c82a604a5b63921e9ed3ed5c60791aa26fb559de360dd10b73a17fddd059e4413c6a503cd3fb4081fc
|
@@ -4,44 +4,58 @@ $LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__))
|
|
4
4
|
|
5
5
|
require 'webrick'
|
6
6
|
require 'webrick/route_servlet'
|
7
|
+
require 'json'
|
7
8
|
|
8
9
|
class IndexServlet < WEBrick::HTTPServlet::AbstractServlet
|
9
10
|
def do_GET(req, res)
|
10
11
|
res.content_type = "text/html"
|
11
12
|
res.body = "<h2>IndexServlet</h2>"
|
12
|
-
res.body += "<h4>
|
13
|
-
|
14
|
-
|
15
|
-
res.body += "<a href='/#{page}'>/#{page}</a><br />"
|
16
|
-
}
|
13
|
+
res.body += "<h4>XxxApiServlet:</h4>"
|
14
|
+
res.body += "<a href='/api/people/@me/@frields'>/api/people/@me/@frields</a><br />"
|
15
|
+
res.body += "<a href='/api/no/match/api'>/api/no/match/api</a><br />"
|
17
16
|
res.body += "<br />"
|
18
17
|
res.body += "<h4>NotFoundServlet:</h4>"
|
19
18
|
res.body += "<a href='/no/match/path'>/no/match/path</a><br />"
|
20
19
|
end
|
21
20
|
end
|
22
21
|
|
23
|
-
class
|
22
|
+
class NotFoundServlet < WEBrick::HTTPServlet::AbstractServlet
|
24
23
|
def do_GET(req, res)
|
25
24
|
res.content_type = "text/html"
|
26
|
-
res.body = "<h2>
|
27
|
-
res.body += "<p>
|
25
|
+
res.body = "<h2>NotFoundServlet</h2>"
|
26
|
+
res.body += "<p>path: #{req.params["path"]}</p>"
|
28
27
|
res.body += "<a href='/'>index</a>"
|
29
28
|
end
|
30
29
|
end
|
31
30
|
|
32
|
-
class
|
31
|
+
class PeopleApiServlet < WEBrick::HTTPServlet::AbstractServlet
|
33
32
|
def do_GET(req, res)
|
34
|
-
res.content_type = "text/
|
35
|
-
res.body =
|
36
|
-
|
37
|
-
|
33
|
+
res.content_type = "text/plain"
|
34
|
+
res.body = JSON.pretty_generate({
|
35
|
+
"servlet" => self.class.name,
|
36
|
+
"guid" => req.params["guid"],
|
37
|
+
"selector" => req.params["selector"],
|
38
|
+
})
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class NotFoundApiServlet < WEBrick::HTTPServlet::AbstractServlet
|
43
|
+
def do_GET(req, res)
|
44
|
+
res.content_type = "text/plain"
|
45
|
+
res.body = JSON.pretty_generate({
|
46
|
+
"servlet" => self.class.name,
|
47
|
+
"path" => req.params["path"],
|
48
|
+
})
|
38
49
|
end
|
39
50
|
end
|
40
51
|
|
41
52
|
server = WEBrick::HTTPServer.new(:Port=>3000)
|
42
53
|
server.mount("/", WEBrick::RouteServlet.servlet{|s|
|
43
54
|
s.root IndexServlet
|
44
|
-
s.match "/:page", PageServlet
|
45
55
|
s.match "/*path", NotFoundServlet
|
46
56
|
})
|
57
|
+
server.mount("/api", WEBrick::RouteServlet.servlet{|s|
|
58
|
+
s.match "/people/:guid/:selector", PeopleApiServlet
|
59
|
+
s.match "/*path", NotFoundApiServlet
|
60
|
+
})
|
47
61
|
server.start
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__))
|
4
|
+
|
5
|
+
require 'webrick'
|
6
|
+
require 'webrick/route_servlet'
|
7
|
+
|
8
|
+
class IndexServlet < WEBrick::HTTPServlet::AbstractServlet
|
9
|
+
def do_GET(req, res)
|
10
|
+
res.content_type = "text/html"
|
11
|
+
res.body = "<h2>IndexServlet</h2>"
|
12
|
+
res.body += "<h4>ActionServlet:</h4>"
|
13
|
+
3.times {
|
14
|
+
controller = ["/users", "/posts"].shuffle[0]
|
15
|
+
action = rand(3)==0 ? "" : ["/show", "/edit"].shuffle[0]
|
16
|
+
id = action.empty? || rand(3)==0 ? "" : "/#{rand(255)+1}"
|
17
|
+
format = [".html", ""].shuffle[0]
|
18
|
+
path = controller + action + id + format
|
19
|
+
res.body += "<a href='#{path}'>#{path}</a><br />"
|
20
|
+
}
|
21
|
+
res.body += "<br />"
|
22
|
+
res.body += "<h4>NotFoundServlet:</h4>"
|
23
|
+
res.body += "<a href='/no/match/path/route'>/no/match/path/route</a><br />"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class ActionServlet < WEBrick::HTTPServlet::AbstractServlet
|
28
|
+
def do_GET(req, res)
|
29
|
+
res.content_type = "text/html"
|
30
|
+
res.body = "<h2>PageServlet</h2>"
|
31
|
+
res.body += "controller: #{req.params["controller"]}<br />"
|
32
|
+
res.body += "action: #{req.params["action"]}<br />"
|
33
|
+
res.body += "id: #{req.params["id"]}<br />"
|
34
|
+
res.body += "format: #{req.params["format"]}<br />"
|
35
|
+
res.body += "<p><a href='/'>index</a></p>"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class NotFoundServlet < WEBrick::HTTPServlet::AbstractServlet
|
40
|
+
def do_GET(req, res)
|
41
|
+
res.content_type = "text/html"
|
42
|
+
res.body = "<h2>NotFoundServlet</h2>"
|
43
|
+
res.body += "path: #{req.params["path"]}"
|
44
|
+
res.body += "<p><a href='/'>index</a></p>"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
server = WEBrick::HTTPServer.new(:Port=>3000)
|
49
|
+
server.mount("/", WEBrick::RouteServlet.servlet{|s|
|
50
|
+
s.root IndexServlet
|
51
|
+
s.match '/:controller(/:action(/:id))(.:format)', ActionServlet
|
52
|
+
s.match "/*path", NotFoundServlet
|
53
|
+
})
|
54
|
+
server.start
|
@@ -43,7 +43,7 @@ module WEBrick
|
|
43
43
|
md = re.match(req.path_info)
|
44
44
|
if md
|
45
45
|
req.extend WEBrick::RouteServlet::HTTPRequest
|
46
|
-
req.params = md
|
46
|
+
req.params = Hash[md.names.zip(md.captures)]
|
47
47
|
return [servlet, options, 200]
|
48
48
|
end
|
49
49
|
end
|
@@ -65,9 +65,18 @@ module WEBrick
|
|
65
65
|
|
66
66
|
def normalize_path_re(re)
|
67
67
|
unless Regexp===re
|
68
|
-
|
69
|
-
re = re.gsub(%r
|
70
|
-
|
68
|
+
# normalize slash
|
69
|
+
re = re.to_s.gsub(%r#/{2,}#, "/")
|
70
|
+
# escape
|
71
|
+
re = re.gsub(/([\.\-?*+\\^$])/, '\\\\\1')
|
72
|
+
# start end regexp
|
73
|
+
re = re.sub(%r#^/?#, "^/").sub(%r#/?$#, '/?$')
|
74
|
+
# normalize parentheses
|
75
|
+
re = re.gsub(")", ")?")
|
76
|
+
# named capture
|
77
|
+
re = re.gsub(%r#/:([^/()\.]+)#, '/(?<\1>[^/]+?)')
|
78
|
+
re = re.gsub(%r#\.:([^/()\.]+)#, '.(?<\1>[^/]+?)')
|
79
|
+
re = re.gsub(%r#/\\\*([^/]+)#, '/(?<\1>.+?)')
|
71
80
|
re = Regexp.new(re)
|
72
81
|
end
|
73
82
|
re
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webrick-route_servlet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoshida Tetsuya
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -50,7 +50,8 @@ files:
|
|
50
50
|
- LICENSE.txt
|
51
51
|
- README.md
|
52
52
|
- Rakefile
|
53
|
-
- example/
|
53
|
+
- example/multi_routes.rb
|
54
|
+
- example/simple_routes.rb
|
54
55
|
- lib/webrick/route_servlet.rb
|
55
56
|
- lib/webrick/route_servlet/http_request.rb
|
56
57
|
- lib/webrick/route_servlet/version.rb
|