class Nephos::Controller
This class must be inherited by the other Controllers. It contains a constructor (you should not rewrite it) It contains some helpers too, like an access to the environment, and the parameters.
Attributes
callpath[R]
extension[R]
format[R]
params[R]
req[R]
Public Class Methods
after_action(method, opt=nil)
click to toggle source
see {#self.before_action}
# File lib/nephos-server/controller.rb, line 80 def self.after_action(method, opt=nil) parse_action_opts(opt) do |call| @@after_action[call] ||= [] @@after_action[call] << method.to_sym end end
before_action(method, opt=nil)
click to toggle source
@param method [Symbol] @param opt [Nil, Hash, String, Symbol] define which method will call “method”
- if nil, then all call will trigger the event - if Hash, it will be parsed with rules :only and :except - if String or Symbol, it will be parsed as :only
# File lib/nephos-server/controller.rb, line 72 def self.before_action(method, opt=nil) parse_action_opts(opt) do |call| @@before_action[call] ||= [] @@before_action[call] << method.to_sym end end
new(req, callpath, extension=nil)
click to toggle source
@param env [Hash] env extracted from the http request @param parsed [Hash] pre-parsed env with parameters, … @param extension [String] extension “.json”, “.html”, …
# File lib/nephos-server/controller.rb, line 15 def initialize req, callpath, extension=nil raise ArgumentError, "req must be a Rack::Request" unless req.is_a? Rack::Request raise ArgumentError, "call must be a Hash" unless callpath.is_a? Hash @req= req @callpath= callpath @params= req.params rescue {} params = @req.path.split("/") params.shift @params.merge! Hash[callpath[:params].zip(params)] @params.select!{|k,v| not k.to_s.empty?} @params = Params.new(@params) @cookies = Cookies.new(@req.cookies) @extension = extension.to_s.split(".").last end
parse_action_opts(opt) { |:'*' else return [:'*'] end| ... }
click to toggle source
# File lib/nephos-server/controller.rb, line 51 def self.parse_action_opts(opt) if opt.nil? if block_given? then yield :'*' else return [:'*'] end elsif opt.is_a? Hash only = Array(opt[:only]) if block_given? then only.each{|e| yield e} else return only end except = opt[:except] raise "No implemented yet (except)" if except # parse :only and :except elsif opt.is_a? String or opt.is_a? Symbol if block_given? then yield opt else return [opt] end else raise ArgumentError, "Invalid opt" end end # @param method [Symbol] # @param opt [Nil, Hash, String, Symbol] define which method will call "method" # - if nil, then all call will trigger the event # - if Hash, it will be parsed with rules :only and :except # - if String or Symbol, it will be parsed as :only def self.before_action(method, opt=nil) parse_action_opts(opt) do |call| @@before_action[call] ||= [] @@before_action[call] << method.to_sym end end # see {#self.before_action} def self.after_action(method, opt=nil) parse_action_opts(opt) do |call| @@after_action[call] ||= [] @@after_action[call] << method.to_sym end end # It calls every registred hooks added to the @before_action list, # including '*' def execute_before_action(call) call = call.to_sym methods = [] methods += Array(@@before_action[call]) methods += @@before_action[:'*'] methods.each do |method| self.send(method) end end # see {#self.execute_before_action} def execute_after_action(call) call = call.to_sym methods = [] methods += Array(@@after_action[call]) methods += @@after_action[:'*'] methods.each do |method| self.send(method) end end def log *args Logger.write(*args) end end
Public Instance Methods
execute_after_action(call)
click to toggle source
see {#self.execute_before_action}
# File lib/nephos-server/controller.rb, line 100 def execute_after_action(call) call = call.to_sym methods = [] methods += Array(@@after_action[call]) methods += @@after_action[:'*'] methods.each do |method| self.send(method) end end
execute_before_action(call)
click to toggle source
It calls every registred hooks added to the @before_action list, including ‘*’
# File lib/nephos-server/controller.rb, line 89 def execute_before_action(call) call = call.to_sym methods = [] methods += Array(@@before_action[call]) methods += @@before_action[:'*'] methods.each do |method| self.send(method) end end
html?()
click to toggle source
# File lib/nephos-server/controller.rb, line 33 def html? %w(htm html xhtml).include? extension end
json?()
click to toggle source
# File lib/nephos-server/controller.rb, line 36 def json? %w(json).include? extension end
log(*args)
click to toggle source
# File lib/nephos-server/controller.rb, line 110 def log *args Logger.write(*args) end
plain?()
click to toggle source
# File lib/nephos-server/controller.rb, line 39 def plain? %w(txt raw).include? extension end
url_for(path="")
click to toggle source
@return [String] an url formated as “scheme://host:port/path”
# File lib/nephos-server/controller.rb, line 44 def url_for(path="") (URI(req.env["rack.url_scheme"] + "://" + req.env['HTTP_HOST'] + "/") + path).to_s end