Nephos/NephosRubyServer

View on GitHub
DOCUMENTATION/GUIDE_CONTROLLER.md

Summary

Maintainability
Test Coverage
# Controller Guide

## Intern architecture

### Cookies
You can set cookies and get them via ``cookies`` in the body of any controller.

Example:
```ruby
    cookies["a"] = "b" # add a cookie named "a"
    cookies.delete("b") # remove a cookie named "b"
    cookies.set_path("a", "/a")
```

* TODO: Change expiration date, domain, ...
* Note: By default, every cookie's path is "/"


### Params
You can access to the parameters (defined by http or via the URI, based on your
routing rules).
They are accessible via ``params`` in the body of every controller.

Example:
```ruby
    params[:id] # access to the :id value, for exemple in the url /show/:id
```

### Requested format
You can request a format by adding a ``.ext`` to the url you request.
This format is accessible via the ``format`` method. (alias for ``extension``)

It is also provided few helpers ``html?`` ``json?`` ``plain?``


### Environment
From your controllers, you can access to the HTTP request via ``req.env``.
You can also generate valid url via ``url_for("/resource")``.

### Hooks
A hook is a method, triggered automatically after an action.

Actually, NephosServer allows you to create 2 kinds of triggers for your hooks:

- after_action
- before_action

Your hooks will be called just before/after calling the method requested.
It means that the cookies are not saved yet (so you can change them, etc.) for example.

The hooks are defined by calling the methods ``after_action`` or
``before_action``, out of a method, usually on the top of the controller.

Triggers take 1 or 2 arguments.
- The first is the name of the Hook to use. **This is a required argument**.
- The second **is optional**. It should be a hash, containing ``:only`` or ``:except``
  keys, associated to an Array of Symbols, or one Symbol. Each symbol represents
  a method triggering the hook.

**Note: If there is no 2sd argument, then the hook is triggered every times.**

**Note: except is not already implemented**

Example:
```ruby
class MainController < Nephos::Controller

  before_action :fct_before_all
  before_action :fct_before_root, only: [:root]
  after_action :fct_after_root, only: :root

  def fct_before_all
    # puts "BEFORE ALL"
  end

  def fct_before_root
    # puts "BEFORE"
  end

  def fct_after_root
    # puts "AFTER"
  end

  def root
    # puts "ROOT"
    cookies["a"] = "b"
    cookies.delete("b").to_h
    # puts "Cookies from the root:", cookies
    {
      json: {
        list: $dataset,
        add: '/add',
        rm: '/rm',
      }
    }
  end

end
```

### Log
You can log errors, particular data, etc, simply by using the helper ```log(...)```

You can set the fd the of file via
```ruby
Nephos::Logger.fd = File.open("/tmp/app_#{Time.now}.log", "a")
```