Sha256: 19788f8305dcfeca617de11330e4073f5830a65ca20d9cd5467ecbb46eb8366d

Contents?: true

Size: 1.79 KB

Versions: 10

Compression:

Stored size: 1.79 KB

Contents

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.io/terms.html

require 'sqreen/frameworks/generic'
require 'sqreen/middleware'

module Sqreen
  module Frameworks
    # Handle Sinatra specific functions
    class SinatraFramework < GenericFramework
      def framework_infos
        h = super
        h[:framework_type] = 'Sinatra'
        h[:framework_version] = Sinatra::VERSION
        h
      end

      def on_start(&block)
        sentry_ignore_exceptions
        newrelic_ignore_errors
        hook_app_build(Sinatra::Base)
        hook_rack_request(Sinatra::Application, &block)
        yield self
      end

      def db_settings(options = {})
        adapter = options[:connection_adapter]
        return nil unless adapter

        begin
          adapter_name = adapter.class.const_get 'ADAPTER_NAME'
        rescue
          # FIXME: we may want to log that
          Sqreen.log.warn 'cannot find ADAPTER_NAME'
          return nil
        end
        db_type = DB_MAPPING[adapter_name]
        db_infos = { :name => adapter_name }
        [db_type, db_infos]
      end

      def hook_app_build(klass)
        klass.singleton_class.class_eval do
          define_method(:setup_default_middleware_with_sqreen) do |builder|
            ret = setup_default_middleware_without_sqreen(builder)
            builder.instance_variable_get('@use').insert(2, proc do |app|
              # Inject error middle just before sinatra one
              Sqreen::ErrorHandlingMiddleware.new(app)
            end)
            ret
          end

          alias_method :setup_default_middleware_without_sqreen, :setup_default_middleware
          alias_method :setup_default_middleware, :setup_default_middleware_with_sqreen
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
sqreen-1.14.0.beta3-java lib/sqreen/frameworks/sinatra.rb
sqreen-1.14.0.beta3 lib/sqreen/frameworks/sinatra.rb
sqreen-1.14.0.beta2 lib/sqreen/frameworks/sinatra.rb
sqreen-1.14.0.beta1 lib/sqreen/frameworks/sinatra.rb
sqreen-1.13.4-java lib/sqreen/frameworks/sinatra.rb
sqreen-alt-1.13.4 lib/sqreen/frameworks/sinatra.rb
sqreen-1.13.4 lib/sqreen/frameworks/sinatra.rb
sqreen-1.13.2-java lib/sqreen/frameworks/sinatra.rb
sqreen-alt-1.13.2 lib/sqreen/frameworks/sinatra.rb
sqreen-1.13.2 lib/sqreen/frameworks/sinatra.rb