Class: Hanami::Application

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

Overview

A full stack Hanami application

Examples:

require 'hanami'

module Bookshelf
  class Application < Hanami::Application
  end
end

Since:

  • 0.1.0

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Hanami::Application

Initialize and load a new instance of the application

Since:

  • 0.1.0



73
74
75
76
# File 'lib/hanami/application.rb', line 73

def initialize(options = {})
  self.class.configuration.path_prefix options[:path_prefix]
  self.class.load!(self)
end

Instance Attribute Details

#rendererObject

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.

Rendering policy

 @param [Hanami::RenderingPolicy]

Since:

  • 0.2.0



66
67
68
# File 'lib/hanami/application.rb', line 66

def renderer
  @renderer
end

#routesHanami::Router

Return the routes for this application

Returns:

  • (Hanami::Router)

    a route set

See Also:

Since:

  • 0.1.0



50
51
52
# File 'lib/hanami/application.rb', line 50

def routes
  @routes
end

Class Method Details

.applicationsSet

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.

Registry of Hanami applications in the current Ruby process

Returns:

  • (Set)

    a set of all the registered applications

Since:

  • 0.2.0



132
133
134
135
136
# File 'lib/hanami/application.rb', line 132

def applications
  synchronize do
    @@applications ||= Set.new
  end
end

.configure(environment = nil, &blk) ⇒ Object

Configure the application. It yields the given block in the context of the configuration

Examples:

require 'hanami'

module Bookshelf
  Application < Hanami::Application
    configure do
      # ...
    end
  end
end

Parameters:

  • environment (Symbol, nil) (defaults to: nil)

    the configuration environment name

  • blk (Proc)

    the configuration block

See Also:

Since:

  • 0.1.0



158
159
160
# File 'lib/hanami/application.rb', line 158

def configure(environment = nil, &blk)
  configuration.configure(environment, &blk)
end

.inherited(base) ⇒ Object

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.

Override Ruby’s Class#inherited



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/hanami/application.rb', line 28

def self.inherited(base)
  super

  base.class_eval do
    include Hanami::Utils::ClassAttribute

    class_attribute :configuration
    self.configuration = Configuration.new
  end

  synchronize do
    applications.add(base)
  end
end

.load!(application = self) ⇒ Object

Eager load the application configuration, by activating the framework duplication mechanisms.

Examples:

require 'hanami'

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

    load!
  end

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

      def call(params)
        self.body = 'Hello!'
      end
    end
  end
end

Parameters:

Returns:

  • void

Since:

  • 0.1.1



194
195
196
# File 'lib/hanami/application.rb', line 194

def load!(application = self)
  Hanami::Loader.new(application).load!
end

.preload!Object

Preload all the registered applications, by yielding their configurations and preparing the frameworks.

This is useful for testing suites, where we want to make Hanami frameworks ready, but not preload applications code.

This allows to test components such as views or actions in isolation and to have faster boot times.

 @return [void]

Since:

  • 0.2.0



210
211
212
213
214
215
216
# File 'lib/hanami/application.rb', line 210

def preload!
  synchronize do
    applications.each(&:load!)
  end

  nil
end

.preload_applications!Object

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.

Full preload for all the registered applications.

This is useful in console where we want all the application code available.

 @return [void]

Since:

  • 0.2.1



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

def preload_applications!
  synchronize do
    applications.each { |app| app.new }
  end

  nil
end

Instance Method Details

#call(env) ⇒ Array

Process a request. This method makes Hanami applications compatible with the Rack protocol.

Parameters:

  • env (Hash)

    a Rack env

Returns:

  • (Array)

    a serialized Rack response

See Also:

Since:

  • 0.1.0



108
109
110
# File 'lib/hanami/application.rb', line 108

def call(env)
  renderer.render(env, middleware.call(env))
end

#configurationObject

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.

Return the configuration for this application

See Also:

  • configuration

Since:

  • 0.1.0



84
85
86
# File 'lib/hanami/application.rb', line 84

def configuration
  self.class.configuration
end

#middlewareHanami::Middleware

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.

Rack middleware stack

Returns:

See Also:

Since:

  • 0.1.0



120
121
122
# File 'lib/hanami/application.rb', line 120

def middleware
  @middleware ||= configuration.middleware
end

#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.

Return the application name

Since:

  • 0.2.0



92
93
94
# File 'lib/hanami/application.rb', line 92

def name
  self.class.name
end