class Rails::Application::DefaultRailsFourMiddlewareStack

Attributes

app[R]
config[R]
paths[R]

Public Class Methods

new(app, config, paths) click to toggle source
# File lib/rails-api/application/default_rails_four_middleware_stack.rb, line 6
def initialize(app, config, paths)
  @app = app
  @config = config
  @paths = paths
end

Public Instance Methods

build_stack() click to toggle source
# File lib/rails-api/application/default_rails_four_middleware_stack.rb, line 12
def build_stack
  ActionDispatch::MiddlewareStack.new.tap do |middleware|
    if rack_cache = load_rack_cache
      require "action_dispatch/http/rack_cache"
      middleware.use ::Rack::Cache, rack_cache
    end

    if config.force_ssl
      middleware.use ::ActionDispatch::SSL, config.ssl_options
    end

    if config.action_dispatch.x_sendfile_header.present?
      middleware.use ::Rack::Sendfile, config.action_dispatch.x_sendfile_header
    end

    if config.serve_static_assets
      middleware.use ::ActionDispatch::Static, paths["public"].first, config.static_cache_control
    end

    middleware.use ::Rack::Lock unless allow_concurrency?
    middleware.use ::Rack::Runtime
    middleware.use ::Rack::MethodOverride unless config.api_only
    middleware.use ::ActionDispatch::RequestId

    # Must come after Rack::MethodOverride to properly log overridden methods
    middleware.use ::Rails::Rack::Logger, config.log_tags
    middleware.use ::ActionDispatch::ShowExceptions, show_exceptions_app
    middleware.use ::ActionDispatch::DebugExceptions, app
    middleware.use ::ActionDispatch::RemoteIp, config.action_dispatch.ip_spoofing_check, config.action_dispatch.trusted_proxies

    unless config.cache_classes
      middleware.use ::ActionDispatch::Reloader, lambda { reload_dependencies? }
    end

    middleware.use ::ActionDispatch::Callbacks
    middleware.use ::ActionDispatch::Cookies unless config.api_only

    if !config.api_only && config.session_store
      if config.force_ssl && !config.session_options.key?(:secure)
        config.session_options[:secure] = true
      end
      middleware.use config.session_store, config.session_options
      middleware.use ::ActionDispatch::Flash
    end

    middleware.use ::ActionDispatch::ParamsParser
    middleware.use ::Rack::Head
    middleware.use ::Rack::ConditionalGet
    middleware.use ::Rack::ETag, "no-cache"
  end
end

Private Instance Methods

allow_concurrency?() click to toggle source
# File lib/rails-api/application/default_rails_four_middleware_stack.rb, line 70
def allow_concurrency?
  config.allow_concurrency.nil? ? config.cache_classes : config.allow_concurrency
end
load_rack_cache() click to toggle source
# File lib/rails-api/application/default_rails_four_middleware_stack.rb, line 74
def load_rack_cache
  rack_cache = config.action_dispatch.rack_cache
  return unless rack_cache

  begin
    require 'rack/cache'
  rescue LoadError => error
    error.message << ' Be sure to add rack-cache to your Gemfile'
    raise
  end

  if rack_cache == true
    {
      metastore: "rails:/",
      entitystore: "rails:/",
      verbose: false
    }
  else
    rack_cache
  end
end
reload_dependencies?() click to toggle source
# File lib/rails-api/application/default_rails_four_middleware_stack.rb, line 66
def reload_dependencies?
  config.reload_classes_only_on_change != true || app.reloaders.map(&:updated?).any?
end
show_exceptions_app() click to toggle source
# File lib/rails-api/application/default_rails_four_middleware_stack.rb, line 96
def show_exceptions_app
  config.exceptions_app || ActionDispatch::PublicExceptions.new(Rails.public_path)
end