Sha256: 1ae6f2c01ccd469c6a1d9428e909e74c322f7e1d29a39e5f16754ff44d160d4f

Contents?: true

Size: 1.93 KB

Versions: 26

Compression:

Stored size: 1.93 KB

Contents

require 'pact_broker/configuration'
require 'pact_broker/db'
require 'pact_broker/project_root'
require 'rack/hal_browser'
require 'rack/pact_broker/convert_file_extension_to_accept_header'

module PactBroker

  class App

    attr_accessor :configuration

    def initialize &block
      @configuration = PactBroker.configuration
      yield configuration
      post_configure
      build_app
    end

    def call env
      @app.call env
    end

    private

    def logger
      PactBroker.logger
    end

    def post_configure
      PactBroker.logger = configuration.logger
      PactBroker::DB.connection = configuration.database_connection
      PactBroker::DB.connection.timezone = :utc
      PactBroker::DB.validate_connection_config if configuration.validate_database_connection_config

      if configuration.auto_migrate_db
        logger.info "Migrating database"
        PactBroker::DB.run_migrations configuration.database_connection
      else
        logger.info "Skipping database migrations"
      end
    end

    def build_app
      @app = Rack::Builder.new

      @app.use Rack::Static, :urls => ["/stylesheets", "/css", "/fonts", "/js", "/javascripts", "/images"], :root => PactBroker.project_root.join("public")
      @app.use Rack::PactBroker::ConvertFileExtensionToAcceptHeader

      if configuration.use_hal_browser
        logger.info "Mounting HAL browser"
        @app.use Rack::HalBrowser::Redirect
      else
        logger.info "Not mounting HAL browser"
      end

      logger.info "Mounting UI"
      require 'pact_broker/ui'

      logger.info "Mounting PactBroker::API"
      require 'pact_broker/api'

      apps = []

      if configuration.enable_diagnostic_endpoints
        require 'pact_broker/diagnostic/app'
        apps << PactBroker::Diagnostic::App.new
      end

      apps << PactBroker::UI::App.new
      apps << PactBroker::API

      @app.map "/" do
        run Rack::Cascade.new(apps)
      end

    end

  end

end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
pact_broker-2.0.0.beta.6 lib/pact_broker/app.rb
pact_broker-2.0.0.beta.5 lib/pact_broker/app.rb
pact_broker-1.17.2 lib/pact_broker/app.rb
pact_broker-1.17.1 lib/pact_broker/app.rb
pact_broker-2.0.0.beta.4 lib/pact_broker/app.rb
pact_broker-2.0.0.beta.3 lib/pact_broker/app.rb
pact_broker-2.0.0.beta.2 lib/pact_broker/app.rb
pact_broker-2.0.0.beta.1 lib/pact_broker/app.rb
pact_broker-1.17.0 lib/pact_broker/app.rb
pact_broker-1.16.0 lib/pact_broker/app.rb
pact_broker-1.15.0 lib/pact_broker/app.rb
pact_broker-1.14.0 lib/pact_broker/app.rb
pact_broker-1.13.0 lib/pact_broker/app.rb
pact_broker-1.12.0 lib/pact_broker/app.rb
pact_broker-1.11.2 lib/pact_broker/app.rb
pact_broker-1.11.1 lib/pact_broker/app.rb
pact_broker-1.11.0 lib/pact_broker/app.rb
pact_broker-1.10.0 lib/pact_broker/app.rb
pact_broker-1.9.3 lib/pact_broker/app.rb
pact_broker-1.9.2 lib/pact_broker/app.rb