Module: Raven

Extended by:
Forwardable
Defined in:
lib/raven/backtrace.rb,
lib/raven/cli.rb,
lib/raven/base.rb,
lib/raven/error.rb,
lib/raven/event.rb,
lib/raven/client.rb,
lib/raven/logger.rb,
lib/raven/context.rb,
lib/raven/version.rb,
lib/raven/instance.rb,
lib/raven/linecache.rb,
lib/raven/processor.rb,
lib/raven/interfaces.rb,
lib/raven/transports.rb,
lib/raven/breadcrumbs.rb,
lib/raven/breadcrumbs.rb,
lib/raven/configuration.rb,
lib/raven/interfaces/http.rb,
lib/raven/transports/http.rb,
lib/raven/transports/dummy.rb,
lib/raven/utils/deep_merge.rb,
lib/raven/integrations/rack.rb,
lib/raven/processor/cookies.rb,
lib/raven/breadcrumbs/logger.rb,
lib/raven/integrations/rails.rb,
lib/raven/interfaces/message.rb,
lib/raven/processor/post_data.rb,
lib/raven/processor/truncator.rb,
lib/raven/integrations/sidekiq.rb,
lib/raven/interfaces/exception.rb,
lib/raven/interfaces/stack_trace.rb,
lib/raven/processor/sanitizedata.rb,
lib/raven/processor/utf8conversion.rb,
lib/raven/breadcrumbs/activesupport.rb,
lib/raven/processor/removestacktrace.rb,
lib/raven/interfaces/single_exception.rb,
lib/raven/integrations/rails/active_job.rb,
lib/raven/processor/removecircularreferences.rb,
lib/raven/integrations/rails/controller_methods.rb,
lib/raven/integrations/rails/overrides/streaming_reporter.rb,
lib/raven/integrations/rails/overrides/debug_exceptions_catcher.rb

Overview

A much simpler source line cacher because linecache sucks at platform compat

Defined Under Namespace

Modules: ActiveSupportBreadcrumbs, BreadcrumbLogger, OldBreadcrumbLogger, RackInterface, Transports, Utils Classes: Backtrace, Breadcrumb, BreadcrumbBuffer, CLI, Client, ClientState, Configuration, Context, Error, Event, ExceptionInterface, HttpInterface, Instance, Interface, LineCache, Logger, MessageInterface, Processor, Rack, Rails, Sidekiq, SingleExceptionInterface, StacktraceInterface

Constant Summary collapse

AVAILABLE_INTEGRATIONS =
%w[delayed_job railties sidekiq rack rake].freeze
VERSION =

Freezing this constant breaks in 1.9.x

"1.2.2"
INTERFACES =

TODO: a constant isn’t appropriate here, refactor

{}

Class Method Summary collapse

Class Method Details

.find_interface(name) ⇒ Object



31
32
33
# File 'lib/raven/interfaces.rb', line 31

def self.find_interface(name)
  INTERFACES[name.to_s]
end

.injectObject

Injects various integrations. Default behavior: inject all available integrations



51
52
53
# File 'lib/raven/base.rb', line 51

def inject
  inject_only(*Raven::AVAILABLE_INTEGRATIONS)
end

.inject_only(*only_integrations) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/raven/base.rb', line 60

def inject_only(*only_integrations)
  only_integrations = only_integrations.map(&:to_s)
  integrations_to_load = Raven::AVAILABLE_INTEGRATIONS & only_integrations
  not_found_integrations = only_integrations - integrations_to_load
  if not_found_integrations.any?
    self.logger.warn "Integrations do not exist: #{not_found_integrations.join ', '}"
  end
  integrations_to_load &= Gem.loaded_specs.keys
  # TODO(dcramer): integrations should have some additional checks baked-in
  # or we should break them out into their own repos. Specifically both the
  # rails and delayed_job checks are not always valid (i.e. Rails 2.3) and
  # https://github.com/getsentry/raven-ruby/issues/180
  integrations_to_load.each do |integration|
    load_integration(integration)
  end
end

.inject_without(*exclude_integrations) ⇒ Object



55
56
57
58
# File 'lib/raven/base.rb', line 55

def inject_without(*exclude_integrations)
  include_integrations = Raven::AVAILABLE_INTEGRATIONS - exclude_integrations.map(&:to_s)
  inject_only(*include_integrations)
end

.instanceObject



32
33
34
# File 'lib/raven/base.rb', line 32

def instance
  @instance ||= Raven::Instance.new
end

.load_integration(integration) ⇒ Object



77
78
79
80
81
# File 'lib/raven/base.rb', line 77

def load_integration(integration)
  require "raven/integrations/#{integration}"
rescue Exception => error
  self.logger.warn "Unable to load raven/integrations/#{integration}: #{error}"
end

.register_interface(mapping) ⇒ Object



24
25
26
27
28
29
# File 'lib/raven/interfaces.rb', line 24

def self.register_interface(mapping)
  mapping.each_pair do |key, klass|
    INTERFACES[key.to_s] = klass
    INTERFACES[klass.name] = klass
  end
end

.safely_prepend(module_name, opts = {}) ⇒ Object



83
84
85
86
87
88
89
90
# File 'lib/raven/base.rb', line 83

def safely_prepend(module_name, opts = {})
  return if opts[:to].nil? || opts[:from].nil?
  if opts[:to].respond_to?(:prepend, true)
    opts[:to].send(:prepend, opts[:from].const_get(module_name))
  else
    opts[:to].send(:include, opts[:from].const_get("Old" + module_name))
  end
end