class Rails::Application


The Application is also responsible for building the middleware stack.
== Middlewares
whenever the files change in development.
The application object is also responsible for holding the routes and reloading routes
== Routes
Check Rails::Application::Configuration to see them all.
“logger”, “reload_plugins” and so forth.
“allow_concurrency”, “cache_classes”, “consider_all_requests_local”, “filter_parameters”,
the application object has several specific configurations, for example
Besides providing the same configuration as Rails::Engine and Rails::Railtie,
== Configuration
are executed (check Rails::Application::Finisher).
Rails::Application::Bootstrap) and finishing initializers, after all the others
initializers. Besides, it also executed some bootstrap initializers (check
Rails::Application is responsible for executing all railties, engines and plugin
== Initialization
an Engine but with the responsibility of coordinating the whole boot process.
In Rails 3.0, a Rails::Application object was introduced which is nothing more than

def add_lib_to_load_path! #:nodoc:

:nodoc:
you need to load files in lib/ during the application configuration as well.
Rails application, you will need to add lib to $LOAD_PATH on your own in case
are changing config.root inside your application definition or having a custom
Notice this method takes into consideration the default root path. So if you

end
config.i18n.backend = MyBackend
require "my_backend" # in lib/my_backend
class MyApplication < Rails::Application

configuration.
allowing the developer to load classes in lib and use them during application
This method is called just after an application inherits from Rails::Application,
def add_lib_to_load_path! #:nodoc:
  path = config.root.join('lib').to_s
  $LOAD_PATH.unshift(path) if File.exists?(path)
end

def app

def app
  @app ||= begin
    config.middleware = config.middleware.merge_into(default_middleware_stack)
    config.middleware.build(routes)
  end
end

def call(env)

def call(env)
  app.call(env.reverse_merge!(env_defaults))
end

def configure(&block)

def configure(&block)
  class_eval(&block)
end

def default_middleware_stack

def default_middleware_stack
  ActionDispatch::MiddlewareStack.new.tap do |middleware|
    middleware.use ::ActionDispatch::Static, paths.public.to_a.first if config.serve_static_assets
    middleware.use ::Rack::Lock if !config.allow_concurrency
    middleware.use ::Rack::Runtime
    middleware.use ::Rails::Rack::Logger
    middleware.use ::ActionDispatch::ShowExceptions, config.consider_all_requests_local if config.action_dispatch.show_exceptions
    middleware.use ::ActionDispatch::RemoteIp, config.action_dispatch.ip_spoofing_check, config.action_dispatch.trusted_proxies
    middleware.use ::Rack::Sendfile, config.action_dispatch.x_sendfile_header
    middleware.use ::ActionDispatch::Callbacks, !config.cache_classes
    middleware.use ::ActionDispatch::Cookies
    if config.session_store
      middleware.use config.session_store, config.session_options
      middleware.use ::ActionDispatch::Flash
    end
    middleware.use ::ActionDispatch::ParamsParser
    middleware.use ::Rack::MethodOverride
    middleware.use ::ActionDispatch::Head
    middleware.use ::ActionDispatch::BestStandardsSupport, config.action_dispatch.best_standards_support if config.action_dispatch.best_standards_support
  end
end

def eager_load! #:nodoc:

:nodoc:
def eager_load! #:nodoc:
  railties.all(&:eager_load!)
  super
end

def env_defaults

def env_defaults
  @env_defaults ||= {
    "action_dispatch.parameter_filter" => config.filter_parameters,
    "action_dispatch.secret_token" => config.secret_token
  }
end

def inherited(base)

def inherited(base)
  raise "You cannot have more than one Rails::Application" if Rails.application
  super
  Rails.application = base.instance
  Rails.application.add_lib_to_load_path!
  ActiveSupport.run_load_hooks(:before_configuration, base.instance)
end

def initialize!

def initialize!
  run_initializers(self)
  self
end

def initialize_console(sandbox=false)

def initialize_console(sandbox=false)
  require "rails/console/app"
  require "rails/console/sandbox" if sandbox
  require "rails/console/helpers"
end

def initialize_generators

def initialize_generators
  require "rails/generators"
end

def initialize_tasks

def initialize_tasks
  require "rails/tasks"
  task :environment do
    $rails_rake_task = true
    require_environment!
  end
end

def initializers

def initializers
  initializers = Bootstrap.initializers_for(self)
  railties.all { |r| initializers += r.initializers }
  initializers += super
  initializers += Finisher.initializers_for(self)
  initializers
end

def instance

def instance
  if self == Rails::Application
    if Rails.application
      ActiveSupport::Deprecation.warn "Calling a method in Rails::Application is deprecated, " <<
        "please call it directly in your application constant #{Rails.application.class.name}.", caller
    end
    Rails.application
  else
    @@instance ||= new
  end
end

def load_console(sandbox=false)

def load_console(sandbox=false)
  initialize_console(sandbox)
  railties.all { |r| r.load_console }
  super()
  self
end

def load_generators

def load_generators
  initialize_generators
  railties.all { |r| r.load_generators }
  super
  self
end

def load_tasks

def load_tasks
  initialize_tasks
  railties.all { |r| r.load_tasks }
  super
  self
end

def method_missing(*args, &block)

def method_missing(*args, &block)
  instance.send(*args, &block)
end

def railties

def railties
  @railties ||= Railties.new(config)
end

def reload_routes!

def reload_routes!
  _routes = self.routes
  _routes.disable_clear_and_finalize = true
  _routes.clear!
  routes_reloader.paths.each { |path| load(path) }
  ActiveSupport.on_load(:action_controller) { _routes.finalize! }
ensure
  _routes.disable_clear_and_finalize = false
end

def require_environment! #:nodoc:

:nodoc:
def require_environment! #:nodoc:
  environment = paths.config.environment.to_a.first
  require environment if environment
end

def respond_to?(*args)

def respond_to?(*args)
  super || instance.respond_to?(*args)
end

def routes

def routes
  @routes ||= ActionDispatch::Routing::RouteSet.new
end

def routes_reloader

def routes_reloader
  @routes_reloader ||= ActiveSupport::FileUpdateChecker.new([]){ reload_routes! }
end