nephos-server 0.6.4 → 0.6.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG +6 -0
- data/DOCUMENTATION/API_RENDER.md +12 -9
- data/DOCUMENTATION/GUIDE_CONTROLLER.md +28 -8
- data/DOCUMENTATION/GUIDE_GENERATOR.md +1 -1
- data/DOCUMENTATION/GUIDE_ROUTER.md +19 -0
- data/README.md +1 -2
- data/Rakefile +6 -0
- data/lib/nephos-server/basic_errors.rb +1 -0
- data/lib/nephos-server/controller.rb +16 -2
- data/lib/nephos-server/router/helpers.rb +27 -11
- data/lib/nephos-server/router/load.rb +11 -3
- data/lib/nephos-server/router/main.rb +2 -0
- data/lib/nephos-server/server/responder.rb +2 -1
- data/nephos-server.gemspec +2 -1
- data/routes.rb +2 -1
- data/test/functional/generator.rb +4 -0
- data/test/functional/router.rb +66 -0
- data/test/router.rb +46 -1
- data/version +1 -1
- metadata +6 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8bb785df5db4f9f8b7a8e4821582700962d0fe4
|
4
|
+
data.tar.gz: f681de7959a63e202b03f80caf0d730142eaef0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec1e2f6a1d7afe305c39b7664787a31806a60d4f0bc9ed08a1add184f77408b87d09eeb10dbb913662f19ea992a2e3af993584648b0e138f95226c34514f6ac4
|
7
|
+
data.tar.gz: 41f1943b9e313ee1a45e998565e6628e118ba95fcf434cc591c8f993dd633a15b070b076b0fb2cfed1bcde47d059d56b89a284d8c1923785dc6e04045f4a4432
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
v0.6.5
|
2
|
+
* Improve routing helpers (optional url parameter)
|
3
|
+
* Add new functional tests (router)
|
4
|
+
* Add extension for url (.html, ...)
|
5
|
+
* Add improved router helper (simple destination, alias)
|
6
|
+
|
1
7
|
v0.6.4
|
2
8
|
* Fix application generator (replace in the gemfile nephos-server by nephos)
|
3
9
|
* Improve guides (more doc, corrections, update)
|
data/DOCUMENTATION/API_RENDER.md
CHANGED
@@ -1,14 +1,18 @@
|
|
1
1
|
# Render API
|
2
2
|
|
3
|
-
##
|
3
|
+
## What is the Render API ?
|
4
4
|
The render API is a simple system to allows you to render HTTP responses to a client.
|
5
|
+
It is a simple way to render data to the user and choose it's type.
|
6
|
+
|
5
7
|
The API allows you to customize differents parts of the response:
|
6
8
|
|
7
9
|
- HTTP status
|
8
10
|
- HTTP Content-Type
|
9
11
|
- Content
|
10
12
|
|
11
|
-
|
13
|
+
Based on the returns of your Controller's methods, it will render to the user
|
14
|
+
a HTTP response.
|
15
|
+
You can actually returns HTML, JSON, or PLAIN text, and custom formats if needed.
|
12
16
|
|
13
17
|
|
14
18
|
## Use the API
|
@@ -20,14 +24,13 @@ It must contain a class, inheriting from ``Nephos::Controller``.
|
|
20
24
|
Each public method **can** be an entry point, defined in the ``routes.rb`` file.
|
21
25
|
[Routing documentation](GUIDE_ROUTING.md).
|
22
26
|
|
23
|
-
|
24
|
-
|
27
|
+
Theses methods, described as "entry points" by your routing rules, must **return** a ``Hash``.
|
28
|
+
It's format will be described in the following parts.
|
25
29
|
|
26
|
-
The
|
27
|
-
It may optionnaly be an ``Integer``, to return only a status, or ``:empty``.
|
30
|
+
*Notes: The return may optionnaly be an ``Integer``, to return only a status, or ``:empty``.*
|
28
31
|
|
29
|
-
##
|
30
|
-
The
|
32
|
+
## Returned hash
|
33
|
+
The return of a Controller method can include the following keys:
|
31
34
|
|
32
35
|
- :plain
|
33
36
|
- :html
|
@@ -52,7 +55,7 @@ class MyController < Nephos::Controller
|
|
52
55
|
end
|
53
56
|
```
|
54
57
|
|
55
|
-
The following sections will describe how each key works and modify the HTTP response.
|
58
|
+
The following sections will describe how each key works, and modify the HTTP response.
|
56
59
|
|
57
60
|
### Content
|
58
61
|
The ``:content`` key must be associated with a ``String`` (or ``Hash`` is json).
|
@@ -5,28 +5,48 @@
|
|
5
5
|
### Cookies
|
6
6
|
You can set cookies and get them via ``cookies`` in the body of any controller.
|
7
7
|
|
8
|
+
Example:
|
9
|
+
```ruby
|
10
|
+
cookies["a"] = "b" # add a cookie named "a"
|
11
|
+
cookies.delete("b") # remove a cookie named "b"
|
12
|
+
```
|
13
|
+
|
8
14
|
### Params
|
9
15
|
You can access to the parameters (defined by http or via the URI, based on your
|
10
16
|
routing rules).
|
11
17
|
They are accessible via ``params`` in the body of every controller.
|
12
18
|
|
19
|
+
Example:
|
20
|
+
```ruby
|
21
|
+
params[:id] # access to the :id value, for exemple in the url /show/:id
|
22
|
+
```
|
23
|
+
|
24
|
+
### Requested format
|
25
|
+
You can request a format by adding a ``.ext`` to the url you request.
|
26
|
+
This format is accessible via the ``format`` method. (alias for ``extension``)
|
27
|
+
|
28
|
+
It is also provided few helpers ``html?`` ``json?`` ``plain?``
|
29
|
+
|
30
|
+
|
13
31
|
### Hooks
|
14
|
-
|
15
|
-
|
32
|
+
|
33
|
+
A hook is a method, triggered automatically after an action.
|
34
|
+
|
35
|
+
Actually, NephosServer allows you to create 2 kinds of triggers for your hooks:
|
16
36
|
|
17
37
|
- after_action
|
18
38
|
- before_action
|
19
39
|
|
20
|
-
|
21
|
-
It means that the cookies are not saved yet (so you can change them, etc.)
|
40
|
+
Your hooks will be called just before/after calling the method requested.
|
41
|
+
It means that the cookies are not saved yet (so you can change them, etc.) for example.
|
22
42
|
|
23
43
|
The hooks are defined by calling the methods ``after_action`` or
|
24
44
|
``before_action``, out of a method, usually on the top of the controller.
|
25
45
|
|
26
|
-
|
27
|
-
- The first is the name of the
|
28
|
-
- The second
|
29
|
-
keys, associated to an Array
|
46
|
+
Triggers take 1 or 2 arguments.
|
47
|
+
- The first is the name of the Hook to use. **This is a required argument**.
|
48
|
+
- The second **is optional**. It should be a hash, containing ``:only`` or ``:except``
|
49
|
+
keys, associated to an Array of Symbols, or one Symbol. Each symbol represents
|
30
50
|
a method triggering the hook.
|
31
51
|
|
32
52
|
**Note: If there is no 2sd argument, then the hook is triggered every times.**
|
@@ -1,3 +1,4 @@
|
|
1
|
+
|
1
2
|
# Routing Guide
|
2
3
|
|
3
4
|
### How the routes are inputed by the client ?
|
@@ -41,6 +42,13 @@ As example, yuo can write:
|
|
41
42
|
add_route "GET", url: "/tmp", controller: "MyController", method: "tmp"
|
42
43
|
```
|
43
44
|
|
45
|
+
**Note: if you are as lazy as me, you also can specifie the url out of the hash (option).
|
46
|
+
It can be done by putting the url as second argument, like in the following example.
|
47
|
+
This note is also valid for the next helpers (get, post, put)**
|
48
|
+
```ruby
|
49
|
+
add_route "GET", "/tmp", controller: "MyController", method: "tmp"
|
50
|
+
```
|
51
|
+
|
44
52
|
### get post put
|
45
53
|
Theses 3 helpers allows you to use ``add_route`` without the first argument.
|
46
54
|
|
@@ -86,6 +94,17 @@ resource "static" do
|
|
86
94
|
end
|
87
95
|
```
|
88
96
|
|
97
|
+
## Alias
|
98
|
+
You can create many routes to the same entry point. Each of theses rules can be
|
99
|
+
specified simply by placing an Array of String instead of a simple String in the
|
100
|
+
hash passed to the helper (get, ... , add_route).
|
101
|
+
Example:
|
102
|
+
```ruby
|
103
|
+
get url: ["/", "/index"], controller: "UserController", method: "show" # / and /index
|
104
|
+
```
|
105
|
+
|
89
106
|
## Notes
|
90
107
|
|
91
108
|
* When a request is done, duplicate / are not counted. So, ``/resource/id`` is equivalent to ``////resource//id`` etc.
|
109
|
+
* It is possible, by default, to add a postfixed extension (like .html) to your rules. It is accessible via the controller (``extension`` method). It can be disabled by adding the option ``postfix: false``
|
110
|
+
* You can replace the both keys ``:controller`` and ``:method`` by ``:to``, which has to be associated with a string like ``Controller#method``
|
data/README.md
CHANGED
@@ -100,6 +100,7 @@ put url: "/rm/:url", controller: "MainController", method: "rm_url" # /rm with
|
|
100
100
|
resource "infos" do
|
101
101
|
get url: "/", controller: "MainController", method: "root" # generate /infos
|
102
102
|
get url: "/about", controller: "MainController", method: "root" # generate /infos/about
|
103
|
+
get url: "/notice", to: "MainController#notice" # generate /infos/notice
|
103
104
|
end
|
104
105
|
```
|
105
106
|
|
@@ -107,9 +108,7 @@ end
|
|
107
108
|
# Developers: Roadmap
|
108
109
|
|
109
110
|
## TODO v0.6
|
110
|
-
- Alias for routing
|
111
111
|
- functionnal tests
|
112
|
-
- extension for urls (optional .xxx, with controller effect)
|
113
112
|
|
114
113
|
## TODO v0.7
|
115
114
|
- feature to change HTTP header from controller
|
data/Rakefile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
#encoding: utf-8
|
2
2
|
|
3
|
+
require 'colorize'
|
4
|
+
|
3
5
|
task :default => [:test]
|
4
6
|
|
5
7
|
task :test do
|
@@ -10,11 +12,15 @@ namespace :test do
|
|
10
12
|
|
11
13
|
desc "Unitary tests. Fasts and on the sources."
|
12
14
|
task :test do
|
15
|
+
puts
|
13
16
|
ruby "test/test.rb"
|
14
17
|
end
|
15
18
|
|
16
19
|
desc "Functional tests. Slow, test real the features under real conditions of usage."
|
17
20
|
task :functional do
|
21
|
+
puts "!!! Important !!!".yellow
|
22
|
+
puts "You have to access to internet to test the generator.".yellow
|
23
|
+
puts
|
18
24
|
ruby "test/functional.rb"
|
19
25
|
end
|
20
26
|
end
|
@@ -6,11 +6,13 @@ module Nephos
|
|
6
6
|
# and the parameters.
|
7
7
|
class Controller
|
8
8
|
|
9
|
-
attr_reader :req, :callpath, :params, :cookies
|
9
|
+
attr_reader :req, :callpath, :params, :cookies, :extension
|
10
|
+
alias :format :extension
|
10
11
|
|
11
12
|
# @param env [Hash] env extracted from the http request
|
12
13
|
# @param parsed [Hash] pre-parsed env with parameters, ...
|
13
|
-
|
14
|
+
# @param extension [String] extension ".json", ".html", ...
|
15
|
+
def initialize req, callpath, extension=nil
|
14
16
|
raise ArgumentError, "req must be a Rack::Request" unless req.is_a? Rack::Request
|
15
17
|
raise ArgumentError, "call must be a Hash" unless callpath.is_a? Hash
|
16
18
|
@req= req
|
@@ -24,6 +26,18 @@ module Nephos
|
|
24
26
|
|
25
27
|
@params = Params.new(@params)
|
26
28
|
@cookies = Params.new(@req.cookies)
|
29
|
+
|
30
|
+
@extension = extension.to_s.split(".").last
|
31
|
+
end
|
32
|
+
|
33
|
+
def html?
|
34
|
+
%w(htm html xhtml).include? extension
|
35
|
+
end
|
36
|
+
def json?
|
37
|
+
%w(json).include? extension
|
38
|
+
end
|
39
|
+
def plain?
|
40
|
+
%w(txt raw).include? extension
|
27
41
|
end
|
28
42
|
|
29
43
|
@@before_action = {:'*' => []}
|
@@ -4,6 +4,9 @@ def route_prefix
|
|
4
4
|
end
|
5
5
|
|
6
6
|
# @param verb [String] has to be a valid http verb, so a string uppercase
|
7
|
+
# @param url [String] if an url is provided, then it will be put in the hash
|
8
|
+
# to have the same behavior as if it was specified in the what hash
|
9
|
+
# \\{url: URL}
|
7
10
|
# @param what [Hash] has to contain the following keys:
|
8
11
|
# - :url
|
9
12
|
# - :controller
|
@@ -14,27 +17,35 @@ end
|
|
14
17
|
# if the client request match with the verb and the url provided.
|
15
18
|
#
|
16
19
|
# Checkout the documentation about the parameters and API for more informations
|
17
|
-
def add_route(verb, what)
|
20
|
+
def add_route(verb, url=nil, what)
|
18
21
|
raise InvalidRoute, "what must be a hash" unless what.is_a? Hash
|
19
|
-
what[:url]
|
20
|
-
|
21
|
-
|
22
|
-
|
22
|
+
what[:url] ||= url
|
23
|
+
Array(what[:url]).each do |url|
|
24
|
+
route = what.dup
|
25
|
+
route[:url] = url
|
26
|
+
route[:url] = File.expand_path File.join(route_prefix, route[:url])
|
27
|
+
Nephos::Router.check!(route)
|
28
|
+
Nephos::Router.add_params!(route)
|
29
|
+
Nephos::Router.add(route, verb)
|
30
|
+
end
|
23
31
|
end
|
24
32
|
|
33
|
+
# @param url [String] see {#add_route}
|
25
34
|
# @param what [Hash] see {#add_route}
|
26
|
-
def get what
|
27
|
-
add_route "GET", what
|
35
|
+
def get url=nil, what
|
36
|
+
add_route "GET", url, what
|
28
37
|
end
|
29
38
|
|
39
|
+
# @param url [String] see {#add_route}
|
30
40
|
# @param what [Hash] see {#add_route}
|
31
|
-
def post what
|
32
|
-
add_route "POST", what
|
41
|
+
def post url=nil, what
|
42
|
+
add_route "POST", url, what
|
33
43
|
end
|
34
44
|
|
45
|
+
# @param url [String] see {#add_route}
|
35
46
|
# @param what [Hash] see {#add_route}
|
36
|
-
def put what
|
37
|
-
add_route "PUT", what
|
47
|
+
def put url=nil, what
|
48
|
+
add_route "PUT", url, what
|
38
49
|
end
|
39
50
|
|
40
51
|
# @param name [String]
|
@@ -50,3 +61,8 @@ def resource(name, &block)
|
|
50
61
|
block.call
|
51
62
|
@route_prefix.pop
|
52
63
|
end
|
64
|
+
|
65
|
+
# An alias is an url which have the same proprieties than the previous route
|
66
|
+
def alias_route
|
67
|
+
raise "Not implemented yet"
|
68
|
+
end
|
@@ -16,7 +16,7 @@ module Nephos
|
|
16
16
|
end
|
17
17
|
url = params.map{|e| e[:p]}.join("/+")
|
18
18
|
url = "/" if url.empty?
|
19
|
-
what[:match] =
|
19
|
+
what[:match] = what[:postfix] != false ? /^(?<url>#{url})(?<extension>\.\w+)?\/*$/ : /^(?<url>#{url})\/*$/
|
20
20
|
# remove : in :param, and / in /param
|
21
21
|
what[:params] = params.map{|e| e[:name] && e[:name][1..-1]}[1..-1] || []
|
22
22
|
end
|
@@ -29,8 +29,16 @@ module Nephos
|
|
29
29
|
# - :method
|
30
30
|
def self.check_keys! what
|
31
31
|
raise InvalidRouteUrl, "Missing URL" unless what.keys.include? :url
|
32
|
-
|
33
|
-
|
32
|
+
if what.keys.include? :to
|
33
|
+
match = what[:to].match(/(?<controller>\w+)\#(?<method>\w+)/)
|
34
|
+
raise InvalidRouteTo, "Invalid Controller#Method" unless match
|
35
|
+
what[:controller] = match["controller"]
|
36
|
+
what[:method] = match["method"]
|
37
|
+
what.delete :to
|
38
|
+
else
|
39
|
+
raise InvalidRouteController, "Missing Controller" unless what.keys.include? :controller
|
40
|
+
raise InvalidRouteMethod, "Missing Method" unless what.keys.include? :method
|
41
|
+
end
|
34
42
|
end
|
35
43
|
|
36
44
|
# @param what [Hash]
|
@@ -67,6 +67,8 @@ module Nephos
|
|
67
67
|
env = req.env
|
68
68
|
puts "#{req.env["REMOTE_ADDR"]} [#{req.request_method}] \t ---> \t #{req.path}" unless @silent
|
69
69
|
call = find_route(req)
|
70
|
+
# require 'pry'
|
71
|
+
# binding.pry
|
70
72
|
return error_404(req) if call.nil?
|
71
73
|
begin
|
72
74
|
return render_controller(req, call)
|
@@ -69,7 +69,8 @@ module Nephos
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def render_from_controller req, call
|
72
|
-
|
72
|
+
extension = req.path.match(call[:match])['extension']
|
73
|
+
controller = Module.const_get(call[:controller]).new(req, call, extension)
|
73
74
|
method_to_call = call[:method]
|
74
75
|
|
75
76
|
controller.execute_before_action(method_to_call)
|
data/nephos-server.gemspec
CHANGED
@@ -41,9 +41,10 @@ test/router.rb
|
|
41
41
|
test/params.rb
|
42
42
|
test/controller.rb
|
43
43
|
test/functional.rb
|
44
|
-
test/functional/server.rb
|
45
44
|
test/functional/generator.rb
|
46
45
|
test/functional/global.rb
|
46
|
+
test/functional/router.rb
|
47
|
+
test/functional/server.rb
|
47
48
|
routes.rb
|
48
49
|
|
49
50
|
app/dataset.rb
|
data/routes.rb
CHANGED
@@ -23,4 +23,5 @@ get url: "img/:image", controller: "MainController", method: "image"
|
|
23
23
|
|
24
24
|
get url: "/get_cookies", controller: "MainController", method: "get_cookies"
|
25
25
|
get url: "/add_cookie", controller: "MainController", method: "add_cookie"
|
26
|
-
|
26
|
+
|
27
|
+
get "/err500", controller: "MainController", method: "err500"
|
@@ -23,9 +23,13 @@ class TestNephosServerGenerator < Test::Unit::TestCase
|
|
23
23
|
assert(Dir.exists? "/tmp/nephos-server-test/app")
|
24
24
|
gemfile_data = File.read("/tmp/nephos-server-test/Gemfile").split("\n")
|
25
25
|
assert(gemfile_data.include? "gem 'nephos'")
|
26
|
+
|
27
|
+
# if connected to internet only
|
28
|
+
assert(File.exists? "/tmp/nephos-server-test/Gemfile.lock")
|
26
29
|
gemfile_lock_data = File.read("/tmp/nephos-server-test/Gemfile.lock").split
|
27
30
|
assert(gemfile_lock_data.include? "nephos")
|
28
31
|
assert(gemfile_lock_data.include? "nephos-server")
|
32
|
+
|
29
33
|
`rm -rf /tmp/nephos-server-test 2> /tmp/null`
|
30
34
|
end
|
31
35
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
class TestNephosServerAppRouter < Test::Unit::TestCase
|
2
|
+
|
3
|
+
ENV_ALL_VALID_ROUTES = [
|
4
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/home/index"},
|
5
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/home/index/"},
|
6
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/home/index//"},
|
7
|
+
{"REQUEST_METHOD"=>"POST", "PATH_INFO"=>"/home/index/add"},
|
8
|
+
{"REQUEST_METHOD"=>"POST", "PATH_INFO"=>"/home/index/add/"},
|
9
|
+
{"REQUEST_METHOD"=>"POST", "PATH_INFO"=>"/home/index/add//"},
|
10
|
+
{"REQUEST_METHOD"=>"PUT", "PATH_INFO"=>"/home/index/rm"},
|
11
|
+
{"REQUEST_METHOD"=>"PUT", "PATH_INFO"=>"/home/index/rm/"},
|
12
|
+
{"REQUEST_METHOD"=>"PUT", "PATH_INFO"=>"/home/index/rm//"},
|
13
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/home"},
|
14
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/home/"},
|
15
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/home//"},
|
16
|
+
|
17
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/homes"},
|
18
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/homes/"},
|
19
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/homes//"},
|
20
|
+
|
21
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/"},
|
22
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/add"},
|
23
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/rm"},
|
24
|
+
# {"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/debug"},
|
25
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/hello"},
|
26
|
+
|
27
|
+
# {"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/image"},
|
28
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/image/image.jpg"},
|
29
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/img/image.jpg"},
|
30
|
+
|
31
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/get_cookies"},
|
32
|
+
{"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/add_cookie"},
|
33
|
+
# {"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/err500"},
|
34
|
+
]
|
35
|
+
|
36
|
+
def test_router_all_valid_routes
|
37
|
+
router = Nephos::Router.new(silent: true)
|
38
|
+
r = []
|
39
|
+
ENV_ALL_VALID_ROUTES.each do |env|
|
40
|
+
r << router.execute(Rack::Request.new(env))
|
41
|
+
end
|
42
|
+
|
43
|
+
r.each_with_index do |rep, idx|
|
44
|
+
# puts ENV_ALL_VALID_ROUTES[idx]
|
45
|
+
# puts rep
|
46
|
+
begin
|
47
|
+
assert_equal(200, rep.status)
|
48
|
+
rescue => err
|
49
|
+
puts rep
|
50
|
+
puts err
|
51
|
+
raise
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_router_on_invalid
|
57
|
+
router = Nephos::Router.new(silent: true)
|
58
|
+
not_valid = {"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/not_a_valid_route"}
|
59
|
+
almost_valid = {"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/get_cookie"}
|
60
|
+
bad_verb = {"REQUEST_METHOD"=>"POST", "PATH_INFO"=>"/get_cookies"}
|
61
|
+
assert_equal(404, router.execute(Rack::Request.new(not_valid)).status)
|
62
|
+
assert_equal(404, router.execute(Rack::Request.new(almost_valid)).status)
|
63
|
+
assert_equal(404, router.execute(Rack::Request.new(bad_verb)).status)
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
data/test/router.rb
CHANGED
@@ -187,7 +187,6 @@ class TestNephosServerRouter < Test::Unit::TestCase
|
|
187
187
|
REQ_POST_INDEX_XXX_ID = Rack::Request.new({"REQUEST_METHOD"=>"POST", "PATH_INFO"=>"/index/XXX/id"})
|
188
188
|
REQ_POST_INDEX_XXX_XXX = Rack::Request.new({"REQUEST_METHOD"=>"POST", "PATH_INFO"=>"/index/XXX/XXX"})
|
189
189
|
|
190
|
-
# TODO : FIX
|
191
190
|
def test_routing_matching_simple_with_arguments2
|
192
191
|
reset_routes!
|
193
192
|
get url: "/index", controller: "TestController", method: "method1", silent: true
|
@@ -208,4 +207,50 @@ class TestNephosServerRouter < Test::Unit::TestCase
|
|
208
207
|
assert(!Nephos::Router.new.find_route(REQ_POST_INDEX_XXX_XXX))
|
209
208
|
end
|
210
209
|
|
210
|
+
def test_routing_extension
|
211
|
+
reset_routes!
|
212
|
+
get url: "/index", controller: "TestController", method: "method1", silent: true
|
213
|
+
get url: "/indexno", controller: "TestController", method: "method1", silent: true, postfix: false
|
214
|
+
ok1 = Rack::Request.new({"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/index"})
|
215
|
+
ok2 = Rack::Request.new({"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/index.html"})
|
216
|
+
ok3 = Rack::Request.new({"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/index.json"})
|
217
|
+
ok4 = Rack::Request.new({"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/index.xhr"})
|
218
|
+
ok5 = Rack::Request.new({"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/indexno"})
|
219
|
+
ko1 = Rack::Request.new({"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/index/html"})
|
220
|
+
ko2 = Rack::Request.new({"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/indexno.html"})
|
221
|
+
ko3 = Rack::Request.new({"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/indexno.json"})
|
222
|
+
ko4 = Rack::Request.new({"REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/indexno.xhr"})
|
223
|
+
assert(Nephos::Router.new.find_route(ok1))
|
224
|
+
assert(Nephos::Router.new.find_route(ok2))
|
225
|
+
assert(Nephos::Router.new.find_route(ok3))
|
226
|
+
assert(Nephos::Router.new.find_route(ok4))
|
227
|
+
assert(Nephos::Router.new.find_route(ok5))
|
228
|
+
assert(!Nephos::Router.new.find_route(ko1))
|
229
|
+
assert(!Nephos::Router.new.find_route(ko2))
|
230
|
+
assert(!Nephos::Router.new.find_route(ko3))
|
231
|
+
assert(!Nephos::Router.new.find_route(ko4))
|
232
|
+
end
|
233
|
+
|
234
|
+
def test_routing_eze_router
|
235
|
+
reset_routes!
|
236
|
+
get url: "/index", controller: "TestController", method: "method1", silent: true
|
237
|
+
get url: "/index", to: "TestController#method1", method: "method1", silent: true
|
238
|
+
assert_equal Nephos::Router::ROUTES[0], Nephos::Router::ROUTES[1]
|
239
|
+
end
|
240
|
+
|
241
|
+
def test_routing_multiple_url
|
242
|
+
reset_routes!
|
243
|
+
get url: ["/index"], controller: "TestController", method: "method1", silent: true
|
244
|
+
get url: "/index", controller: "TestController", method: "method1", silent: true
|
245
|
+
reset_routes!
|
246
|
+
get url: ["/index", "/index"], controller: "TestController", method: "method1"
|
247
|
+
get url: ["/index", "/index"], controller: "TestController", method: "method1"
|
248
|
+
assert_equal Nephos::Router::ROUTES[0], Nephos::Router::ROUTES[1]
|
249
|
+
assert_equal Nephos::Router::ROUTES[1], Nephos::Router::ROUTES[2]
|
250
|
+
assert_equal Nephos::Router::ROUTES[2], Nephos::Router::ROUTES[3]
|
251
|
+
reset_routes!
|
252
|
+
get url: ["/index", "/me", "/other"], controller: "TestController", method: "method1"
|
253
|
+
assert_equal 3, Nephos::Router::ROUTES.size
|
254
|
+
end
|
255
|
+
|
211
256
|
end
|
data/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.5
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nephos-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- poulet_a
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
tcYkgfqUJPitIJx1RvWZpIyH5uJhRUYK3+vU9nMOxez5WbIlC1TtpByKAPMX+sht
|
32
32
|
gib3AoIT8jh/2w==
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2015-10-
|
34
|
+
date: 2015-10-09 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: nomorebeer
|
@@ -135,6 +135,7 @@ files:
|
|
135
135
|
- test/functional.rb
|
136
136
|
- test/functional/generator.rb
|
137
137
|
- test/functional/global.rb
|
138
|
+
- test/functional/router.rb
|
138
139
|
- test/functional/server.rb
|
139
140
|
- test/params.rb
|
140
141
|
- test/responder.rb
|
@@ -164,6 +165,8 @@ rubyforge_project:
|
|
164
165
|
rubygems_version: 2.4.8
|
165
166
|
signing_key:
|
166
167
|
specification_version: 4
|
167
|
-
summary: "*
|
168
|
+
summary: "* Improve routing helpers (optional url parameter) * Add new functional
|
169
|
+
tests (router) * Add extension for url (.html, ...) * Add improved router helper
|
170
|
+
(simple destination, alias)"
|
168
171
|
test_files: []
|
169
172
|
has_rdoc:
|
metadata.gz.sig
CHANGED
Binary file
|