nephos-server 0.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 +7 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +15 -0
- data/Procfile +1 -0
- data/README.md +63 -0
- data/Rakefile +7 -0
- data/bin/nephos-generator +21 -0
- data/bin/nephos-server +17 -0
- data/lib/nephos-server/routing/controller.rb +16 -0
- data/lib/nephos-server/routing/execute.rb +45 -0
- data/lib/nephos-server/routing/load.rb +18 -0
- data/lib/nephos-server/server/main.rb +29 -0
- data/lib/nephos-server/server/responder.rb +29 -0
- data/lib/nephos-server.rb +1 -0
- data/nephos-server.gemspec +39 -0
- data/routes.rb.example +3 -0
- data/test/test.rb +5 -0
- data/version +1 -0
- metadata +109 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0839af6ab21e208af170dba120d5bac00a34d287
|
4
|
+
data.tar.gz: 92b2d4b2760723ade7d820289c5c1c36c5a80c25
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 753a000e9e45bab9c728cc3345b9d81a692b564b84cfaeff4c371d951f19010d4c872de4c21e9522119a2c7d8e3cd42f20371273c7551235e1b9b2dad7898f76
|
7
|
+
data.tar.gz: b86e626ee836f1117c580ea4c26ec02ccbb1e5da83167212feed4dd99fb20e6aaa88c454072db1d5c171f63af29324377f3bc93650d2ee69b6cf9337deae9237
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/Procfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
web: bundle exec bin/server -p $PORT
|
data/README.md
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# Nephos Ruby Server
|
2
|
+
|
3
|
+
This is a simple web server, based on rack and puma, with a minimal help:
|
4
|
+
|
5
|
+
- Controllers
|
6
|
+
- Rendering
|
7
|
+
- Routing
|
8
|
+
|
9
|
+
|
10
|
+
# TODO
|
11
|
+
|
12
|
+
- Improve rendering
|
13
|
+
- html support
|
14
|
+
- Routing
|
15
|
+
- improve get with arguments
|
16
|
+
- add post and put (like get)
|
17
|
+
- add ressource (elarge urls)
|
18
|
+
- Database connection
|
19
|
+
|
20
|
+
|
21
|
+
# Start
|
22
|
+
|
23
|
+
```sh
|
24
|
+
gem install nephos-server
|
25
|
+
nephos-server -p 8080 # port is not required
|
26
|
+
```
|
27
|
+
|
28
|
+
|
29
|
+
# Documentation
|
30
|
+
|
31
|
+
## Controller
|
32
|
+
|
33
|
+
To create a controller, simply add it to ``src/``.
|
34
|
+
The basic code of a controller can be generated via ``bin/generate controller NAME``.
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
class Example < Nephos::Controller
|
38
|
+
def root
|
39
|
+
return {plain: "index"}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
```
|
43
|
+
|
44
|
+
## Rendering
|
45
|
+
|
46
|
+
In a controller, use:
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
return {status: code}
|
50
|
+
return {json: {...}}
|
51
|
+
return {plain: "text"}
|
52
|
+
return :empty
|
53
|
+
```
|
54
|
+
|
55
|
+
## Routing
|
56
|
+
|
57
|
+
Like in ``/routes.rb``, you have to route manually the api.
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
get url: "/", controller: "MainController", method: "root"
|
61
|
+
get url: "/add", controller: "MainController", method: "add_url"
|
62
|
+
get url: "/rm", controller: "MainController", method: "rm_url"
|
63
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
def generate_controller(name, file)
|
4
|
+
f = File.open(file, 'w')
|
5
|
+
f << <<EOF
|
6
|
+
class #{name} < Nephos::Controller
|
7
|
+
def root
|
8
|
+
return {plain: "index"}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
EOF
|
12
|
+
end
|
13
|
+
|
14
|
+
case ARGV[0]
|
15
|
+
when "c", "controller"
|
16
|
+
if not ARGV[1].to_s.empty?
|
17
|
+
generate_controller("#{ARGV[1]}Controller", "src/#{ARGV[1]}.rb")
|
18
|
+
end
|
19
|
+
else
|
20
|
+
puts "help: generate c[ontroller] name"
|
21
|
+
end
|
data/bin/nephos-server
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# require_relative "../lib/nephos-server"
|
4
|
+
require 'nephos-server'
|
5
|
+
|
6
|
+
require 'optparse'
|
7
|
+
|
8
|
+
OptionParser.new do |opts|
|
9
|
+
opts.banner = "Usage: main.rb [update] [-t n] [-s n] [-i id]"
|
10
|
+
|
11
|
+
$server_port = ENV["SERVER_PORT"] || 8080
|
12
|
+
opts.on("-p=nb", "--port=nb", "Port") do |port|
|
13
|
+
$server_port = Integer(port)
|
14
|
+
end
|
15
|
+
end.parse!
|
16
|
+
|
17
|
+
Nephos::Server.start($server_port)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative 'controller'
|
2
|
+
|
3
|
+
Dir[File.expand_path "src/*.rb"].each do |f|
|
4
|
+
load(f) and puts "#{f} loaded"
|
5
|
+
end
|
6
|
+
puts
|
7
|
+
|
8
|
+
module Nephos
|
9
|
+
module Route
|
10
|
+
|
11
|
+
ALL = []
|
12
|
+
|
13
|
+
def self.render arg
|
14
|
+
Responder.render arg
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.parse_path path
|
18
|
+
route = "/" + path.join("/")
|
19
|
+
return ALL.find{|e| e[:url] == route}
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.execute(env)
|
23
|
+
route = URI.parse(env['REQUEST_URI']) rescue (puts "uri err"; return render(status: 500))
|
24
|
+
verb = env["REQUEST_METHOD"]
|
25
|
+
from = env["REMOTE_ADDR"]
|
26
|
+
path = route.path.split("/").select{|e|not e.to_s.empty?}
|
27
|
+
args = Hash[route.query.to_s.split("&").map{|e| e.split("=")}]
|
28
|
+
puts "#{from} [#{verb}] \t ---> \t #{route}"
|
29
|
+
parsed = {route: route, verb: verb, from: from, path: path, args: args}
|
30
|
+
call = parse_path(path)
|
31
|
+
return render status: 404 if call.nil?
|
32
|
+
call = parse_path(path)
|
33
|
+
begin
|
34
|
+
controller = Module.const_get(call[:controller]).new(env, parsed)
|
35
|
+
return render(controller.send(call[:method]) || {status: 500})
|
36
|
+
rescue => err
|
37
|
+
# require 'pry'; binding.pry
|
38
|
+
return render(status: 500)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
require_relative 'load'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class RoutingError < Exception; end
|
2
|
+
class InvalidRoute < RoutingError; end
|
3
|
+
class InvalidGetRoute < InvalidRoute; end
|
4
|
+
|
5
|
+
# @param: what [Hash]
|
6
|
+
def get what
|
7
|
+
raise InvalidGetRoute if not what.keys.include? :url
|
8
|
+
raise InvalidGetRoute if not what.keys.include? :controller
|
9
|
+
raise InvalidGetRoute if not what.keys.include? :method
|
10
|
+
|
11
|
+
# TODO: more check to do
|
12
|
+
|
13
|
+
Nephos::Route::ALL << what
|
14
|
+
puts "get route: #{what}"
|
15
|
+
end
|
16
|
+
|
17
|
+
# require_relative '../../../routes.rb'
|
18
|
+
load 'routes.rb'
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#coding: utf-8
|
2
|
+
|
3
|
+
# require 'json'
|
4
|
+
# require 'yaml'
|
5
|
+
require 'open-uri'
|
6
|
+
require 'rack'
|
7
|
+
|
8
|
+
require_relative 'responder'
|
9
|
+
require_relative '../routing/execute'
|
10
|
+
|
11
|
+
module Nephos
|
12
|
+
class Server
|
13
|
+
|
14
|
+
SERVER = lambda {|env| return Route.execute(env)}
|
15
|
+
|
16
|
+
def initialize port
|
17
|
+
@port = port
|
18
|
+
end
|
19
|
+
|
20
|
+
def start
|
21
|
+
Rack::Server.start :app => SERVER, :Port => @port
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.start port
|
25
|
+
Server.new(port).start
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Nephos
|
4
|
+
module Responder
|
5
|
+
|
6
|
+
CT_CHARSET_ = '; charset=UTF-8'
|
7
|
+
CT_TP = {'Content-type' => 'text/plain' + CT_CHARSET_}
|
8
|
+
CT_TJ = {'Content-type' => 'text/javascript' + CT_CHARSET_}
|
9
|
+
CT_TH = {'Content-type' => 'text/html' + CT_CHARSET_}
|
10
|
+
def self.render params
|
11
|
+
if params == :empty
|
12
|
+
return [204, CT_TP, [""]]
|
13
|
+
elsif params[:status] == 404
|
14
|
+
return [404, CT_TP, ['Error 404 : Not found !']]
|
15
|
+
elsif params[:status] == 500
|
16
|
+
return [500, CT_TP, ['Error 5OO : Internal Server Error !']]
|
17
|
+
elsif params[:status].is_a? Fixnum
|
18
|
+
return [params[:status], CT_TP, ["Error #{params[:status]}"]]
|
19
|
+
elsif params[:json]
|
20
|
+
return [200, CT_TJ, [params[:json].to_json]]
|
21
|
+
elsif params[:plain]
|
22
|
+
return [200, CT_TJ, [params[:plain].to_s]]
|
23
|
+
else
|
24
|
+
render(:empty)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'nephos-server/server/main'
|
@@ -0,0 +1,39 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'nephos-server'
|
3
|
+
s.version = File.read("version")
|
4
|
+
s.date = Time.now.getgm.to_s.split.first
|
5
|
+
s.summary = 'See Changelog'
|
6
|
+
s.description = ' a minimalist server, based on rack/puma, with routing, rendering, and controllers. Designed for quick api.'
|
7
|
+
s.authors = [
|
8
|
+
'poulet_a'
|
9
|
+
]
|
10
|
+
s.email = 'poulet_a@epitech.eu',
|
11
|
+
s.files = [
|
12
|
+
'lib/nephos-server.rb',
|
13
|
+
'lib/nephos-server/server/main.rb',
|
14
|
+
'lib/nephos-server/server/responder.rb',
|
15
|
+
'lib/nephos-server/routing/execute.rb',
|
16
|
+
'lib/nephos-server/routing/load.rb',
|
17
|
+
'lib/nephos-server/routing/controller.rb',
|
18
|
+
'routes.rb.example',
|
19
|
+
'README.md',
|
20
|
+
'Rakefile',
|
21
|
+
'Procfile',
|
22
|
+
'Gemfile',
|
23
|
+
'Gemfile.lock',
|
24
|
+
'nephos-server.gemspec',
|
25
|
+
'version',
|
26
|
+
'test/test.rb',
|
27
|
+
'bin/nephos-server',
|
28
|
+
'bin/nephos-generator'
|
29
|
+
]
|
30
|
+
s.executables = ['nephos-server', 'nephos-generator']
|
31
|
+
s.homepage = 'https://github.com/pouleta/NephosRubyServer'
|
32
|
+
s.license = 'GNU/GPLv3'
|
33
|
+
#s.cert_chain = ['certs/poulet_a.pem']
|
34
|
+
#s.signing_key = File.expand_path('~/.ssh/gem-private_key.pem') if $0 =~ /gem\z/
|
35
|
+
|
36
|
+
s.add_dependency 'nomorebeer', '~> 1.0'
|
37
|
+
s.add_dependency 'rack', '~> 1.6'
|
38
|
+
|
39
|
+
end
|
data/routes.rb.example
ADDED
data/test/test.rb
ADDED
data/version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nephos-server
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- poulet_a
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nomorebeer
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rack
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
description: " a minimalist server, based on rack/puma, with routing, rendering, and
|
42
|
+
controllers. Designed for quick api."
|
43
|
+
email:
|
44
|
+
- poulet_a@epitech.eu
|
45
|
+
- - lib/nephos-server.rb
|
46
|
+
- lib/nephos-server/server/main.rb
|
47
|
+
- lib/nephos-server/server/responder.rb
|
48
|
+
- lib/nephos-server/routing/execute.rb
|
49
|
+
- lib/nephos-server/routing/load.rb
|
50
|
+
- lib/nephos-server/routing/controller.rb
|
51
|
+
- routes.rb.example
|
52
|
+
- README.md
|
53
|
+
- Rakefile
|
54
|
+
- Procfile
|
55
|
+
- Gemfile
|
56
|
+
- Gemfile.lock
|
57
|
+
- nephos-server.gemspec
|
58
|
+
- version
|
59
|
+
- test/test.rb
|
60
|
+
- bin/nephos-server
|
61
|
+
- bin/nephos-generator
|
62
|
+
executables:
|
63
|
+
- nephos-server
|
64
|
+
- nephos-generator
|
65
|
+
extensions: []
|
66
|
+
extra_rdoc_files: []
|
67
|
+
files:
|
68
|
+
- Gemfile
|
69
|
+
- Gemfile.lock
|
70
|
+
- Procfile
|
71
|
+
- README.md
|
72
|
+
- Rakefile
|
73
|
+
- bin/nephos-generator
|
74
|
+
- bin/nephos-server
|
75
|
+
- lib/nephos-server.rb
|
76
|
+
- lib/nephos-server/routing/controller.rb
|
77
|
+
- lib/nephos-server/routing/execute.rb
|
78
|
+
- lib/nephos-server/routing/load.rb
|
79
|
+
- lib/nephos-server/server/main.rb
|
80
|
+
- lib/nephos-server/server/responder.rb
|
81
|
+
- nephos-server.gemspec
|
82
|
+
- routes.rb.example
|
83
|
+
- test/test.rb
|
84
|
+
- version
|
85
|
+
homepage: https://github.com/pouleta/NephosRubyServer
|
86
|
+
licenses:
|
87
|
+
- GNU/GPLv3
|
88
|
+
metadata: {}
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options: []
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
requirements: []
|
104
|
+
rubyforge_project:
|
105
|
+
rubygems_version: 2.4.8
|
106
|
+
signing_key:
|
107
|
+
specification_version: 4
|
108
|
+
summary: See Changelog
|
109
|
+
test_files: []
|