class Errapi::Configuration

Attributes

options[R]
plugins[R]

Public Class Methods

new() click to toggle source
# File lib/errapi/configuration.rb, line 9
def initialize
  @options = OpenStruct.new
  @plugins = OpenStruct.new
  @validation_factories = {}
  @condition_factories = {}
  @location_factories = {}
  @configured = false
  @configured_blocks = []
end

Public Instance Methods

build_error(error, context) click to toggle source
# File lib/errapi/configuration.rb, line 44
def build_error error, context
  apply_plugins :build_error, error, context
end
condition_factory(factory) click to toggle source
# File lib/errapi/configuration.rb, line 84
def condition_factory factory
  factory.conditionals.each do |conditional|
    raise ArgumentError, "Conditional #{conditional} should start with 'if' or 'unless'." unless conditional.to_s.match /^(if|unless)/
    @condition_factories[conditional] = factory
  end
end
configure() { |self| ... } click to toggle source
# File lib/errapi/configuration.rb, line 23
def configure
  raise "Configuration can only be done once." if @configured
  yield self if block_given?
  @configured_blocks.each{ |block| block.call }
  @configured_blocks.clear
  @configured = true
  self
end
configured?() click to toggle source
# File lib/errapi/configuration.rb, line 19
def configured?
  @configured
end
extract_conditions!(source, options = {}) click to toggle source
# File lib/errapi/configuration.rb, line 97
def extract_conditions! source, options = {}
  [].tap do |conditions|
    @condition_factories.each_pair do |conditional,factory|
      next unless source.key? conditional
      conditions << factory.new(conditional, source.delete(conditional), options)
    end
  end
end
new_context() click to toggle source
# File lib/errapi/configuration.rb, line 52
def new_context
  Errapi::ValidationContext.new config: self
end
new_error(options = {}) click to toggle source
# File lib/errapi/configuration.rb, line 40
def new_error options = {}
  Errapi::ValidationError.new options
end
on_configured(&block) click to toggle source
# File lib/errapi/configuration.rb, line 32
def on_configured &block
  if @configured
    block.call
  else
    @configured_blocks << block
  end
end
plugin(impl, options = {}) click to toggle source
# File lib/errapi/configuration.rb, line 56
def plugin impl, options = {}
  name = implementation_name impl, options
  impl.config = self if impl.respond_to? :config=
  @plugins[name] = impl
end
remove_condition_factory(factory) click to toggle source
# File lib/errapi/configuration.rb, line 91
def remove_condition_factory factory
  factory.conditionals.each do |conditional|
    @condition_factories.delete conditional
  end
end
remove_plugin(name) click to toggle source
# File lib/errapi/configuration.rb, line 62
def remove_plugin name
  raise ArgumentError, "No plugin registered for name #{name.inspect}" unless @plugins.key? name
  @plugins.delete name
end
remove_validation_factory(name) click to toggle source
# File lib/errapi/configuration.rb, line 73
def remove_validation_factory name
  raise ArgumentError, "No validation factory registered for name #{name.inspect}" unless @validation_factories.key? name
  @validation_factories.delete name
end
serialize_error(error, serialized) click to toggle source
# File lib/errapi/configuration.rb, line 48
def serialize_error error, serialized
  apply_plugins :serialize_error, error, serialized
end
validation(name, options = {}) click to toggle source
# File lib/errapi/configuration.rb, line 78
def validation name, options = {}
  raise ArgumentError, "No validation factory registered for name #{name.inspect}" unless @validation_factories.key? name
  factory = @validation_factories[name]
  factory.respond_to?(:validation) ? factory.validation(options) : factory.new(options)
end
validation_factory(factory, options = {}) click to toggle source
# File lib/errapi/configuration.rb, line 67
def validation_factory factory, options = {}
  name = implementation_name factory, options
  factory.config = self if factory.respond_to? :config=
  @validation_factories[name] = factory
end

Private Instance Methods

apply_plugins(operation, *args) click to toggle source
# File lib/errapi/configuration.rb, line 118
def apply_plugins operation, *args
  @plugins.each_pair do |name,plugin|
    plugin.send operation, *args if plugin.respond_to? operation
  end
end
implementation_name(impl, options = {}) click to toggle source
# File lib/errapi/configuration.rb, line 108
def implementation_name impl, options = {}
  if options[:name]
    options[:name].to_sym
  elsif impl.respond_to? :name
    impl.name.to_sym
  else
    raise ArgumentError, "Plugins and factories added to a configuration must respond to #name or be supplied with the :name option."
  end
end