class Rack::WebProfiler::Collectors

Collectors.

Container of Collector objects.

Public Class Methods

new() click to toggle source

Initialize.

# File lib/rack/web_profiler/collectors.rb, line 13
def initialize
  reset!
end

Public Instance Methods

add_collector(collector_class) click to toggle source

Add a collector.

@param collector_class [Array, Class]

@raise [ArgumentError] if `collector_class' is not a Class or is not an instance of Rack::WebProfiler::Collector::DSL

or a collector with this identifier is already registrered.
# File lib/rack/web_profiler/collectors.rb, line 40
def add_collector(collector_class)
  return collector_class.each { |c| add_collector(c) } if collector_class.is_a? Array


  raise ArgumentError, "`collector_class' must be a class" unless collector_class.is_a? Class

  unless collector_class.included_modules.include?(Rack::WebProfiler::Collector::DSL)
    raise ArgumentError, "#{collector_class.class.name} must be an instance of \"Rack::WebProfiler::Collector::DSL\""
  end

  definition = collector_class.definition

  if definition_by_identifier(definition.identifier)
    raise ArgumentError, "A collector with identifier \“#{definition.identifier}\" already exists"
  end

  return false unless definition.is_enabled?

  @collectors[collector_class] = definition

  sort_collectors!
end
all() click to toggle source

Returns all collectors definition.

@return [Hash<Symbol, Rack::WebProfiler::Collector::DSL::Definition>]

# File lib/rack/web_profiler/collectors.rb, line 30
def all
  @sorted_collectors
end
definition_by_identifier(identifier) click to toggle source

Get a collector definition by his identifier.

@param identifier [String]

@return [Rack::WebProfiler::Collector::DSL::Definition, nil]

# File lib/rack/web_profiler/collectors.rb, line 22
def definition_by_identifier(identifier)
  identifier = identifier.to_sym
  @sorted_collectors[identifier] unless @sorted_collectors[identifier].nil?
end
remove_collector(collector_class) click to toggle source

Remove a collector.

@param collector_class [Array, Class]

@raise [ArgumentError] if `collector_class' is not a Class or if this collector is not registered.

# File lib/rack/web_profiler/collectors.rb, line 68
def remove_collector(collector_class)
  return collector_class.each { |c| remove_collector(c) } if collector_class.is_a? Array

  raise ArgumentError, "`collector_class' must be a class" unless collector_class.is_a? Class
  raise ArgumentError, "No collector found with class \“#{collector_class}\"" unless @collectors[collector_class]

  @collectors.delete(collector_class)

  sort_collectors!
end
reset!() click to toggle source

Reset collecotrs.

# File lib/rack/web_profiler/collectors.rb, line 80
def reset!
  @collectors        = {}
  @sorted_collectors = {}
end

Private Instance Methods

sort_collectors!() click to toggle source

Sort collectors by definition identifier.

# File lib/rack/web_profiler/collectors.rb, line 88
def sort_collectors!
  @sorted_collectors = {}

  tmp = @collectors.sort_by { |_klass, definition| definition.position }
  tmp.each { |_k, v| @sorted_collectors[v.identifier.to_sym] = v }
end