Class: Hanami::ApplicationConfiguration

Inherits:
Object
  • Object
show all
Defined in:
lib/hanami/application_configuration.rb

Overview

Configuration for a Hanami application

Since:

  • 0.1.0

Constant Summary collapse

SSL_SCHEME =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

See Also:

  • Configuration#ssl?

Since:

  • 0.2.0

'https'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(namespace, configurations, path_prefix) ⇒ Hanami::Configuration

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Initialize a new configuration instance

Since:

  • 0.1.0


40
41
42
43
44
45
46
47
# File 'lib/hanami/application_configuration.rb', line 40

def initialize(namespace, configurations, path_prefix)
  @namespace      = namespace
  @configurations = configurations
  @path_prefix    = path_prefix
  @env            = Environment.new

  evaluate_configurations!
end

Instance Attribute Details

#namespaceObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.1.0


26
27
28
# File 'lib/hanami/application_configuration.rb', line 26

def namespace
  @namespace
end

#path_prefixObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.4.0


30
31
32
# File 'lib/hanami/application_configuration.rb', line 30

def path_prefix
  @path_prefix
end

Instance Method Details

#adapter(options) ⇒ Object #adapterHash

Adapter configuration. The application will instantiate adapter instance based on this configuration.

The given options must have key pairs :type and :uri If it isn't, at the runtime the framework will raise a `ArgumentError`.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      adapter :sql, 'sqlite3://uri'
    end
  end
end

Bookshelf::Application.configuration.adapter
  # => [:sql, 'sqlite3://uri']

Overloads:

  • #adapter(options) ⇒ Object

    Sets the given type and uri

  • #adapterHash

    Gets the value

See Also:

Since:

  • 0.2.0


724
725
726
727
728
729
730
# File 'lib/hanami/application_configuration.rb', line 724

def adapter(*options)
  if !options.empty?
    @adapter = options
  else
    @adapter
  end
end

#app_nameObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 0.9.0


1527
1528
1529
# File 'lib/hanami/application_configuration.rb', line 1527

def app_name
  ApplicationName.new(namespace)
end

#assetsHanami::Config::Assets

The application will serve the static assets under these directories.

By default it's equal to the `public/` directory under the application `root`.

Otherwise, you can add different relatives paths under `root`.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.assets
  # => #<Pathname:/root/path/public>

Adding new assets paths

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      assets do
        sources << [
          'vendor/assets'
        ]
      end
    end
  end
end

Bookshelf::Application.configuration.assets
  # => #<Hanami::Config::Assets @root=#<Pathname:/root/path/assets>, @paths=["public"]>

Gets the value

Since:

  • 0.1.0


332
333
334
335
336
337
338
# File 'lib/hanami/application_configuration.rb', line 332

def assets(&blk)
  if @assets
    @assets.__add(&blk)
  else
    @assets ||= Config::FrameworkConfiguration.new(&blk)
  end
end

#body_parsers(parsers) ⇒ Object #body_parsersArray

Body parsing configuration.

Specify a set of parsers for specific mime types that your application will use. This method will return the application's parsers which you can use to add existing and new custom parsers for your application to use.

By default it's an empty `Array`

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.body_parsers
  # => []

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      body_parsers :json, XmlParser.new
    end
  end
end

Bookshelf::Application.configuration.body_parsers
  # => [:json, XmlParser.new]

Setting a new value after one is set.

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      body_parsers :json
      body_parsers XmlParser.new
    end
  end
end

Bookshelf::Application.configuration.body_parsers
  # => [XmlParser.new]

Overloads:

  • #body_parsers(parsers) ⇒ Object

    Specify a set of body parsers.

  • #body_parsersArray

    Gets the value

Since:

  • 0.2.0


650
651
652
653
654
655
656
# File 'lib/hanami/application_configuration.rb', line 650

def body_parsers(*parsers)
  if parsers.empty?
    @body_parsers ||= []
  else
    @body_parsers = parsers
  end
end

#controllerHanami::Config::FrameworkConfiguration

It lazily collects all the low level settings for Hanami::Controller's configuration and applies them when the application is loaded.

NOTE: This forwards all the configurations to Hanami::Controller, without checking them. Before to use this feature, please have a look at the current Hanami::Controller version installed.

NOTE: This may override some configurations of your application.

Examples:

Define a setting

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      controller.default_request_format :json
    end
  end
end

Override a setting

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      handle_exceptions            false
      controller.handle_exceptions true
    end
  end
end

# Exceptions will be handled

See Also:

Since:

  • 0.2.0


1444
1445
1446
# File 'lib/hanami/application_configuration.rb', line 1444

def controller
  @controller ||= Config::FrameworkConfiguration.new
end

#controller_pattern(value) ⇒ Object #controller_patternString

Defines a relative pattern to find controllers.

Hanami supports multiple architectures (aka application structures), this setting helps to understand the namespace where to find applications' controllers and actions.

By default this equals to "Controllers::%{controller}::%{action}" That means controllers must be structured like this: Bookshelf::Controllers::Dashboard::Index, where Bookshelf is the application module, Controllers is the first value specified in the pattern, Dashboard the controller and Index the action.

This pattern MUST always contain "%{controller}" and %{action}. This pattern SHOULD be used accordingly to #view_pattern value.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      routes do
        get '/', to: 'dashboard#index'
      end
    end
  end

  module Controllers::Dashboard
    class Index
      include Bookshelf::Action

      def call(params)
        # ...
      end
    end
  end
end

Bookshelf::Application.configuration.controller_pattern
  # => "Controllers::%{controller}::%{action}"

# All the controllers MUST live under Bookshelf::Controllers

# GET '/' # => Bookshelf::Controllers::Dashboard::Index

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      controller_pattern "%{controller}Controller::%{action}"

      routes do
        get '/', to: 'dashboard#index'
      end
    end
  end

  module DashboardController
    class Index
      include Bookshelf::Action

      def call(params)
      end
    end
  end
end

Bookshelf::Application.configuration.controller_pattern
  # => "%{controller}Controller::%{action}"

# All the controllers are directly under the Bookshelf module

# GET '/' # => Bookshelf::DashboardController::Index

Setting the value for a top level name structure

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      controller_pattern "%{controller}Controller::%{action}"

      routes do
        get '/', to: 'dashboard#index'
      end
    end
  end
end

module DashboardController
  class Index
    include Bookshelf::Action

    def call(params)
    end
  end
end

Bookshelf::Application.configuration.controller_pattern
  # => "%{controller}Controller::%{action}"

# All the controllers are at the top level namespace

# GET '/' # => DashboardController::Index

Overloads:

  • #controller_pattern(value) ⇒ Object

    Sets the given value

  • #controller_patternString

    Gets the value

See Also:

  • Configuration#view_pattern

Since:

  • 0.1.0


1142
1143
1144
1145
1146
1147
1148
# File 'lib/hanami/application_configuration.rb', line 1142

def controller_pattern(value = nil)
  if value
    @controller_pattern = value
  else
    @controller_pattern ||= 'Controllers::%{controller}::%{action}'
  end
end

#cookies(options) ⇒ Object #cookiesHanami::Config::Cookies

Configure cookies Enable cookies (disabled by default).

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.cookies
  # => #<Hanami::Config::Cookies:0x0000000329f880 @options={}, @default_options={:httponly=>true, :secure=>false}>

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      cookies domain: 'hanamirb.org'
    end
  end
end

Bookshelf::Application.configuration.cookies
  # => #<Hanami::Config::Cookies:0x0000000329f880 @options={:domain=>'hanamirb.org'}, @default_options={:domain=>'hanamirb.org', :httponly=>true, :secure=>false}>

Overloads:

  • #cookies(options) ⇒ Object

    Sets the given value with their options.

  • #cookiesHanami::Config::Cookies

    Gets the value.

Since:

  • 0.1.0


379
380
381
382
383
384
385
# File 'lib/hanami/application_configuration.rb', line 379

def cookies(options = nil)
  if options.nil?
    @cookies ||= Config::Cookies.new(self, options)
  else
    @cookies = Config::Cookies.new(self, options)
  end
end

#default_format(format = nil) ⇒ Object

Deprecated.

Set a format as default fallback for all the requests without a strict requirement for the mime type.

Since:

  • 0.1.0


849
850
851
852
# File 'lib/hanami/application_configuration.rb', line 849

def default_format(format = nil)
  Hanami::Utils::Deprecation.new('default_format is deprecated, please use default_request_format')
  default_request_format(format)
end

#default_request_format(format) ⇒ Object #default_request_formatSymbol

Set a format as default fallback for all the requests without a strict requirement for the mime type.

The given format must be coercible to a symbol, and be a valid mime type alias. If it isn't, at the runtime the framework will raise a `Hanami::Controller::UnknownFormatError`.

By default this value is `:html`.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.default_request_format # => :html

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      default_request_format :json
    end
  end
end

Bookshelf::Application.configuration.default_request_format # => :json

Overloads:

  • #default_request_format(format) ⇒ Object

    Sets the given value

    Raises:

    • (TypeError)

      if it cannot be coerced to a symbol

  • #default_request_formatSymbol

    Gets the value

See Also:

Since:

  • 0.5.0


780
781
782
783
784
785
786
# File 'lib/hanami/application_configuration.rb', line 780

def default_request_format(format = nil)
  if format
    @default_request_format = Utils::Kernel.Symbol(format)
  else
    @default_request_format || :html
  end
end

#default_response_format(format) ⇒ Object #default_response_formatSymbol?

Set a format to be used for all responses regardless of the request type.

The given format must be coercible to a symbol, and be a valid mime type alias. If it isn't, at the runtime the framework will raise a `Hanami::Controller::UnknownFormatError`.

By default this value is `:html`.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.default_response_format # => :html

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      default_response_format :json
    end
  end
end

Bookshelf::Application.configuration.default_response_format # => :json

Overloads:

  • #default_response_format(format) ⇒ Object

    Sets the given value

    Raises:

    • (TypeError)

      if it cannot be coerced to a symbol

  • #default_response_formatSymbol?

    Gets the value

See Also:

Since:

  • 0.5.0


835
836
837
838
839
840
841
# File 'lib/hanami/application_configuration.rb', line 835

def default_response_format(format = nil)
  if format
    @default_response_format = Utils::Kernel.Symbol(format)
  else
    @default_response_format
  end
end

#force_ssl(value = nil) ⇒ Boolean

Force ssl redirection if http scheme is set

See Also:

  • Routing::ForceSsl

Since:

  • 0.4.0


94
95
96
97
98
99
100
# File 'lib/hanami/application_configuration.rb', line 94

def force_ssl(value = nil)
  if value
    @force_ssl = value
  else
    @force_ssl || false
  end
end

#handle_exceptions(value) ⇒ Object #handle_exceptionsTrueClass, FalseClass

Decide if handle exceptions with an HTTP status or let them uncaught

If this value is set to `true`, the configured exceptions will return the specified HTTP status, the rest of them with `500`.

If this value is set to `false`, the exceptions won't be caught.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Enabled (default)

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      routes do
        get '/error', to: 'error#index'
      end
    end

    load!
  end

  module Controllers::Error
    class Index
      include Bookshelf::Action

      def call(params)
        raise ArgumentError
      end
    end
  end
end

# GET '/error' # => 500 - Internal Server Error

Disabled

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      handle_exceptions false

      routes do
        get '/error', to: 'error#index'
      end
    end

    load!
  end

  module Controllers::Error
    class Index
      include Bookshelf::Action

      def call(params)
        raise ArgumentError
      end
    end
  end
end

# GET '/error' # => raises ArgumentError

Overloads:

  • #handle_exceptions(value) ⇒ Object

    Sets the given value

  • #handle_exceptionsTrueClass, FalseClass

    Gets the value

See Also:

Since:

  • 0.2.0


1352
1353
1354
1355
1356
1357
1358
# File 'lib/hanami/application_configuration.rb', line 1352

def handle_exceptions(value = nil)
  if value.nil?
    @handle_exceptions
  else
    @handle_exceptions = value
  end
end

#host(value) ⇒ Object #schemeString

The URI host for this application. This is used by the router helpers to generate absolute URLs.

By default this value is `“localhost”`.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.host # => "localhost"

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      host 'bookshelf.org'
    end
  end
end

Bookshelf::Application.configuration.host # => "bookshelf.org"

Overloads:

  • #host(value) ⇒ Object

    Sets the given value

  • #schemeString

    Gets the value

See Also:

Since:

  • 0.1.0


959
960
961
962
963
964
965
# File 'lib/hanami/application_configuration.rb', line 959

def host(value = nil)
  if value
    @host = value
  else
    @host ||= @env.host
  end
end

#layout(value) ⇒ Object #layoutSymbol?

A Hanami::Layout for this application

By default it's `nil`.

It accepts a Symbol as layout name. When the application is loaded, it will lookup for the corresponding class.

All the views will use this layout, unless otherwise specified.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.layout # => nil

# All the views will render without a layout

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      layout :application
    end
  end

  module Views
    module Dashboard
      class Index
        include Bookshelf::Views
      end

      class JsonIndex < Index
        layout nil
      end
    end
  end
end

Bookshelf::Application.configuration.namespace layout => :application

# All the views will use Bookshelf::Views::ApplicationLayout, unless
# they set a different value.

Bookshelf::Views::Dashboard::Index.layout
  # => Bookshelf::Views::ApplicationLayout

Bookshelf::Views::Dashboard::JsonIndex.layout
  # => Hanami::View::Rendering::NullLayout

Overloads:

  • #layout(value) ⇒ Object

    Sets the given value

  • #layoutSymbol?

    Gets the value

See Also:

Since:

  • 0.1.0


227
228
229
230
231
232
233
# File 'lib/hanami/application_configuration.rb', line 227

def layout(value = nil)
  if value
    @layout = value
  else
    @layout
  end
end

#load_pathsHanami::Config::LoadPaths

Application load paths The application will recursively load all the Ruby files under these paths.

By default it's empty in order to allow developers to decide their own app structure.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.load_paths
  # => #<Hanami::Config::LoadPaths:0x007ff4fa212310 @paths=[]>

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      load_paths << [
        'app/controllers',
        'app/views
      ]
    end
  end
end

Bookshelf::Application.configuration.assets
  # => #<Hanami::Config::LoadPaths:0x007fe3a20b18e0 @paths=[["app/controllers", "app/views"]]>

See Also:

  • Configuration#root

Since:

  • 0.1.0


508
509
510
# File 'lib/hanami/application_configuration.rb', line 508

def load_paths
  @load_paths ||= Config::LoadPaths.new(root)
end

#loggerConfig::Logger

Defines a Config::Logger instance to the logger configuration.

This instance will be used to generate the hanami logger available on application module.

Examples:

Define a logger

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      logger.stream 'path/to/log/file'
    end
    load!
  end

  module Controllers::Error
    class Index
      include Bookshelf::Action

      def call(params)
        Bookshelf::Logger.info "Logging to STDOUT"
      end
    end
  end
end

Since:

  • 0.5.0


1521
1522
1523
# File 'lib/hanami/application_configuration.rb', line 1521

def logger
  @logger ||= Config::Logger.new
end

#middlewareObject

Application middleware.

Specify middleware that your application will use. This method will return the application's underlying Middleware stack which you can use to add new middleware for your application to use. By default, the middleware stack will contain only `Rack::Static` and `Rack::MethodOverride`. However, if `assets false` was specified # in the configuration block, the default `Rack::Static` will be removed.

Examples:

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      middleware.use Rack::MethodOverride, nil, 'max-age=0, private, must-revalidate'
      middleware.use Rack::ETag
    end
  end
end

See Also:

Since:

  • 0.2.0


683
684
685
# File 'lib/hanami/application_configuration.rb', line 683

def middleware
  @middleware ||= Hanami::Middleware.new(self)
end

#modelHanami::Config::FrameworkConfiguration

It lazily collects all the low level settings for Hanami::Model's configuration and applies them when the application is loaded.

NOTE: This forwards all the configurations to Hanami::Model, without checking them. Before to use this feature, please have a look at the current Hanami::Model version installed.

NOTE: This may override some configurations of your application.

Examples:

Define a setting

require 'hanami'
require 'hanami/model'

module Bookshelf
  class Application < Hanami::Application
    configure do
      model.adapter :sql, 'sqlite://db/bookshelf_development'
    end
  end
end

Override a setting

require 'hanami'
require 'hanami/model'

module Bookshelf
  class Application < Hanami::Application
    configure do
      adapter       :sql, 'postgres://localhost/database'
      model.adapter :sql, 'sqlite://db/bookshelf_development'
    end
  end
end

# The sqlite adapter will override the SQL one

See Also:

Since:

  • 0.2.0


1401
1402
1403
# File 'lib/hanami/application_configuration.rb', line 1401

def model
  @model ||= Config::FrameworkConfiguration.new
end

#port(value) ⇒ Object #schemeString

The URI port for this application. This is used by the router helpers to generate absolute URLs.

By default this value is `2300`.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.port # => 2300

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      port 8080
    end
  end
end

Bookshelf::Application.configuration.port # => 8080

Overloads:

  • #port(value) ⇒ Object

    Sets the given value

    Raises:

    • (TypeError)

      if the given value cannot be coerced to Integer

  • #schemeString

    Gets the value

See Also:

Since:

  • 0.1.0


1011
1012
1013
1014
1015
1016
1017
# File 'lib/hanami/application_configuration.rb', line 1011

def port(value = nil)
  if value
    @port = Integer(value)
  else
    @port || @env.port
  end
end

#root(value) ⇒ Object #rootPathname

The root of the application

By default it returns the current directory, for this reason, **all the commands must be executed from the top level directory of the project**.

If for some reason, that constraint above cannot be satisfied, please configure the root directory, so that commands can be executed from everywhere.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.root # => #<Pathname:/path/to/root>

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      root '/path/to/another/root'
    end
  end
end

Overloads:

  • #root(value) ⇒ Object

    Sets the given value

  • #rootPathname

    Gets the value

    Raises:

    • (Errno::ENOENT)

      if the path cannot be found

See Also:

Since:

  • 0.1.0


148
149
150
151
152
153
154
# File 'lib/hanami/application_configuration.rb', line 148

def root(value = nil)
  if value
    @root = value
  else
    Utils::Kernel.Pathname(@root || Dir.pwd).realpath
  end
end

#routes(blk) ⇒ Object #routes(path) ⇒ Object #routesHanami::Config::Routes

Application routes.

Specify a set of routes for the application, by passing a block, or a relative path where to find the file that describes them.

By default it's `nil`.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.routes
  # => nil

Setting the value, by passing a block

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      routes do
        get '/', to: 'dashboard#index'
        resources :books
      end
    end
  end
end

Bookshelf::Application.configuration.routes
  # => #<Hanami::Config::Routes:0x007ff50a991388 @blk=#<Proc:[email protected](irb):4>, @path=#<Pathname:.>>

Setting the value, by passing a relative path

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      routes 'config/routes'
    end
  end
end

Bookshelf::Application.configuration.routes
  # => #<Hanami::Config::Routes:0x007ff50a991388 @blk=nil, @path=#<Pathname:config/routes.rb>>

Overloads:

  • #routes(blk) ⇒ Object

    Specify a set of routes in the given block

  • #routes(path) ⇒ Object

    Specify a relative path where to find the routes file

  • #routesHanami::Config::Routes

    Gets the value

See Also:

Since:

  • 0.1.0


580
581
582
583
584
585
586
# File 'lib/hanami/application_configuration.rb', line 580

def routes(path = nil, &blk)
  if path or block_given?
    @routes = Config::Routes.new(root, path, &blk)
  else
    @routes
  end
end

#scheme(value) ⇒ Object #schemeString

The URI scheme for this application. This is used by the router helpers to generate absolute URLs.

By default this value is `“http”`.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.scheme # => "http"

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      scheme 'https'
    end
  end
end

Bookshelf::Application.configuration.scheme # => "https"

Overloads:

  • #scheme(value) ⇒ Object

    Sets the given value

  • #schemeString

    Gets the value

See Also:

Since:

  • 0.1.0


897
898
899
900
901
902
903
# File 'lib/hanami/application_configuration.rb', line 897

def scheme(value = nil)
  if value
    @scheme = value
  else
    @scheme ||= 'http'
  end
end

#securityHanami::Config::Security

Returns the security policy

Examples:

Getting values

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      security.x_frame_options         "ALLOW ALL"
      security.content_security_policy "script-src 'self' https://apis.example.com"
    end
  end
end

Bookshelf::Application.configuration.security.x_frame_options         # => "ALLOW ALL"
Bookshelf::Application.configuration.security.content_security_policy # => "script-src 'self' https://apis.example.com"

Setting values

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      security.x_frame_options         "ALLOW ALL"
      security.content_security_policy "script-src 'self' https://apis.example.com"
    end
  end
end

See Also:

Since:

  • 0.3.0


83
84
85
# File 'lib/hanami/application_configuration.rb', line 83

def security
  @security ||= Config::Security.new
end

#sessions(adapter, options) ⇒ Object #sessions(false) ⇒ Object #sessionsHanami::Config::Sessions

Configure sessions Enable sessions (disabled by default).

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Given Class as adapter it will be used as sessions middleware. Given String as adapter it will be resolved as class name and used as sessions middleware. Given Symbol as adapter it is assumed it's name of the class under Rack::Session namespace that will be used as sessions middleware (e.g. :cookie for Rack::Session::Cookie).

By default options include domain inferred from host configuration, and secure flag inferred from scheme configuration.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.sessions
  # => #<Hanami::Config::Sessions:0x00000001ca0c28 @enabled=false>

Setting the value with symbol

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      sessions :cookie, secret: 'abc123'
    end
  end
end

Bookshelf::Application.configuration.sessions
  # => #<Hanami::Config::Sessions:0x00000001589458 @enabled=true, @adapter=:cookie, @options={:domain=>"localhost", :secure=>false}>

Disabling previously enabled sessions

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      sessions :cookie
      sessions false
    end
  end
end

Bookshelf::Application.configuration.sessions
  # => #<Hanami::Config::Sessions:0x00000002460d78 @enabled=false>

Overloads:

  • #sessions(adapter, options) ⇒ Object

    Sets the given value.

  • #sessions(false) ⇒ Object

    Disables sessions

  • #sessionsHanami::Config::Sessions

    Gets the value.

See Also:

  • Configuration#host
  • Configuration#scheme

Since:

  • 0.2.0


461
462
463
464
465
466
467
# File 'lib/hanami/application_configuration.rb', line 461

def sessions(adapter = nil, options = {})
  if adapter.nil?
    @sessions ||= Config::Sessions.new
  else
    @sessions = Config::Sessions.new(adapter, options, self)
  end
end

#ssl?FalseClass, TrueClass

Check if the application uses SSL

See Also:

  • Configuration#scheme

Since:

  • 0.2.0


912
913
914
# File 'lib/hanami/application_configuration.rb', line 912

def ssl?
  scheme == SSL_SCHEME
end

#templates(value) ⇒ Object #templatesPathname

Templates root. The application will recursively look for templates under this path.

By default it's equal to the application `root`.

Otherwise, you can specify a different relative path under `root`.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Bookshelf::Application.configuration.templates
  # => #<Pathname:/root/path>

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      templates 'app/templates'
    end
  end
end

Bookshelf::Application.configuration.templates
  # => #<Pathname:/root/path/app/templates>

Overloads:

  • #templates(value) ⇒ Object

    Sets the given value

  • #templatesPathname

    Gets the value

See Also:

Since:

  • 0.1.0


283
284
285
286
287
288
289
# File 'lib/hanami/application_configuration.rb', line 283

def templates(value = nil)
  if value
    @templates = value
  else
    root.join @templates.to_s
  end
end

#viewHanami::Config::FrameworkConfiguration

It lazily collects all the low level settings for Hanami::View's configuration and applies them when the application is loaded.

NOTE: This forwards all the configurations to Hanami::View, without checking them. Before to use this feature, please have a look at the current Hanami::View version installed.

NOTE: This may override some configurations of your application.

Examples:

Define a setting

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      view.layout :application
    end
  end
end

Override a setting

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      layout      :application
      view.layout :backend
    end
  end
end

# It will use `:backend` layout

See Also:

Since:

  • 0.2.0


1487
1488
1489
# File 'lib/hanami/application_configuration.rb', line 1487

def view
  @view ||= Config::FrameworkConfiguration.new
end

#view_pattern(value) ⇒ Object #controller_patternString

Defines a relative pattern to find views:.

Hanami supports multiple architectures (aka application structures), this setting helps to understand the namespace where to find applications' views:.

By default this equals to "Views::%{controller}::%{action}" That means views must be structured like this: Bookshelf::Views::Dashboard::Index, where Bookshelf is the application module, Views is the first value specified in the pattern, Dashboard a module corresponding to the controller name and Index the view, corresponding to the action name.

This pattern MUST always contain "%{controller}" and %{action}. This pattern SHOULD be used accordingly to #controller_pattern value.

This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.

Examples:

Getting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      routes do
        get '/', to: 'dashboard#index'
      end
    end
  end

  module Views
    module Dashboard
      class Index
        include Bookshelf::View
      end
    end
  end
end

Bookshelf::Application.configuration.view_pattern
  # => "Views::%{controller}::%{action}"

# All the views MUST live under Bookshelf::Views

# GET '/' # => Bookshelf::Views::Dashboard::Index

Setting the value

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      view_pattern "%{controller}::%{action}"

      routes do
        get '/', to: 'dashboard#index'
      end
    end
  end

  module Dashboard
    class Index
      include Bookshelf::View
    end
  end
end

Bookshelf::Application.configuration.view_pattern
  # => "%{controller}::%{action}"

# All the views are directly under the Bookshelf module

# GET '/' # => Bookshelf::Dashboard::Index

Setting the value for a top level name structure

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
    configure do
      view_pattern "%{controller}::%{action}"

      routes do
        get '/', to: 'dashboard#index'
      end
    end
  end
end

module Dashboard
  class Index
    include Bookshelf::View
  end
end

Bookshelf::Application.configuration.view_pattern
  # => "%{controller}::%{action}"

# All the views: are at the top level namespace

# GET '/' # => Dashboard::Index

Overloads:

  • #view_pattern(value) ⇒ Object

    Sets the given value

  • #controller_patternString

    Gets the value

See Also:

  • Configuration#controller_pattern

Since:

  • 0.1.0


1265
1266
1267
1268
1269
1270
1271
# File 'lib/hanami/application_configuration.rb', line 1265

def view_pattern(value = nil)
  if value
    @view_pattern = value
  else
    @view_pattern ||= 'Views::%{controller}::%{action}'
  end
end