module SteelWheel::SkipActiveModelErrorsKeys

Attributes

skip_keys[RW]

Public Class Methods

[](*skip_keys) click to toggle source
# File lib/steel_wheel/skip_active_model_errors_keys.rb, line 30
def self.[](*skip_keys)
  mod = build_module
  mod.skip_keys = skip_keys
  builder = self
  mod.module_eval do
    define_singleton_method(:included) do |klass|
      builder.patch_errors_method_on_instance(self, klass)
    end
  end
  mod
end
build_module() click to toggle source
# File lib/steel_wheel/skip_active_model_errors_keys.rb, line 3
def self.build_module
  mod = Module.new do
    class << self
      attr_accessor :skip_keys

      def extended(klass)
        klass.include self
      end
    end
  end
end
extended(klass) click to toggle source
# File lib/steel_wheel/skip_active_model_errors_keys.rb, line 8
def extended(klass)
  klass.include self
end
patch_errors_method_on_instance(mod, klass) click to toggle source
Calls superclass method
# File lib/steel_wheel/skip_active_model_errors_keys.rb, line 15
def self.patch_errors_method_on_instance(mod, klass)
  class << klass
    alias_method :__new__, :new
  end

  klass.define_singleton_method :new do |*args|
    instance = __new__(*args)
    instance.errors.define_singleton_method :full_message do |attribute, message|
      return message if mod.skip_keys.include?(attribute)
      super(attribute, message)
    end
    instance
  end
end