nephos-server 0.5.2 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +12 -0
- data/DOCUMENTATION/API_RENDER.md +109 -0
- data/DOCUMENTATION/DATABASE/SEQUEL.md +21 -0
- data/DOCUMENTATION/GUIDE_CONTROLLER.md +7 -0
- data/DOCUMENTATION/GUIDE_GENERATOR.md +44 -0
- data/DOCUMENTATION/GUIDE_ROUTER.md +67 -0
- data/DOCUMENTATION/TEMPLATING/SLIM.md +20 -0
- data/README.md +6 -4
- data/app/main.rb +16 -2
- data/bin/nephos-generator +2 -2
- data/bin/nephos-server +4 -2
- data/bin/nephos-status +2 -2
- data/lib/nephos-server/controller.rb +3 -1
- data/lib/nephos-server/router/main.rb +25 -17
- data/lib/nephos-server/server/responder.rb +20 -4
- data/lib/nephos-server/version.rb +6 -0
- data/nephos-server.gemspec +17 -9
- data/routes.rb +4 -0
- data/test/generator.rb +1 -1
- data/test/responder.rb +31 -6
- data/version +1 -1
- metadata +10 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e8ff75ee49a1ab28b80920721ad356542a82547
|
4
|
+
data.tar.gz: 54a400165ee4401da84a727cf8e95ed2992d3a6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0660a8e017d4824933c80dee460daa445f16a544a7fca14372849a867561e8b028650fd8dc7fe0988434e1d031e018f92699a2f89572a079ecfc646daad1d3e9
|
7
|
+
data.tar.gz: f17a9dafdc7d4d1bb976c099f078c1439a5037c0586fd2abf9a800c97c91ec0744c293b528e240c16b32f6372ddab435d74259a0b22528c4bf3e9b5b38aa9b75
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
v0.5.4
|
2
|
+
* fix regression on empty response
|
3
|
+
* add unitary tests
|
4
|
+
* improve gemspec
|
5
|
+
* fix severe regression on responder
|
6
|
+
* fix environment bug
|
7
|
+
|
8
|
+
v0.5.3
|
9
|
+
* add continuous integration with gitlab
|
10
|
+
* fix executables requirements to be testable
|
11
|
+
* add cookies management
|
12
|
+
|
1
13
|
v0.5.2
|
2
14
|
* fix regression on content-type from v0.4
|
3
15
|
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# Render API
|
2
|
+
|
3
|
+
## Understand the API
|
4
|
+
|
5
|
+
The render API is a simple system to allows you to render HTTP responses to a client.
|
6
|
+
The API allows you to customize differents parts of the response:
|
7
|
+
|
8
|
+
- HTTP status
|
9
|
+
- HTTP Content-Type
|
10
|
+
- Content
|
11
|
+
|
12
|
+
The API use the returns of the Controllers methods to build the HTTP responses.
|
13
|
+
|
14
|
+
|
15
|
+
## Use the API
|
16
|
+
|
17
|
+
To use the API, you have to create a new controller.
|
18
|
+
The controller must be placed or requires in the ``app/`` directory,
|
19
|
+
via a ``file.rb`` file.
|
20
|
+
It must contain a class, wich inherit from ``Nephos::Controller``.
|
21
|
+
Each public method can be an entry point, defined in the ``routes.rb`` file.
|
22
|
+
[Routing doc](GUIDE_ROUTING.md).
|
23
|
+
|
24
|
+
In the controller, you can use few helpers,
|
25
|
+
like the method ``params()``, ``env()``, and ``infos()``
|
26
|
+
|
27
|
+
The methods used as entry point must return a ``Hash`` described in the following lines.
|
28
|
+
It may optionnaly be an ``Integer``, to return only a status, or ``:empty``.
|
29
|
+
|
30
|
+
## Options
|
31
|
+
|
32
|
+
The returns of a Controller method can include the following keys:
|
33
|
+
|
34
|
+
- :plain
|
35
|
+
- :html
|
36
|
+
- :json
|
37
|
+
- :content
|
38
|
+
- :type
|
39
|
+
- :status
|
40
|
+
|
41
|
+
Example:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
class MyController < Nephos::Controller
|
45
|
+
def create
|
46
|
+
return {json: {id: 1, name: "Data"}, status: 201}
|
47
|
+
end
|
48
|
+
def index
|
49
|
+
return {type: "text/plain", content: "All your data"}
|
50
|
+
end
|
51
|
+
def coucou
|
52
|
+
return {status: 404}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
```
|
56
|
+
|
57
|
+
The following sections will describe how each key works and modify the HTTP response.
|
58
|
+
|
59
|
+
### Content
|
60
|
+
|
61
|
+
The ``:content`` key must be associated with a ``String`` (or ``Hash`` is json).
|
62
|
+
|
63
|
+
**Optionnal**:
|
64
|
+
a default value is provided, based on the ``:status`` if no ``:content`` if specified.
|
65
|
+
|
66
|
+
### Type
|
67
|
+
|
68
|
+
The ``:type`` key has to be associated with a ``String`` matching with **"kind/type"**.
|
69
|
+
|
70
|
+
**Optionnal**:
|
71
|
+
the default value is ``text/plain``
|
72
|
+
|
73
|
+
Kinds and Types (called type and sub-type by w3c) are described here:
|
74
|
+
[the w3c documentation](http://www.w3.org/Protocols/rfc1341/4_Content-Type.html)
|
75
|
+
|
76
|
+
#### Kind:
|
77
|
+
|
78
|
+
- image
|
79
|
+
- text
|
80
|
+
- ...
|
81
|
+
|
82
|
+
#### Type:
|
83
|
+
|
84
|
+
- plain
|
85
|
+
- javascript
|
86
|
+
- jpeg
|
87
|
+
- ...
|
88
|
+
|
89
|
+
|
90
|
+
### Status
|
91
|
+
|
92
|
+
The ``:status`` key is associable with an Integer. It must represent the HTTP status code.
|
93
|
+
|
94
|
+
**Optionnal**:
|
95
|
+
The default value is 200.
|
96
|
+
|
97
|
+
[The complete HTTP status code list](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)
|
98
|
+
|
99
|
+
|
100
|
+
### Plain, HTML, JSON
|
101
|
+
|
102
|
+
The keys ``:plain``, ``:html``, ``:json`` can replace both ``:content`` ``:type``.
|
103
|
+
It is associated like ``:content`` and **replace automaticaly the type**.
|
104
|
+
|
105
|
+
key | type
|
106
|
+
---|---
|
107
|
+
:plain|text/plain
|
108
|
+
:html|text/html
|
109
|
+
:json|text/javascript
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Sequel
|
2
|
+
|
3
|
+
Sequel is an orm and database connector.
|
4
|
+
It is easy to use and configure.
|
5
|
+
|
6
|
+
It handles connection with DB, sql request creation, caching, etc.
|
7
|
+
|
8
|
+
[Sequel documentation](http://sequel.jeremyevans.net/documentation.html)
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
```bash
|
13
|
+
gem install sequel
|
14
|
+
```
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
require 'sequel'
|
20
|
+
DB = Sequel.connect(ENV['DATABASE_URL'])
|
21
|
+
```
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Generator Guide
|
2
|
+
|
3
|
+
The ``ngenerator`` is a lite application designed to make easier the application management.
|
4
|
+
|
5
|
+
Actually, it allows you to create new application and controller.
|
6
|
+
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
```bash
|
10
|
+
ngenerator --mode <options>
|
11
|
+
```
|
12
|
+
|
13
|
+
### Generate new application
|
14
|
+
|
15
|
+
```bash
|
16
|
+
ngenerator --application <name>
|
17
|
+
```
|
18
|
+
|
19
|
+
Create a directory name ``<name>``, initialize a git repository and create basic files.
|
20
|
+
|
21
|
+
### Generate new controller
|
22
|
+
|
23
|
+
```bash
|
24
|
+
ngenerator --controller <name>
|
25
|
+
```
|
26
|
+
|
27
|
+
Generate a file ``/app/<downcasename_controller.rb>`` with a class named ``CapitalizeNameController`` inherited by ``Nephos::Controller``.
|
28
|
+
|
29
|
+
### Generate new route
|
30
|
+
|
31
|
+
```bash
|
32
|
+
ngenerator --route VERB "/url" "Controller#Method" # or also
|
33
|
+
ngenerator --route VERB "/url" Controller Method
|
34
|
+
```
|
35
|
+
|
36
|
+
Generate a new route based on the parameters, added to the ``routes.rb`` file.
|
37
|
+
|
38
|
+
### Remove a route
|
39
|
+
|
40
|
+
```bash
|
41
|
+
ngenerator --rm --route VERB "/url" "Controller#Method"
|
42
|
+
```
|
43
|
+
|
44
|
+
It will remove a route, generator by the generator, from the ``routes.rb`` file.
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# Routing Guide
|
2
|
+
|
3
|
+
## How the routes are inputed by the client ?
|
4
|
+
|
5
|
+
Each HTTP request made by the client will contains a **REQUEST_URI** value.
|
6
|
+
The web server receive this information, and will choose what to do,
|
7
|
+
based on the rules you will define.
|
8
|
+
|
9
|
+
## How to define the rules ?
|
10
|
+
|
11
|
+
You have to write the rules in the ``/routes.rb`` file.
|
12
|
+
Few helpers are provided to make the job easier.
|
13
|
+
They will be described in the following section.
|
14
|
+
|
15
|
+
## The helpers
|
16
|
+
|
17
|
+
As every HTTP request requires an HTTP verb, there is 4 helpers to handle them.
|
18
|
+
``get``, ``post``, ``put``, ``add_route``. Indeed, there is 3 main verbs (GET POST PUT).
|
19
|
+
But as you can need to create other verbs (DELETE, PATCH, ...), we allows you to handle them.
|
20
|
+
|
21
|
+
### add_route
|
22
|
+
|
23
|
+
The method ``add_route`` take 2 arguments.
|
24
|
+
|
25
|
+
1. verb (has to be a string, upcase as possible, like **GET**)
|
26
|
+
2. option (a **Hash** with 3 required keys)
|
27
|
+
|
28
|
+
The option argument must contains the 3 following keys:
|
29
|
+
|
30
|
+
- ``:url``: the url to handle (client input)
|
31
|
+
- ``:controller``: the controller to use
|
32
|
+
- ``:method``: the method of the controller that will be used to compute and render a result to the client.
|
33
|
+
|
34
|
+
As example, yuo can write:
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
add_route "GET", url: "/tmp", controller: "MyController", method: "tmp"
|
38
|
+
```
|
39
|
+
|
40
|
+
### get post put
|
41
|
+
|
42
|
+
Theses 3 helpers allows you to use ``add_route`` without the first argument.
|
43
|
+
|
44
|
+
### resource
|
45
|
+
|
46
|
+
This method takes 1 parameter and 1 block.
|
47
|
+
The parameter is a partial url, and the bloc, other routes.
|
48
|
+
|
49
|
+
Resource can be chained many times.
|
50
|
+
For Example, you can do this:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
resource "user" do
|
54
|
+
resource "informations" do
|
55
|
+
get url: "/index", controller: "UserController", method: "show" # /user/informations/index
|
56
|
+
end
|
57
|
+
end
|
58
|
+
```
|
59
|
+
|
60
|
+
It will generate the route ``/home/index``, calling the ``MainController#root`` method.
|
61
|
+
|
62
|
+
|
63
|
+
## URL Parameters
|
64
|
+
|
65
|
+
**TODO**
|
66
|
+
|
67
|
+
place a ``/:param`` in your route. The parameter will be placed in the controller in the ``params`` method
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Slim
|
2
|
+
|
3
|
+
Slim is a HTML templating langage, simple to implement in the Nephos Server.
|
4
|
+
[Slim documentation](http://slim-lang.com)
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
```bash
|
9
|
+
gem install slim
|
10
|
+
```
|
11
|
+
|
12
|
+
## Usage in Nephos Server
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
class UserController < Nephos::Controller
|
16
|
+
def show
|
17
|
+
#TODO: read a file, use slim with parameters
|
18
|
+
end
|
19
|
+
end
|
20
|
+
```
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Nephos Ruby Server
|
2
2
|
|
3
|
+
[![Gitlab Tests](https://gitlab.com/ci/projects/8973/status.png?ref=master)](https://gitlab.com/ci/projects/8973?ref=master)
|
4
|
+
|
3
5
|
[![GitHub version](https://badge.fury.io/gh/pouleta%2FNephosRubyServer.svg)](http://badge.fury.io/gh/pouleta%2FNephosRubyServer)
|
4
6
|
|
5
7
|
[![Gem Version](https://badge.fury.io/rb/nephos-server.svg)](http://badge.fury.io/rb/nephos-server)
|
@@ -51,6 +53,7 @@ Theses guides will provide you knowlegde about everything you can use in the app
|
|
51
53
|
- [Generator GUIDE](DOCUMENTATION/GUIDE_GENERATOR.md)
|
52
54
|
- [Render API](DOCUMENTATION/API_RENDER.md)
|
53
55
|
- [Router GUIDE](DOCUMENTATION/GUIDE_ROUTER.md)
|
56
|
+
- [Controller GUIDE](DOCUMENTATION/GUIDE_CONTROLLER.md)
|
54
57
|
- [Code documentation on RubyDoc.info](http://www.rubydoc.info/gems/nephos-server/toplevel) -> **Note: you can also generate local documentation via yard**
|
55
58
|
|
56
59
|
## Examples
|
@@ -68,7 +71,8 @@ The basic code of a controller can be generated via ``ngenerator controller NAME
|
|
68
71
|
|
69
72
|
```ruby
|
70
73
|
class Example < Nephos::Controller
|
71
|
-
|
74
|
+
def root
|
75
|
+
cookies["last_visit"] = Time.now
|
72
76
|
if params["index"] == "true"
|
73
77
|
return {plain: "index"}
|
74
78
|
else
|
@@ -114,15 +118,13 @@ end
|
|
114
118
|
# Developers: Roadmap
|
115
119
|
|
116
120
|
## TODO v0.5
|
117
|
-
- cookies, ...
|
118
|
-
- usage of rack parsers (Rack::Request.new(env) etc.)
|
119
|
-
- improved code documentation
|
120
121
|
|
121
122
|
## TODO v0.6
|
122
123
|
- startable as daemon
|
123
124
|
- hooks for controller
|
124
125
|
- feature to change HTTP header from controller
|
125
126
|
- customisable default 404 errors and 500 errors
|
127
|
+
- functionnal tests
|
126
128
|
|
127
129
|
## v1 requierements
|
128
130
|
- Environement, Daemons, Port, Listen Host, Routables, Arguments
|
data/app/main.rb
CHANGED
@@ -50,9 +50,23 @@ class MainController < Nephos::Controller
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
|
53
|
+
def add_cookie
|
54
|
+
cookies["UN_COOKIE_VAUT:"] = "UN BON MOMENT !"
|
55
|
+
{plain: "cookie set"}
|
56
|
+
end
|
57
|
+
|
58
|
+
def get_cookies
|
59
|
+
{json: cookies.to_h}
|
60
|
+
end
|
61
|
+
|
62
|
+
# require 'pry'
|
54
63
|
def debug
|
55
|
-
binding.pry
|
64
|
+
# binding.pry
|
65
|
+
{}
|
66
|
+
end
|
67
|
+
|
68
|
+
def err500
|
69
|
+
tessssssssss
|
56
70
|
end
|
57
71
|
|
58
72
|
end
|
data/bin/nephos-generator
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
require 'colorize'
|
4
4
|
require 'optparse'
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
require_relative '../lib/nephos-server/version'
|
7
|
+
require_relative '../lib/nephos-server/bin-helpers'
|
8
8
|
|
9
9
|
GEMFILE = <<EOF
|
10
10
|
source 'https://rubygems.org'
|
data/bin/nephos-server
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
require 'colorize'
|
4
4
|
require 'optparse'
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
require_relative '../lib/nephos-server/bin-helpers'
|
7
|
+
require_relative '../lib/nephos-server/version'
|
8
8
|
|
9
9
|
class RoutingError < StandardError; end
|
10
10
|
|
@@ -37,6 +37,8 @@ begin
|
|
37
37
|
|
38
38
|
end.parse!
|
39
39
|
|
40
|
+
Nephos.env = $server_env
|
41
|
+
|
40
42
|
Dir.chdir(opts[0]) if not opts.empty?
|
41
43
|
|
42
44
|
if $test
|
data/bin/nephos-status
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
require 'colorize'
|
4
4
|
require 'optparse'
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
require_relative '../lib/nephos-server/version'
|
7
|
+
require_relative '../lib/nephos-server/bin-helpers'
|
8
8
|
|
9
9
|
opt = OptionParser.new do |opts|
|
10
10
|
opts.banner = "Usage<#{Nephos::VERSION}>: nephos-status [appli directory]"
|
@@ -7,6 +7,7 @@ module Nephos
|
|
7
7
|
class Controller
|
8
8
|
|
9
9
|
attr_reader :env, :infos, :callpath, :params, :cookies
|
10
|
+
attr_reader :req
|
10
11
|
|
11
12
|
# @param env [Hash] env extracted from the http request
|
12
13
|
# @param parsed [Hash] pre-parsed env with parameters, ...
|
@@ -18,13 +19,14 @@ module Nephos
|
|
18
19
|
raise ArgumentError, "Invalid Parsed. :params must be associated with a Hash" unless parsed[:params].is_a? Hash
|
19
20
|
raise ArgumentError, "Invalid Callpath. :params must be associated with an Array" unless callpath[:params].is_a? Array
|
20
21
|
@env= env
|
22
|
+
@req= Rack::Request.new(env)
|
21
23
|
@infos= parsed
|
22
24
|
@callpath= callpath
|
23
25
|
@params= parsed[:params]
|
24
26
|
@params.merge! Hash[callpath[:params].zip @infos[:path]]
|
25
27
|
@params.select!{|k,v| not k.to_s.empty?}
|
26
28
|
@params = Params.new(@params)
|
27
|
-
@cookies = Params.new()
|
29
|
+
@cookies = Params.new(@req.cookies)
|
28
30
|
end
|
29
31
|
|
30
32
|
end
|
@@ -11,11 +11,30 @@ module Nephos
|
|
11
11
|
|
12
12
|
ROUTES = []
|
13
13
|
|
14
|
-
# @param
|
14
|
+
# @param args Contain the controller and the method to call on it
|
15
15
|
#
|
16
16
|
# Shortcut to #{Nephos::Responder.render}
|
17
|
-
def self.render
|
18
|
-
|
17
|
+
def self.render *args
|
18
|
+
if args.first.is_a? Nephos::Controller
|
19
|
+
return Responder.render_from_controller *args
|
20
|
+
end
|
21
|
+
return Responder.render *args
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.error(code, err=nil)
|
25
|
+
if ENV["ENVIRONMENT"].to_s.match(/prod(uction)?/)
|
26
|
+
return render(status: code)
|
27
|
+
elsif err
|
28
|
+
msg = err
|
29
|
+
if msg.is_a? Exception
|
30
|
+
msg = err.message + "\n"
|
31
|
+
msg += "--- Backtrace ---\n" + err.backtrace.join("\n") + "\n" if Nephos.env != "production"
|
32
|
+
end
|
33
|
+
return render(status: code,
|
34
|
+
content: "Error: #{code}\n#{msg}")
|
35
|
+
else
|
36
|
+
return render(status: code)
|
37
|
+
end
|
19
38
|
end
|
20
39
|
|
21
40
|
# @param path [Array]
|
@@ -35,19 +54,8 @@ module Nephos
|
|
35
54
|
return {route: route, verb: verb, from: from, path: path, params: params}
|
36
55
|
end
|
37
56
|
|
38
|
-
|
39
|
-
|
40
|
-
return render(status: code)
|
41
|
-
elsif err
|
42
|
-
#TODO: improve this
|
43
|
-
return render(status: code, content: "Error: #{code}\n" + (err.is_a?(String) ? err : err.message))
|
44
|
-
else
|
45
|
-
return render(status: code)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# Interface which handle the client query (stored in env), calls the
|
50
|
-
# {Controller} method (using the routes) and render it's return
|
57
|
+
# Interface which handle the client query (stored in env), create a new
|
58
|
+
# {Controller} instance, and call the render on it
|
51
59
|
def self.execute(env)
|
52
60
|
begin
|
53
61
|
route = URI.parse(env['REQUEST_URI'])
|
@@ -61,7 +69,7 @@ module Nephos
|
|
61
69
|
return error(404, "404 not found \"#{route}\"") if call.nil?
|
62
70
|
begin
|
63
71
|
controller = Module.const_get(call[:controller]).new(env, parsed, call)
|
64
|
-
return render(controller
|
72
|
+
return render(controller, call[:method])
|
65
73
|
rescue => err
|
66
74
|
return error(500, err)
|
67
75
|
end
|
@@ -62,16 +62,32 @@ module Nephos
|
|
62
62
|
params
|
63
63
|
end
|
64
64
|
|
65
|
-
|
65
|
+
def self.empty_resp
|
66
|
+
resp = Rack::Response.new
|
67
|
+
resp.status = 204
|
68
|
+
resp["Content-Type"] = ct_specific({type: PRESET_CT[:plain]})
|
69
|
+
resp
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.render_from_controller controller, method_to_call
|
73
|
+
params = controller.send method_to_call
|
74
|
+
resp = Responder.render(params)
|
75
|
+
controller.cookies.each do |k, v|
|
76
|
+
resp.set_cookie k, v
|
77
|
+
end
|
78
|
+
return resp
|
79
|
+
end
|
80
|
+
|
81
|
+
# @param controller [Controller]
|
82
|
+
# @param method_to_call [Symbol]
|
66
83
|
def self.render params
|
67
|
-
return
|
84
|
+
return Responder.empty_resp if params == :empty
|
68
85
|
return render(status: params) if params.is_a? Integer
|
69
|
-
params = set_default_params(params)
|
70
86
|
resp = Rack::Response.new
|
87
|
+
params = set_default_params(params)
|
71
88
|
resp.status = params[:status]
|
72
89
|
resp["Content-Type"] = params[:type]
|
73
90
|
resp.body = [params[:content]]
|
74
|
-
#resp.set_cookies ...
|
75
91
|
return resp
|
76
92
|
end
|
77
93
|
|
data/nephos-server.gemspec
CHANGED
@@ -4,30 +4,37 @@ Gem::Specification.new do |s|
|
|
4
4
|
s.date = Time.now.getgm.to_s.split.first
|
5
5
|
s.summary = File.read("CHANGELOG").match(/^v[^\n]+\n((\t[^\n]+\n)+)/m)[1].split("\t").join
|
6
6
|
s.description = ' a minimalist server, based on rack/puma, with routing, rendering, and controllers. Designed for quick api.'
|
7
|
-
s.authors = [
|
8
|
-
|
9
|
-
]
|
10
|
-
s.email = 'poulet_a@epitech.eu',
|
7
|
+
s.authors = ['poulet_a']
|
8
|
+
s.email = ['poulet_a@epitech.eu']
|
11
9
|
s.files = %w(
|
12
10
|
lib/nephos-server.rb
|
13
|
-
lib/nephos-server/version.rb
|
14
11
|
lib/nephos-server/basic_errors.rb
|
15
|
-
lib/nephos-server/params.rb
|
16
|
-
lib/nephos-server/controller.rb
|
17
12
|
lib/nephos-server/bin-helpers.rb
|
18
|
-
lib/nephos-server/
|
19
|
-
lib/nephos-server/
|
13
|
+
lib/nephos-server/controller.rb
|
14
|
+
lib/nephos-server/params.rb
|
20
15
|
lib/nephos-server/router/main.rb
|
21
16
|
lib/nephos-server/router/load.rb
|
22
17
|
lib/nephos-server/router/helpers.rb
|
18
|
+
lib/nephos-server/server/main.rb
|
19
|
+
lib/nephos-server/server/responder.rb
|
20
|
+
lib/nephos-server/version.rb
|
21
|
+
|
23
22
|
README.md
|
23
|
+
DOCUMENTATION/API_RENDER.md
|
24
|
+
DOCUMENTATION/GUIDE_CONTROLLER.md
|
25
|
+
DOCUMENTATION/GUIDE_GENERATOR.md
|
26
|
+
DOCUMENTATION/GUIDE_ROUTER.md
|
27
|
+
DOCUMENTATION/DATABASE/SEQUEL.md
|
28
|
+
DOCUMENTATION/TEMPLATING/SLIM.md
|
24
29
|
CHANGELOG
|
30
|
+
|
25
31
|
Rakefile
|
26
32
|
Procfile
|
27
33
|
Gemfile
|
28
34
|
Gemfile.lock
|
29
35
|
nephos-server.gemspec
|
30
36
|
version
|
37
|
+
|
31
38
|
test/test.rb
|
32
39
|
test/responder.rb
|
33
40
|
test/router.rb
|
@@ -35,6 +42,7 @@ test/params.rb
|
|
35
42
|
test/controller.rb
|
36
43
|
test/generator.rb
|
37
44
|
routes.rb
|
45
|
+
|
38
46
|
app/dataset.rb
|
39
47
|
app/image.jpg
|
40
48
|
app/main.rb
|
data/routes.rb
CHANGED
@@ -20,3 +20,7 @@ get url: "/hello", controller: "MainController", method: "hello"
|
|
20
20
|
get url: "/image", controller: "MainController", method: "image"
|
21
21
|
get url: "/image/:image", controller: "MainController", method: "image"
|
22
22
|
get url: "img/:image", controller: "MainController", method: "image"
|
23
|
+
|
24
|
+
get url: "/get_cookies", controller: "MainController", method: "get_cookies"
|
25
|
+
get url: "/add_cookie", controller: "MainController", method: "add_cookie"
|
26
|
+
get url: "/err500", controller: "MainController", method: "err500"
|
data/test/generator.rb
CHANGED
@@ -3,7 +3,7 @@ class TestNephosServerGenerator < Test::Unit::TestCase
|
|
3
3
|
def test_generator_application
|
4
4
|
`rm -rf /tmp/nephos-server-test 2> /tmp/null`
|
5
5
|
|
6
|
-
`./bin/nephos-generator -a /tmp/nephos-server-test --no-build --no-git`
|
6
|
+
`./bin/nephos-generator --test -a /tmp/nephos-server-test --no-build --no-git`
|
7
7
|
assert(Dir.exists? "/tmp/nephos-server-test")
|
8
8
|
assert(File.exists? "/tmp/nephos-server-test/Gemfile")
|
9
9
|
assert(File.exists? "/tmp/nephos-server-test/routes.rb")
|
data/test/responder.rb
CHANGED
@@ -2,7 +2,7 @@ class TestNephosServerResponder < Test::Unit::TestCase
|
|
2
2
|
|
3
3
|
def test_content_type
|
4
4
|
assert_equal(
|
5
|
-
|
5
|
+
"KIND/TYPE" "; charset=" "CHARSET",
|
6
6
|
Nephos::Responder.content_type("KIND", "TYPE", "CHARSET")
|
7
7
|
)
|
8
8
|
end
|
@@ -79,11 +79,36 @@ class TestNephosServerResponder < Test::Unit::TestCase
|
|
79
79
|
assert_equal json, p5[:type]
|
80
80
|
end
|
81
81
|
|
82
|
-
def
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
)
|
82
|
+
def test_render_simple
|
83
|
+
r1 = Nephos::Responder.render(:empty)
|
84
|
+
r2 = Nephos::Responder.render(200)
|
85
|
+
r3 = Nephos::Responder.render(201)
|
86
|
+
r4 = Nephos::Responder.render(status: 202)
|
87
|
+
r5 = Nephos::Responder.render(plain: "")
|
88
|
+
r6 = Nephos::Responder.render(json: "")
|
89
|
+
r7 = Nephos::Responder.render(html: "")
|
90
|
+
assert_equal(204, r1.status)
|
91
|
+
assert_equal(200, r2.status)
|
92
|
+
assert_equal(201, r3.status)
|
93
|
+
assert_equal(202, r4.status)
|
94
|
+
assert_equal(200, r5.status)
|
95
|
+
assert_equal(200, r6.status)
|
96
|
+
assert_equal(200, r7.status)
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_render_advanced
|
100
|
+
r1 = Nephos::Responder.render(status: 201, plain: "plaaaain")
|
101
|
+
r2 = Nephos::Responder.render(status: 201, json: {data: [1, 2]})
|
102
|
+
r3 = Nephos::Responder.render(status: 201, html: "<p>p</p>")
|
103
|
+
assert_equal(201, r1.status)
|
104
|
+
assert_equal("text/plain; charset=UTF-8", r1["Content-type"])
|
105
|
+
assert_equal(["plaaaain"], r1.body)
|
106
|
+
assert_equal(201, r2.status)
|
107
|
+
assert_equal("application/json; charset=UTF-8", r2["Content-type"])
|
108
|
+
assert_equal(["{\"data\":[1,2]}"], r2.body)
|
109
|
+
assert_equal(201, r3.status)
|
110
|
+
assert_equal("text/html; charset=UTF-8", r3["Content-type"])
|
111
|
+
assert_equal(["<p>p</p>"], r3.body)
|
87
112
|
end
|
88
113
|
|
89
114
|
end
|
data/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.4
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nephos-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- poulet_a
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nomorebeer
|
@@ -70,38 +70,6 @@ description: " a minimalist server, based on rack/puma, with routing, rendering,
|
|
70
70
|
controllers. Designed for quick api."
|
71
71
|
email:
|
72
72
|
- poulet_a@epitech.eu
|
73
|
-
- - lib/nephos-server.rb
|
74
|
-
- lib/nephos-server/version.rb
|
75
|
-
- lib/nephos-server/basic_errors.rb
|
76
|
-
- lib/nephos-server/params.rb
|
77
|
-
- lib/nephos-server/controller.rb
|
78
|
-
- lib/nephos-server/bin-helpers.rb
|
79
|
-
- lib/nephos-server/server/main.rb
|
80
|
-
- lib/nephos-server/server/responder.rb
|
81
|
-
- lib/nephos-server/router/main.rb
|
82
|
-
- lib/nephos-server/router/load.rb
|
83
|
-
- lib/nephos-server/router/helpers.rb
|
84
|
-
- README.md
|
85
|
-
- CHANGELOG
|
86
|
-
- Rakefile
|
87
|
-
- Procfile
|
88
|
-
- Gemfile
|
89
|
-
- Gemfile.lock
|
90
|
-
- nephos-server.gemspec
|
91
|
-
- version
|
92
|
-
- test/test.rb
|
93
|
-
- test/responder.rb
|
94
|
-
- test/router.rb
|
95
|
-
- test/params.rb
|
96
|
-
- test/controller.rb
|
97
|
-
- test/generator.rb
|
98
|
-
- routes.rb
|
99
|
-
- app/dataset.rb
|
100
|
-
- app/image.jpg
|
101
|
-
- app/main.rb
|
102
|
-
- bin/nephos-server
|
103
|
-
- bin/nephos-generator
|
104
|
-
- bin/nephos-status
|
105
73
|
executables:
|
106
74
|
- nephos-server
|
107
75
|
- nephos-generator
|
@@ -110,6 +78,12 @@ extensions: []
|
|
110
78
|
extra_rdoc_files: []
|
111
79
|
files:
|
112
80
|
- CHANGELOG
|
81
|
+
- DOCUMENTATION/API_RENDER.md
|
82
|
+
- DOCUMENTATION/DATABASE/SEQUEL.md
|
83
|
+
- DOCUMENTATION/GUIDE_CONTROLLER.md
|
84
|
+
- DOCUMENTATION/GUIDE_GENERATOR.md
|
85
|
+
- DOCUMENTATION/GUIDE_ROUTER.md
|
86
|
+
- DOCUMENTATION/TEMPLATING/SLIM.md
|
113
87
|
- Gemfile
|
114
88
|
- Gemfile.lock
|
115
89
|
- Procfile
|
@@ -164,6 +138,7 @@ rubyforge_project:
|
|
164
138
|
rubygems_version: 2.4.8
|
165
139
|
signing_key:
|
166
140
|
specification_version: 4
|
167
|
-
summary: "* fix regression on
|
141
|
+
summary: "* fix regression on empty response * add unitary tests * improve gemspec
|
142
|
+
* fix severe regression on responder * fix environment bug"
|
168
143
|
test_files: []
|
169
144
|
has_rdoc:
|