nephos-server 0.2.4 → 0.3.1
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 +33 -19
- data/lib/nephos-server/controller.rb +4 -8
- data/lib/nephos-server/router/load.rb +1 -35
- data/test/controller.rb +6 -0
- data/test/router.rb +80 -2
- data/version +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 109c4c4ca9d472b6b5f0dd35a2bf6588faacbf52
|
4
|
+
data.tar.gz: a1fc6c4863ca689e02bb6f777bd24dbbacf5de1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9c9fad3377f4107a74a3ecf94ee52b05d69b8b8b2c69d17083afcca5f0daaef7ab85bf0160092dc080326e95cd388126d2dfd7e64012fee45029bf3b190413a
|
7
|
+
data.tar.gz: c63beb9a5addc4f40bddb07628738765344ff56181782de060210caad96ebb814086a5a63e3d9a655f05baddcf2f5efeda7d7074c232480d3d73c3cf94126a3c
|
data/README.md
CHANGED
@@ -6,21 +6,30 @@
|
|
6
6
|
|
7
7
|
[](https://codeclimate.com/github/pouleta/NephosRubyServer)
|
8
8
|
|
9
|
-
This is a
|
9
|
+
This is a minimal web server, based on [rack](TODO LINK) and [puma](TODO LINK).
|
10
|
+
It is written in ruby. It also gives you a minimal architecture
|
11
|
+
to speed up your application creation.
|
10
12
|
|
11
|
-
|
12
|
-
- Rendering
|
13
|
-
- Routing
|
13
|
+
Features provided:
|
14
14
|
|
15
|
-
|
15
|
+
- Controllers: gives you a resource logic.
|
16
|
+
- Render: easier render content to the client.
|
17
|
+
- Router: create a robust and simple routing system, with url variables.
|
18
|
+
|
19
|
+
Features wich will not be provided by nephos-server:
|
20
|
+
|
21
|
+
- Templating (HTML with variables, loops, ...): It already exists and they are easy to implement.
|
22
|
+
- [Slim](DOCUMENTATION/TEMPLATING/SLIM.md)
|
23
|
+
- Database orm and connector: It already exists and simple to implement
|
24
|
+
- [Sequel](DOCUMENTATION/DATABASE/SEQUEL.md)
|
16
25
|
|
17
26
|
# Start
|
18
27
|
|
19
28
|
```sh
|
20
|
-
gem install nephos-server
|
21
|
-
nephos-generator application MyApp
|
22
|
-
cd MyApp
|
23
|
-
nephos-server -p 8080 # port is not required
|
29
|
+
gem install nephos-server # download the server
|
30
|
+
nephos-generator application MyApp # generate the application
|
31
|
+
cd MyApp # go in
|
32
|
+
nephos-server -p 8080 # start the server. port is not required
|
24
33
|
```
|
25
34
|
|
26
35
|
|
@@ -28,14 +37,17 @@ nephos-server -p 8080 # port is not required
|
|
28
37
|
|
29
38
|
## Guides
|
30
39
|
|
31
|
-
|
32
|
-
|
40
|
+
Theses guides will provide you knowlegde about everything you can use in the application.
|
41
|
+
|
42
|
+
- [Generator GUIDE](DOCUMENTATION/GUIDE_GENERATOR.md)
|
43
|
+
- [Render API](DOCUMENTATION/API_RENDER.md)
|
44
|
+
- [Router GUIDE](DOCUMENTATION/GUIDE_ROUTER.md)
|
33
45
|
|
34
46
|
## Examples
|
35
47
|
|
36
48
|
### Controller
|
37
49
|
|
38
|
-
To create a controller,
|
50
|
+
To create a controller, add a ruby file to ``app/``, with a class inherited by ``Nephos::Controller``
|
39
51
|
The basic code of a controller can be generated via ``nephos-generator controller NAME``.
|
40
52
|
|
41
53
|
```ruby
|
@@ -52,7 +64,7 @@ end
|
|
52
64
|
|
53
65
|
### Rendering
|
54
66
|
|
55
|
-
|
67
|
+
To render a content to the client, you can return informations from a Controller method:
|
56
68
|
|
57
69
|
```ruby
|
58
70
|
return {status: code}
|
@@ -66,29 +78,31 @@ return :empty
|
|
66
78
|
|
67
79
|
### Routing
|
68
80
|
|
69
|
-
|
81
|
+
The routing (rules to execute the action the user wants), you have to write the ``/routes.rb`` file.
|
82
|
+
if the user try to access to an url not described in the file, it will automaticaly render a 404 not found.
|
70
83
|
|
71
84
|
```ruby
|
72
85
|
get url: "/", controller: "MainController", method: "root" # /
|
73
86
|
get url: "/add", controller: "MainController", method: "add_url" # /add
|
74
|
-
get url: "/add/:url", controller: "MainController", method: "add_url" # /add
|
87
|
+
get url: "/add/:url", controller: "MainController", method: "add_url" # /add with parameter :url
|
75
88
|
get url: "/rm", controller: "MainController", method: "rm_url" # /rm
|
76
|
-
get url: "/rm/:url", controller: "MainController", method: "rm_url" # /rm
|
89
|
+
get url: "/rm/:url", controller: "MainController", method: "rm_url" # /rm with parameter :url
|
77
90
|
resource "infos" do
|
78
91
|
get url: "/", controller: "MainController", method: "root" # generate /infos
|
92
|
+
get url: "/abbout", controller: "MainController", method: "root" # generate /infos/about
|
79
93
|
end
|
80
94
|
```
|
81
95
|
|
82
96
|
|
83
97
|
# Developers: Roadmap
|
84
98
|
|
85
|
-
## TODO v0.
|
86
|
-
-
|
87
|
-
- Improve unitary test coverage
|
99
|
+
## TODO v0.4
|
100
|
+
- improve generator with application status, tests, more generation (routing, ...)
|
88
101
|
|
89
102
|
## TODO v1
|
90
103
|
- Improved Routing (more helper options)
|
91
104
|
- Improved Rendering (more options)
|
105
|
+
- Customisable errors (404 noticely, and 500)
|
92
106
|
- Guide about
|
93
107
|
- Controllers
|
94
108
|
- Routing
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Nephos
|
2
2
|
class Controller
|
3
3
|
|
4
|
-
attr_reader :env, :infos, :callpath
|
4
|
+
attr_reader :env, :infos, :callpath, :params
|
5
5
|
|
6
6
|
# @param env [Hash] env extracted from the http request
|
7
7
|
# @param parsed [Hash] pre-parsed env with parameters, ...
|
@@ -16,14 +16,10 @@ module Nephos
|
|
16
16
|
@infos= parsed
|
17
17
|
@callpath= callpath
|
18
18
|
@params= parsed[:args]
|
19
|
-
@params.merge!
|
20
|
-
@params.select!{|k,v|k}
|
19
|
+
@params.merge! Hash[callpath[:params].zip @infos[:path]]
|
20
|
+
@params.select!{|k,v| not k.to_s.empty?}
|
21
|
+
@params = Params.new(@params)
|
21
22
|
end
|
22
23
|
|
23
|
-
def arguments
|
24
|
-
@params
|
25
|
-
end
|
26
|
-
alias :params :arguments
|
27
|
-
|
28
24
|
end
|
29
25
|
end
|
@@ -56,40 +56,6 @@ module Nephos
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
|
60
|
-
@route_prefix ||= []
|
61
|
-
File.join(["/"] + @route_prefix)
|
62
|
-
end
|
63
|
-
|
64
|
-
def add_route(what, verb)
|
65
|
-
raise InvalidRoute unless what.is_a? Hash
|
66
|
-
what[:url] = File.expand_path File.join(route_prefix, what[:url])
|
67
|
-
Nephos::Router.check!(what)
|
68
|
-
Nephos::Router.add_params!(what)
|
69
|
-
Nephos::Router.add(what, verb)
|
70
|
-
end
|
71
|
-
|
72
|
-
# @param what [Hash]
|
73
|
-
def get what
|
74
|
-
add_route what, "GET"
|
75
|
-
end
|
76
|
-
|
77
|
-
# @param what [Hash]
|
78
|
-
def post what
|
79
|
-
add_route what, "POST"
|
80
|
-
end
|
81
|
-
|
82
|
-
# @param what [Hash]
|
83
|
-
def put what
|
84
|
-
add_route what, "PUT"
|
85
|
-
end
|
86
|
-
|
87
|
-
def resource(name, &block)
|
88
|
-
@route_prefix ||= []
|
89
|
-
@route_prefix << name
|
90
|
-
block.call
|
91
|
-
@route_prefix.pop
|
92
|
-
end
|
93
|
-
|
59
|
+
require_relative 'helpers'
|
94
60
|
load 'routes.rb'
|
95
61
|
puts
|
data/test/controller.rb
CHANGED
@@ -16,4 +16,10 @@ class TestNephosServerController < Test::Unit::TestCase
|
|
16
16
|
assert_raise do Nephos::Controller.new({}, {path: [], args: nil}, {params: {}}) end
|
17
17
|
end
|
18
18
|
|
19
|
+
def test_controller_params
|
20
|
+
c = Nephos::Controller.new(env={}, {path: ["value"], args: {}}, {params: ["param"]})
|
21
|
+
assert_equal "value", c.params[:param]
|
22
|
+
assert_equal "value", c.params["param"]
|
23
|
+
end
|
24
|
+
|
19
25
|
end
|
data/test/router.rb
CHANGED
@@ -6,13 +6,91 @@ end
|
|
6
6
|
|
7
7
|
class TestNephosServerRouter < Test::Unit::TestCase
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
def reset_routes!
|
10
|
+
Nephos::Router::ROUTES.clear
|
11
|
+
end
|
12
|
+
|
13
|
+
def first
|
14
|
+
Nephos::Router::ROUTES.first
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_multi_routes
|
18
|
+
reset_routes!
|
19
|
+
get url: "/a", controller: "TestController", method: "method", silent: true
|
20
|
+
get url: "/b", controller: "TestController", method: "method", silent: true
|
21
|
+
get url: "/c", controller: "TestController", method: "method", silent: true
|
22
|
+
post url: "/a", controller: "TestController", method: "method", silent: true
|
23
|
+
post url: "/b", controller: "TestController", method: "method", silent: true
|
24
|
+
post url: "/c", controller: "TestController", method: "method", silent: true
|
25
|
+
put url: "/a", controller: "TestController", method: "method", silent: true
|
26
|
+
put url: "/b", controller: "TestController", method: "method", silent: true
|
27
|
+
put url: "/c", controller: "TestController", method: "method", silent: true
|
28
|
+
assert_equal 9, Nephos::Router::ROUTES.size
|
29
|
+
assert_equal 3, Nephos::Router::ROUTES.select{ |r|
|
30
|
+
r[:verb] == "GET"
|
31
|
+
}.size
|
32
|
+
end
|
11
33
|
|
12
34
|
def test_valid_routes
|
35
|
+
reset_routes!
|
13
36
|
get url: "/", controller: "TestController", method: "method", silent: true
|
37
|
+
assert_equal "/", first[:url]
|
38
|
+
assert_equal "GET", first[:verb]
|
39
|
+
assert_equal "TestController", first[:controller]
|
40
|
+
assert_equal "method", first[:method]
|
41
|
+
assert_equal /^\/$/, first[:match]
|
42
|
+
|
43
|
+
reset_routes!
|
14
44
|
post url: "/", controller: "TestController", method: "method", silent: true
|
45
|
+
assert_equal "/", first[:url]
|
46
|
+
assert_equal "POST", first[:verb]
|
47
|
+
assert_equal "TestController", first[:controller]
|
48
|
+
assert_equal "method", first[:method]
|
49
|
+
assert_equal /^\/$/, first[:match]
|
50
|
+
|
51
|
+
reset_routes!
|
15
52
|
put url: "/", controller: "TestController", method: "method", silent: true
|
53
|
+
assert_equal "/", first[:url]
|
54
|
+
assert_equal "PUT", first[:verb]
|
55
|
+
assert_equal "TestController", first[:controller]
|
56
|
+
assert_equal "method", first[:method]
|
57
|
+
assert_equal /^\/$/, first[:match]
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_valid_routes_params
|
61
|
+
reset_routes!
|
62
|
+
get url: "/:what", controller: "TestController", method: "method", silent: true
|
63
|
+
assert_equal "/:what", first[:url]
|
64
|
+
assert_equal /^\/[[:graph:]]+$/, first[:match]
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_valid_resources
|
68
|
+
reset_routes!
|
69
|
+
resource "/home" do
|
70
|
+
assert_equal route_prefix, "/home"
|
71
|
+
end
|
72
|
+
resource "/home" do
|
73
|
+
get url: "/help", controller: "TestController", method: "method", silent: true
|
74
|
+
end
|
75
|
+
assert_equal "/home/help", first[:url]
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_valid_resources_params
|
79
|
+
reset_routes!
|
80
|
+
resource "/home" do
|
81
|
+
get url: "/:what", controller: "TestController", method: "method", silent: true
|
82
|
+
end
|
83
|
+
assert_equal "/home/:what", first[:url]
|
84
|
+
assert_equal /^\/home\/[[:graph:]]+$/, first[:match]
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_valid_resources_params2
|
88
|
+
reset_routes!
|
89
|
+
resource "/:id" do
|
90
|
+
get url: "/show", controller: "TestController", method: "method", silent: true
|
91
|
+
end
|
92
|
+
assert_equal "/:id/show", first[:url]
|
93
|
+
assert_equal /^\/[[:graph:]]+\/show$/, first[:match]
|
16
94
|
end
|
17
95
|
|
18
96
|
end
|
data/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.1
|