nephos-server 0.1.8 → 0.1.10
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/Gemfile +6 -1
- data/Gemfile.lock +3 -1
- data/README.md +6 -4
- data/bin/nephos-generator +8 -0
- data/bin/nephos-server +2 -2
- data/lib/nephos-server.rb +1 -0
- data/lib/nephos-server/{server/basic_errors.rb → basic_errors.rb} +3 -1
- data/lib/nephos-server/routing/controller.rb +8 -3
- data/lib/nephos-server/routing/execute.rb +8 -4
- data/lib/nephos-server/routing/load.rb +13 -1
- data/lib/nephos-server/server/main.rb +1 -1
- data/lib/nephos-server/server/responder.rb +5 -3
- data/nephos-server.gemspec +1 -1
- data/version +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ebd683681680431232080fb04b684f7096990ea
|
4
|
+
data.tar.gz: 7f2eb0f1413f4b05dba58f0f6cf4b5687d9faacc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c135eb80f258c823ea98467fb958696fdf99e1587fd797130e2b1cb2f5d6d3aa11bb1d261c105b33997b3fe1a5a997905c7d4bae6c5746bd68d3cb5733864fc
|
7
|
+
data.tar.gz: 9d4df9a01574a401b93d90f5ce8330d2a0ddef27271264d2254abda8492c522494f777a8cfb1d4c98f3c39eea33e2ee3f7e70a3b67cc8781ab19310ade63d180
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -15,9 +15,6 @@ This is a simple web server, based on rack and puma, with a minimal help:
|
|
15
15
|
|
16
16
|
# TODO
|
17
17
|
|
18
|
-
- Routing
|
19
|
-
- improve get with arguments
|
20
|
-
- add ressource (elarge urls)
|
21
18
|
- Database connection
|
22
19
|
|
23
20
|
|
@@ -52,8 +49,11 @@ In a controller, use:
|
|
52
49
|
|
53
50
|
```ruby
|
54
51
|
return {status: code}
|
55
|
-
return {
|
52
|
+
return {status: code, content: "Not today"}
|
53
|
+
return {json: {status: "resource created"}, status: 201}
|
56
54
|
return {plain: "text"}
|
55
|
+
return {html: "<html><body><h1>:D</h1></body></html>"}
|
56
|
+
return {type: "image/jpeg", content: File.read("images/photo.jpg")}
|
57
57
|
return :empty
|
58
58
|
```
|
59
59
|
|
@@ -64,7 +64,9 @@ Like in ``/routes.rb``, you have to route manually the api.
|
|
64
64
|
```ruby
|
65
65
|
get url: "/", controller: "MainController", method: "root" # /
|
66
66
|
get url: "/add", controller: "MainController", method: "add_url" # /add
|
67
|
+
get url: "/add/:url", controller: "MainController", method: "add_url" # /add
|
67
68
|
get url: "/rm", controller: "MainController", method: "rm_url" # /rm
|
69
|
+
get url: "/rm/:url", controller: "MainController", method: "rm_url" # /rm
|
68
70
|
resource "infos" do
|
69
71
|
get url: "/", controller: "MainController", method: "root" # generate /infos
|
70
72
|
end
|
data/bin/nephos-generator
CHANGED
@@ -42,6 +42,14 @@ def initialize_application
|
|
42
42
|
File.write "routes.rb", ROUTE_RB
|
43
43
|
File.write "Gemfile", GEMFILE
|
44
44
|
Dir.mkdir "controllers"
|
45
|
+
begin
|
46
|
+
`git init .`
|
47
|
+
puts "Git repository initialized"
|
48
|
+
rescue Errno::ENOENT => err
|
49
|
+
puts "Warning: git repository not initialized"
|
50
|
+
rescue => err
|
51
|
+
puts "Error: #{err.message}"
|
52
|
+
end
|
45
53
|
exec("bundle install")
|
46
54
|
end
|
47
55
|
|
data/bin/nephos-server
CHANGED
@@ -26,13 +26,13 @@ begin
|
|
26
26
|
if not $debug and
|
27
27
|
(not File.exists? "Gemfile.lock" or
|
28
28
|
not File.read("Gemfile.lock").split.index("nephos-server"))
|
29
|
-
raise
|
29
|
+
raise InvalidApplication
|
30
30
|
end
|
31
31
|
|
32
32
|
Nephos::Server.start($server_port)
|
33
33
|
|
34
34
|
rescue RoutingError => err
|
35
|
-
puts "
|
35
|
+
puts "#{err.class}. Check out the documentation and `routes.rb` file: #{err.message}"
|
36
36
|
|
37
37
|
rescue => err
|
38
38
|
puts "Error: #{err.message}"
|
data/lib/nephos-server.rb
CHANGED
@@ -4,4 +4,6 @@ class InvalidRouteUrl < InvalidRoute; end
|
|
4
4
|
class InvalidRouteController < InvalidRoute; end
|
5
5
|
class InvalidRouteMethod < InvalidRoute; end
|
6
6
|
|
7
|
-
class
|
7
|
+
class InvalidApplication < RuntimeError; end
|
8
|
+
class InvalidGit < InvalidApplication; end
|
9
|
+
class NoGitBinary < InvalidGit; end
|
@@ -1,18 +1,23 @@
|
|
1
1
|
module Nephos
|
2
2
|
class Controller
|
3
3
|
|
4
|
-
attr_reader :env, :infos
|
4
|
+
attr_reader :env, :infos, :callpath
|
5
5
|
|
6
6
|
# @param env [Hash] env extracted from the http request
|
7
7
|
# @param parsed [Hash] pre-parsed env with parameters, ...
|
8
|
-
def initialize env, parsed
|
8
|
+
def initialize env={}, parsed={path: [], args: {}}, callpath={params: []}
|
9
9
|
@env= env
|
10
10
|
@infos= parsed
|
11
|
+
@callpath= callpath
|
12
|
+
@params= parsed[:args]
|
13
|
+
@params= @params.merge Hash[callpath[:params].zip @infos[:path]]
|
14
|
+
@params= @params.select{|k,v|k}
|
11
15
|
end
|
12
16
|
|
13
17
|
def arguments
|
14
|
-
@
|
18
|
+
@params
|
15
19
|
end
|
20
|
+
alias :params :arguments
|
16
21
|
|
17
22
|
end
|
18
23
|
end
|
@@ -20,11 +20,16 @@ module Nephos
|
|
20
20
|
# find the right route to use from the url
|
21
21
|
def self.parse_path path, verb
|
22
22
|
route = File.join(["/"] + path)
|
23
|
-
return ALL.find{|e| e[:
|
23
|
+
return ALL.find{|e| e[:match] =~ route and e[:verb] == verb}
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.execute(env)
|
27
|
-
|
27
|
+
begin
|
28
|
+
route = URI.parse(env['REQUEST_URI'])
|
29
|
+
rescue => err
|
30
|
+
puts "uri err #{err.message}".red
|
31
|
+
return render(status: 500)
|
32
|
+
end
|
28
33
|
verb = env["REQUEST_METHOD"]
|
29
34
|
from = env["REMOTE_ADDR"]
|
30
35
|
path = route.path.split("/").select{|e|not e.to_s.empty?}
|
@@ -34,10 +39,9 @@ module Nephos
|
|
34
39
|
call = parse_path(path, verb)
|
35
40
|
return render status: 404 if call.nil?
|
36
41
|
begin
|
37
|
-
controller = Module.const_get(call[:controller]).new(env, parsed)
|
42
|
+
controller = Module.const_get(call[:controller]).new(env, parsed, call)
|
38
43
|
return render(controller.send(call[:method]) || {status: 500})
|
39
44
|
rescue => err
|
40
|
-
# require 'pry'; binding.pry
|
41
45
|
return render(status: 500)
|
42
46
|
end
|
43
47
|
end
|
@@ -6,6 +6,15 @@ module Nephos
|
|
6
6
|
puts "[#{verb}] #{what[:url]} \t ---> \t #{what[:controller]}##{what[:method]}"
|
7
7
|
end
|
8
8
|
|
9
|
+
def self.add_params!(what)
|
10
|
+
params = what[:url].split('/').map do |p|
|
11
|
+
p.match(/:\w+/) ? {p: "[[:graph:]]+", name: p} : {p: p, name: nil}
|
12
|
+
end
|
13
|
+
url = params.map{|e| e[:p]}.join("/")
|
14
|
+
what[:match] = /^#{url}$/
|
15
|
+
what[:params] = params.map{|e| e[:name] && e[:name][1..-1]}[1..-1]
|
16
|
+
end
|
17
|
+
|
9
18
|
def self.check!(what)
|
10
19
|
raise InvalidRouteUrl, "Missing URL" unless what.keys.include? :url
|
11
20
|
raise InvalidRouteController, "Missing Controller" unless what.keys.include? :controller
|
@@ -18,7 +27,7 @@ module Nephos
|
|
18
27
|
if not controller.ancestors.include? Nephos::Controller
|
19
28
|
raise InvalidRouteController, "Class \"#{what[:controller]}\" is not a Nephos::Controller"
|
20
29
|
end
|
21
|
-
if not controller.new
|
30
|
+
if not controller.new.respond_to? what[:method]
|
22
31
|
raise InvalidRouteMethod, "No method named \"#{what[:method]}\""
|
23
32
|
end rescue raise InvalidRouteController, "Cannot initialize controller"
|
24
33
|
end
|
@@ -36,6 +45,7 @@ def get what
|
|
36
45
|
raise InvalidRoute unless what.is_a? Hash
|
37
46
|
what[:url] = File.expand_path File.join(route_prefix, what[:url])
|
38
47
|
Nephos::Route.check!(what)
|
48
|
+
Nephos::Route.add_params!(what)
|
39
49
|
Nephos::Route.add(what, "GET")
|
40
50
|
end
|
41
51
|
|
@@ -44,6 +54,7 @@ def post what
|
|
44
54
|
raise InvalidRoute unless what.is_a? Hash
|
45
55
|
what[:url] = File.join(route_prefix, what[:url])
|
46
56
|
Nephos::Route.check!(what)
|
57
|
+
Nephos::Route.add_params!(what)
|
47
58
|
Nephos::Route.add(what, "POST")
|
48
59
|
end
|
49
60
|
|
@@ -52,6 +63,7 @@ def put what
|
|
52
63
|
raise InvalidRoute unless what.is_a? Hash
|
53
64
|
what[:url] = File.join(route_prefix, what[:url])
|
54
65
|
Nephos::Route.check!(what)
|
66
|
+
Nephos::Route.add_params!(what)
|
55
67
|
Nephos::Route.add(what, "PUT")
|
56
68
|
end
|
57
69
|
|
@@ -32,10 +32,12 @@ module Nephos
|
|
32
32
|
params[:status] ||= 200
|
33
33
|
end
|
34
34
|
if (params.keys & [:plain, :html, :json, :type]).empty?
|
35
|
-
if params[:status].to_s.match(/^[
|
36
|
-
params[:plain] ||= "Error: #{params[:status]} code"
|
35
|
+
if params[:status].to_s.match(/^[45]\d\d$/)
|
36
|
+
params[:plain] ||= params[:content] || "Error: #{params[:status]} code"
|
37
|
+
elsif params[:status].to_s.match(/^[3]\d\d$/)
|
38
|
+
params[:plain] ||= params[:content] || "Redirected: #{params[:status]} code"
|
37
39
|
else
|
38
|
-
params[:plain] ||= "
|
40
|
+
params[:plain] ||= params[:content] || "Status: #{params[:status]} code"
|
39
41
|
end
|
40
42
|
end
|
41
43
|
params
|
data/nephos-server.gemspec
CHANGED
@@ -10,9 +10,9 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.email = 'poulet_a@epitech.eu',
|
11
11
|
s.files = [
|
12
12
|
'lib/nephos-server.rb',
|
13
|
+
'lib/nephos-server/basic_errors.rb',
|
13
14
|
'lib/nephos-server/server/main.rb',
|
14
15
|
'lib/nephos-server/server/responder.rb',
|
15
|
-
'lib/nephos-server/server/basic_errors.rb',
|
16
16
|
'lib/nephos-server/routing/execute.rb',
|
17
17
|
'lib/nephos-server/routing/load.rb',
|
18
18
|
'lib/nephos-server/routing/controller.rb',
|
data/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.10
|
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.1.
|
4
|
+
version: 0.1.10
|
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-08-
|
11
|
+
date: 2015-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nomorebeer
|
@@ -43,9 +43,9 @@ description: " a minimalist server, based on rack/puma, with routing, rendering,
|
|
43
43
|
email:
|
44
44
|
- poulet_a@epitech.eu
|
45
45
|
- - lib/nephos-server.rb
|
46
|
+
- lib/nephos-server/basic_errors.rb
|
46
47
|
- lib/nephos-server/server/main.rb
|
47
48
|
- lib/nephos-server/server/responder.rb
|
48
|
-
- lib/nephos-server/server/basic_errors.rb
|
49
49
|
- lib/nephos-server/routing/execute.rb
|
50
50
|
- lib/nephos-server/routing/load.rb
|
51
51
|
- lib/nephos-server/routing/controller.rb
|
@@ -74,10 +74,10 @@ files:
|
|
74
74
|
- bin/nephos-generator
|
75
75
|
- bin/nephos-server
|
76
76
|
- lib/nephos-server.rb
|
77
|
+
- lib/nephos-server/basic_errors.rb
|
77
78
|
- lib/nephos-server/routing/controller.rb
|
78
79
|
- lib/nephos-server/routing/execute.rb
|
79
80
|
- lib/nephos-server/routing/load.rb
|
80
|
-
- lib/nephos-server/server/basic_errors.rb
|
81
81
|
- lib/nephos-server/server/main.rb
|
82
82
|
- lib/nephos-server/server/responder.rb
|
83
83
|
- nephos-server.gemspec
|