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