Class: Radar::Application

Inherits:
Object
  • Object
show all
Defined in:
lib/radar/application.rb

Overview

Represents an instance of Radar for a given application. Every application which uses Radar must instantiate an Application.

Constant Summary collapse

@@registered =
{}
@@mutex =
Mutex.new

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, register = true) ⇒ Application

Creates a new application with the given name and registers it for lookup later. If a block is given, it will be yielded with the new instantiated Radar::Application so you can also #config it all in one go.

Parameters:

  • name (String)

    Application name. This must be unique for any given application or an exception will be raised.



41
42
43
44
45
46
47
48
49
50
# File 'lib/radar/application.rb', line 41

def initialize(name, register=true)
  @@mutex.synchronize do
    raise ApplicationAlreadyExists.new("'#{name}' already defined at '#{self.class.find(name).creation_location}'") if self.class.find(name)

    @name = name
    @creation_location = caller.first
    yield self if block_given?
    @@registered[name] = self if register
  end
end

Instance Attribute Details

#creation_locationObject (readonly)

Returns the value of attribute creation_location.



17
18
19
# File 'lib/radar/application.rb', line 17

def creation_location
  @creation_location
end

#nameObject (readonly)

Returns the value of attribute name.



16
17
18
# File 'lib/radar/application.rb', line 16

def name
  @name
end

Class Method Details

.clear!Object

Removes all registered applications. This is only exposed for testing purposes.



29
30
31
# File 'lib/radar/application.rb', line 29

def self.clear!
  @@registered.clear
end

.find(name) ⇒ Application

Looks up an application which was registered with the given name.

Parameters:

  • name (String)

    Application name.

Returns:



23
24
25
# File 'lib/radar/application.rb', line 23

def self.find(name)
  @@registered[name]
end

Instance Method Details

#config {|Config| ... } ⇒ Config

Configures the application by returning the configuration object. If a block is given, the configuration object will be passed into it, allowing for a cleaner way of configuring your applications.

$app = Radar::Application.new
$app.config do |config|
  config.reporters.use Radar::Reporter::FileReporter
end

You can also just use it without a block:

$app.config.reporters.use Radar::Reporter::FileReporter

Yields:

  • (Config)

    Configuration object, only if block is given.

Returns:



68
69
70
71
72
# File 'lib/radar/application.rb', line 68

def config
  @_config ||= Config.new
  yield @_config if block_given?
  @_config
end

#report(exception, extra = nil) ⇒ Object

Reports an exception. This will send the exception on to the various reporters configured for this application. If any matchers are defined, using Config#match, then at least one must match for the report to go forward to reporters.

Parameters:

  • exception (Exception)


80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/radar/application.rb', line 80

def report(exception, extra=nil)
  data = ExceptionEvent.new(self, exception, extra)

  # If there are matchers, then verify that at least one matches
  # before continuing
  return if !config.matchers.empty? && !config.matchers.values.find { |m| m.matches?(data) }

  # Report the exception to each of the reporters
  config.reporters.values.each do |reporter|
    reporter.report(data)
  end
end

#rescue_at_exit!Object

Hooks this application into the at_exit handler so that application crashing exceptions are properly reported.



95
96
97
# File 'lib/radar/application.rb', line 95

def rescue_at_exit!
  at_exit { report($!) if $! }
end

#to_hashHash

Converts application to a serialization-friendly hash.

Returns:

  • (Hash)


102
103
104
# File 'lib/radar/application.rb', line 102

def to_hash
  { :name => name }
end