class NamedValidations
Naming to ActiveModel/ActiveRecord validations
Constants
- RESERVED
Reserved names
- VERSION
Public Class Methods
aliases()
click to toggle source
Returns list of defined alias names @return [Array<Symbol>]
# File lib/named_validations.rb, line 35 def aliases @aliases ||= [] end
define(name, *spec, &block)
click to toggle source
@overload define(name, validation, params)
Defines a new simple alias (define-by-value) @param name [Symbol] new alias name @param validation [Symbol] validation name or defined alias name @param params [Object] parameters or arguments for validation
@overload define(name, block)
Defines a new alias by block (define-by-block) @param name [Symbol] new alias name @param block [Proc] body of alias
# File lib/named_validations.rb, line 25 def define(name, *spec, &block) raise ArgumentError, "reserved name #{name}" if RESERVED.include?(name) return define_by_block(name, block) if spec.empty? validation, params, = spec define_by_value(name, validation, params) end
Private Class Methods
define_by_block(name, block)
click to toggle source
# File lib/named_validations.rb, line 46 def define_by_block(name, block) define_method(name, block) aliases << name name end
define_by_value(name, validation, params)
click to toggle source
# File lib/named_validations.rb, line 52 def define_by_value(name, validation, params) raise ArgumentError, "unknown alias #{name}" unless aliases.include?(validation) block = -> (*opts) { public_send(validation, params, *opts) } define_by_block(name, block) end
define_for(name)
click to toggle source
Defines aliases for ActiveModel/ActiveRecord validations @!macro attach define_for
Apply `$1` to `self` and return a new object @!method $1(arg, *opts) @return [NamedValidations]
# File lib/named_validations.rb, line 65 def define_for(name) define(name) { |arg, *opts| deep_merge(name, arg, *opts) } end
inherited(sub_class)
click to toggle source
# File lib/named_validations.rb, line 41 def inherited(sub_class) # Merge defined alias names list aliases.each { |name| sub_class.aliases << name } end
Public Instance Methods
extractable_options?()
click to toggle source
Returns true
@note This method is needed for ActiveSupport ‘Hash#extract_options!`.
# File lib/named_validations.rb, line 89 def extractable_options? true end
inspect()
click to toggle source
Inspects self
# File lib/named_validations.rb, line 94 def inspect klass = self.class class_name = klass.name || Kernel.format('(Anonymous:0x%x)', klass.object_id) Kernel.format('#<%s:0x%x>', class_name, object_id) end
Protected Instance Methods
deep_merge(validation, params, *opts)
click to toggle source
Returns a new object containing the given validations and the current validations.
# File lib/named_validations.rb, line 105 def deep_merge(validation, params, *opts) new_obj = deep_merge_internal(validation, params) opts.inject(new_obj) { |obj, opt| obj.deep_merge(validation, opt) } end
Private Instance Methods
deep_merge_internal(validation, params)
click to toggle source
# File lib/named_validations.rb, line 112 def deep_merge_internal(validation, params) cur_params = self[validation] if !params.is_a?(Hash) || !cur_params.is_a?(Hash) new_params = params else new_params = params.inject(cur_params) do |hash, (key, value)| hash.merge(key => value) end end merge(validation => new_params) end