class Fenix::Application

Attributes

env[R]
request[R]
response[R]

Public Class Methods

disable(*options) click to toggle source

@param [options] Array<Symbol>

@example

disable :cache

@since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 75
def disable(*options)
  options.each { |option| settings[option] = false }
end
enable(*options) click to toggle source

@param [options] Array<Symbol>

@example

enable :cache

@since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 63
def enable(*options)
  options.each { |option| settings[option] = true }
end
extensions() click to toggle source

@return [Array] @since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 83
def extensions
  @_extensions ||= []
end
new(*arguments, &block) click to toggle source

@private

Calls superclass method
# File lib/fenix/core/application.rb, line 17
def new(*arguments, &block)
  instance = super(*arguments, &block)
  stack.run(instance)
  stack
end
register(*extensions) click to toggle source

@param [extensions] Array

@example

register Fenix::Assets
register Fenix::Cookies

@since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 96
def register(*extensions)
  self.extensions += extensions
  extensions.each do |extension|
    extension.registered(self) if extension.respond_to?(:registered)
    extend extension
  end
end
routes() click to toggle source

@return [Hash] @since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 42
def routes
  @_routes ||= Hash.new { |hash, key| hash[key] = [] }
end
settings() click to toggle source

@return [Fenix::Settings] @see Fenix::Settings @since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 109
def settings
  @_settings ||= Fenix::Settings.new
end
stack() click to toggle source

@return [Rack::Builder] @see github.com/rack/rack/blob/master/lib/rack/builder.rb @since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 51
def stack
  @_stack ||= Rack::Builder.new
end

Private Class Methods

compile_route(path, conditions, &block) click to toggle source

@private

# File lib/fenix/core/application.rb, line 30
        def compile_route(path, conditions, &block)
  {
    conditions: conditions,
    object: Mustermann.new(path),
    block: block
  }
end

Public Instance Methods

call(env) click to toggle source

@private

# File lib/fenix/core/application.rb, line 178
def call(env)
  @env = env
  @request = Fenix::Request.new(env)
  @response = Fenix::Response.new

  dispatch
  @response.finish
end
cookies() click to toggle source

@return [Hash] @since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 147
def cookies
  request.cookies
end
halt(status = 500) click to toggle source

@since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 172
def halt(status = 500)
  response.status = status
  throw :halt
end
locale() click to toggle source

@return [Symbol] @since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 133
def locale
  I18n.locale
end
logger() click to toggle source

@since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 153
def logger
  request.logger
end
params() click to toggle source

@return [Hash] @since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 140
def params
  request.params
end
redirect(uri, **notifications) click to toggle source

@since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 159
def redirect(uri, **notifications)
  if env['HTTP_VERSION'] == 'HTTP/1.1' and env['REQUEST_METHOD'] != 'GET'
    status = 303
  else
    status = 302
  end
  
  response['Location'] = uri
  halt(status)
end
session() click to toggle source

@return [Hash] @since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 126
def session
  env['rack.session']
end
settings() click to toggle source

@return [Fenix::Settings] @see Fenix::Settings @since 1.0.0 @api public

# File lib/fenix/core/application.rb, line 119
def settings
  self.class.settings
end

Private Instance Methods

dispatch() click to toggle source

@private

# File lib/fenix/core/application.rb, line 188
        def dispatch
  catch :halt do
    if route = find_route
      response.write(instance_eval(&route[:block]))
    else
      raise Fenix::NotFound
    end
  end
end
find_route() click to toggle source

@private

# File lib/fenix/core/application.rb, line 199
        def find_route
  self.class.routes[request.request_method].detect do |route|
    if match = route[:object].match(request.path_info)
      match.names.each_with_index do |index, name|
        request[name] = match.captures[index]
      end
    end
  end
end