nephos-server 0.5.0 → 0.5.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 829761db1101c722504e7778ec2cd55f8edca2d1
4
- data.tar.gz: 16741f9f42c3754172f69b43fdec9d1c07449d90
3
+ metadata.gz: 0339bf695959f0e5b19b9b73609e561dfb496f23
4
+ data.tar.gz: ed4d9148e39b2540a88d5160d38dfe8d36499d3a
5
5
  SHA512:
6
- metadata.gz: 9236bd2cc50a63baed30ad1c092bcb17b8d2863c40d09dce2d0e605f3a91b457d13738f7036ce7961a98135604095a6857298a866bfa9879f9d783f39439d7bf
7
- data.tar.gz: 345df24516023c3b0d5417a77ab4a86a75e0cc33f353c6d582c5bb8c64a3ecb3a3b52dcef13d97c1b61e3e523f5d7da97588e40c653fd0870f7a1ba29a0b6860
6
+ metadata.gz: db650e2505b3f6a3b54efdfc5d1dfa4da006bed596f54a2b615928c0f676dd626da8a2c6a49073914080566254ddc325cc6d27291c4d09f8e19a82a94fdc1c4a
7
+ data.tar.gz: 6a05e3f8d9d0ece9e41faf43218e6741f30b29246add62032094a7650217a68f5186736e8d358a1e0e8ae52374cf566c4c23259c29919c72440f9e7d8491039a
data/CHANGELOG CHANGED
@@ -1,3 +1,11 @@
1
+ v0.5.2
2
+ * fix regression on content-type from v0.4
3
+
4
+ v0.5.1
5
+ * fix nephos gem (binaries can be used out of an application)
6
+ * improve code documentation (annotations above the methods and classes)
7
+ * fix content type for json to application/json
8
+
1
9
  v0.5.0
2
10
  * improve executables: version taking in count
3
11
 
data/README.md CHANGED
@@ -2,11 +2,14 @@
2
2
 
3
3
  [![GitHub version](https://badge.fury.io/gh/pouleta%2FNephosRubyServer.svg)](http://badge.fury.io/gh/pouleta%2FNephosRubyServer)
4
4
 
5
- [![Gem Version](https://badge.fury.io/rb/nserver.svg)](http://badge.fury.io/rb/nserver)
5
+ [![Gem Version](https://badge.fury.io/rb/nephos-server.svg)](http://badge.fury.io/rb/nephos-server)
6
6
 
7
7
  [![Code Climate](https://codeclimate.com/github/pouleta/NephosRubyServer/badges/gpa.svg)](https://codeclimate.com/github/pouleta/NephosRubyServer)
8
8
 
9
- This is a minimal web server, based on [rack](TODO LINK) and [puma](TODO LINK).
9
+ [![Nephos Executables](https://badge.fury.io/rb/nephos.svg)](http://badge.fury.io/rb/nephos)
10
+
11
+
12
+ This is a minimal web server, based on [rack](https://github.com/rack/rack) and [puma](https://github.com/puma/puma).
10
13
  It is written in ruby. It also gives you a minimal architecture
11
14
  to speed up your application bootstrap.
12
15
 
@@ -48,6 +51,7 @@ Theses guides will provide you knowlegde about everything you can use in the app
48
51
  - [Generator GUIDE](DOCUMENTATION/GUIDE_GENERATOR.md)
49
52
  - [Render API](DOCUMENTATION/API_RENDER.md)
50
53
  - [Router GUIDE](DOCUMENTATION/GUIDE_ROUTER.md)
54
+ - [Code documentation on RubyDoc.info](http://www.rubydoc.info/gems/nephos-server/toplevel) -> **Note: you can also generate local documentation via yard**
51
55
 
52
56
  ## Examples
53
57
 
@@ -110,9 +114,9 @@ end
110
114
  # Developers: Roadmap
111
115
 
112
116
  ## TODO v0.5
113
- - executables with version
114
117
  - cookies, ...
115
118
  - usage of rack parsers (Rack::Request.new(env) etc.)
119
+ - improved code documentation
116
120
 
117
121
  ## TODO v0.6
118
122
  - startable as daemon
data/app/main.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  class MainController < Nephos::Controller
2
2
 
3
3
  def root
4
+ cookies["a"] = "b"
5
+ cookies.delete("b").to_h
6
+ puts cookies
4
7
  {
5
8
  json: {
6
9
  list: $dataset,
data/bin/nephos-server CHANGED
@@ -9,7 +9,7 @@ require 'nephos-server/bin-helpers'
9
9
  class RoutingError < StandardError; end
10
10
 
11
11
  begin
12
- OptionParser.new do |opts|
12
+ opts = OptionParser.new do |opts|
13
13
  opts.banner = "Usage<#{Nephos::VERSION}>: nephos-server <options>"
14
14
 
15
15
  $server_port = ENV["SERVER_PORT"] || 8080
@@ -34,8 +34,11 @@ begin
34
34
  opts.on("--test", "Enable testing mode (for nephos developpers)") do
35
35
  $test = true
36
36
  end
37
+
37
38
  end.parse!
38
39
 
40
+ Dir.chdir(opts[0]) if not opts.empty?
41
+
39
42
  if $test
40
43
  require_relative "../lib/nephos-server"
41
44
  else
data/bin/nephos-status CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'colorize'
3
4
  require 'optparse'
4
5
 
5
6
  require 'nephos-server/version'
@@ -43,5 +44,6 @@ begin
43
44
  end
44
45
 
45
46
  rescue => err
46
- puts err.message
47
+ puts "Error:".red + " #{err.message}"
48
+ puts err.backtrace
47
49
  end
@@ -1,6 +1,15 @@
1
1
  module Nephos
2
2
  module Bin
3
3
 
4
+ # @param dir [String]
5
+ #
6
+ # The method check in the parameter directory:
7
+ # - if the directory exists
8
+ # - if a Gemfile.lock has been generated
9
+ # - if it contain nephos-server dependency
10
+ #
11
+ # note: if the Gemfile includes nephos and not nephos-server,
12
+ # it will work anyway, because nephos require nephos-server
4
13
  def self.is_a_valid_application? dir="."
5
14
  return false if not Dir.exists? dir
6
15
  gfl = File.expand_path "Gemfile.lock", dir
@@ -1,7 +1,12 @@
1
1
  module Nephos
2
+
3
+ # This class must be inherited by the other Controllers.
4
+ # It contains a constructor (you should not rewrite it)
5
+ # It contains some helpers too, like an access to the environment,
6
+ # and the parameters.
2
7
  class Controller
3
8
 
4
- attr_reader :env, :infos, :callpath, :params
9
+ attr_reader :env, :infos, :callpath, :params, :cookies
5
10
 
6
11
  # @param env [Hash] env extracted from the http request
7
12
  # @param parsed [Hash] pre-parsed env with parameters, ...
@@ -19,6 +24,7 @@ module Nephos
19
24
  @params.merge! Hash[callpath[:params].zip @infos[:path]]
20
25
  @params.select!{|k,v| not k.to_s.empty?}
21
26
  @params = Params.new(@params)
27
+ @cookies = Params.new()
22
28
  end
23
29
 
24
30
  end
@@ -1,8 +1,16 @@
1
1
  # coding: utf-8
2
2
 
3
3
  module Nephos
4
+
5
+ # Params to a hash, where every elements are accessibles via a stringified key
6
+ # so, even if the entry was added with the key :KEY, it will be accessible via
7
+ # a string equivalent to :key.to_s
8
+ # param["key"] == param[:key]
9
+ #
10
+ # Every methods present in {Hash} are usable in {Param}.
4
11
  class Params
5
12
 
13
+ # @param hash [Hash] hash containing the parameters
6
14
  def initialize(hash={})
7
15
  raise ArgumentError, "the first argument must be a Hash" unless hash.is_a? Hash
8
16
  @hash = Hash[hash.map{|k,v| [k.to_s, v]}]
@@ -21,5 +29,9 @@ module Nephos
21
29
  @hash[i.to_s] = v.to_s
22
30
  end
23
31
 
32
+ def to_h
33
+ return @hash
34
+ end
35
+
24
36
  end
25
37
  end
@@ -3,6 +3,17 @@ def route_prefix
3
3
  File.join(["/"] + @route_prefix)
4
4
  end
5
5
 
6
+ # @param verb [String] has to be a valid http verb, so a string uppercase
7
+ # @param what [Hash] has to contain the following keys:
8
+ # - :url
9
+ # - :controller
10
+ # - :method
11
+ #
12
+ # The method create a valid route, set in Nephos::Router::ROUTES
13
+ # it will call the method from the controller, based on the parameters
14
+ # if the client request match with the verb and the url provided.
15
+ #
16
+ # Checkout the documentation about the parameters and API for more informations
6
17
  def add_route(verb, what)
7
18
  raise InvalidRoute, "what must be a hash" unless what.is_a? Hash
8
19
  what[:url] = File.expand_path File.join(route_prefix, what[:url])
@@ -11,21 +22,28 @@ def add_route(verb, what)
11
22
  Nephos::Router.add(what, verb)
12
23
  end
13
24
 
14
- # @param what [Hash]
25
+ # @param what [Hash] see {#add_route}
15
26
  def get what
16
27
  add_route "GET", what
17
28
  end
18
29
 
19
- # @param what [Hash]
30
+ # @param what [Hash] see {#add_route}
20
31
  def post what
21
32
  add_route "POST", what
22
33
  end
23
34
 
24
- # @param what [Hash]
35
+ # @param what [Hash] see {#add_route}
25
36
  def put what
26
37
  add_route "PUT", what
27
38
  end
28
39
 
40
+ # @param name [String]
41
+ # @param block [Bloc]
42
+ #
43
+ # Create a resource named based on the parameter name
44
+ # Every call of {#add_route} {#get} {#post} {#put} in the bloc
45
+ # will have a modified url, working with the following schema:
46
+ # "/name/" + url
29
47
  def resource(name, &block)
30
48
  @route_prefix ||= []
31
49
  @route_prefix << name
@@ -8,6 +8,9 @@ module Nephos
8
8
  return display
9
9
  end
10
10
 
11
+ # @param what [Hash]
12
+ #
13
+ # TODO: doc
11
14
  def self.add_params!(what)
12
15
  params = what[:url].split('/').map do |p|
13
16
  p.match(/:\w+/) ? {p: "[^\/]+", name: p} : {p: p, name: nil}
@@ -18,12 +21,28 @@ module Nephos
18
21
  what[:params] = params.map{|e| e[:name] && e[:name][1..-1]}[1..-1] || []
19
22
  end
20
23
 
24
+ # @param what [Hash]
25
+ #
26
+ # Check if the what parameter contains the needed keys
27
+ # - :url
28
+ # - :controller
29
+ # - :method
21
30
  def self.check_keys! what
22
31
  raise InvalidRouteUrl, "Missing URL" unless what.keys.include? :url
23
32
  raise InvalidRouteController, "Missing Controller" unless what.keys.include? :controller
24
33
  raise InvalidRouteMethod, "Missing Method" unless what.keys.include? :method
25
34
  end
26
35
 
36
+ # @param what [Hash]
37
+ #
38
+ # TODO:
39
+ # - Improve instanciation test
40
+ #
41
+ # Check if:
42
+ # - the what parameter contains a :controller
43
+ # - this controller exists
44
+ # - if the controller is a child of the {Controller} class
45
+ # - if the controller is instanciable
27
46
  def self.check_controller! what
28
47
  begin
29
48
  controller = Module.const_get(what[:controller])
@@ -41,6 +60,10 @@ module Nephos
41
60
  return instance
42
61
  end
43
62
 
63
+ # @param what [Hash]
64
+ # @param instance [Controller]
65
+ #
66
+ # Check if the param instance has a method named what[:method]
44
67
  def self.check_method! what, instance
45
68
  if not instance.respond_to? what[:method]
46
69
  raise InvalidRouteMethod, "No method named \"#{what[:method]}\""
@@ -4,18 +4,23 @@ end
4
4
  puts
5
5
 
6
6
  module Nephos
7
+
8
+ # The {Router} provides an interface between the {Controller} and the client
9
+ # queries.
7
10
  module Router
8
11
 
9
12
  ROUTES = []
10
13
 
11
14
  # @param arg [Hash or Symbol]
12
- # shortcut to #{Nephos::Responder.render}
15
+ #
16
+ # Shortcut to #{Nephos::Responder.render}
13
17
  def self.render arg
14
18
  Responder.render arg
15
19
  end
16
20
 
17
21
  # @param path [Array]
18
- # find the right route to use from the url
22
+ #
23
+ # Find the right route to use from the url
19
24
  def self.parse_path path, verb
20
25
  route = File.join(["/"] + path)
21
26
  return ROUTES.find{|e| e[:match] =~ route and e[:verb] == verb}
@@ -41,6 +46,8 @@ module Nephos
41
46
  end
42
47
  end
43
48
 
49
+ # Interface which handle the client query (stored in env), calls the
50
+ # {Controller} method (using the routes) and render it's return
44
51
  def self.execute(env)
45
52
  begin
46
53
  route = URI.parse(env['REQUEST_URI'])
@@ -6,7 +6,7 @@ module Nephos
6
6
  CT_CHARSET_PREFIX = '; charset='
7
7
 
8
8
  def self.content_type(kind, type, charset='UTF-8')
9
- {'Content-type' => "#{kind}/#{type}" + CT_CHARSET_PREFIX + charset}
9
+ "#{kind}/#{type}" + CT_CHARSET_PREFIX + charset
10
10
  end
11
11
 
12
12
  # @param params [Hash] containing :type => "kind/type", example: "text/html"
@@ -21,7 +21,7 @@ module Nephos
21
21
  PRESET_CT = {
22
22
  plain: "text/plain",
23
23
  html: "text/html",
24
- json: "text/javascript",
24
+ json: "application/json",
25
25
  }
26
26
 
27
27
  private
@@ -67,11 +67,12 @@ module Nephos
67
67
  return [204, ct_specific({type: PRESET_CT[:plain]}), [""]] if params == :empty
68
68
  return render(status: params) if params.is_a? Integer
69
69
  params = set_default_params(params)
70
- return [
71
- params[:status],
72
- params[:type],
73
- [params[:content]],
74
- ]
70
+ resp = Rack::Response.new
71
+ resp.status = params[:status]
72
+ resp["Content-Type"] = params[:type]
73
+ resp.body = [params[:content]]
74
+ #resp.set_cookies ...
75
+ return resp
75
76
  end
76
77
 
77
78
  end
data/test/responder.rb CHANGED
@@ -70,7 +70,7 @@ class TestNephosServerResponder < Test::Unit::TestCase
70
70
  Nephos::Responder.set_default_params_type(p4)
71
71
  Nephos::Responder.set_default_params_type(p5)
72
72
  plain = Nephos::Responder.ct_specific({type: "text/plain"})
73
- json = Nephos::Responder.ct_specific({type: "text/javascript"})
73
+ json = Nephos::Responder.ct_specific({type: "application/json"})
74
74
  html = Nephos::Responder.ct_specific({type: "text/html"})
75
75
  assert_equal plain, p1[:type]
76
76
  assert_equal html, p2[:type]
data/version CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.5.2
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.0
4
+ version: 0.5.2
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-13 00:00:00.000000000 Z
11
+ date: 2015-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nomorebeer
@@ -164,5 +164,6 @@ rubyforge_project:
164
164
  rubygems_version: 2.4.8
165
165
  signing_key:
166
166
  specification_version: 4
167
- summary: "* improve executables: version taking in count"
167
+ summary: "* fix regression on content-type from v0.4"
168
168
  test_files: []
169
+ has_rdoc: