class SmartCore::Validator::Invoker
@api private @since 0.1.0
Constants
- Error
@return [SmartCore::Validator::Invoker::Error]
@api private @since 0.4.0
- StopValidationError
@return [SmartCore::Validator::Invoker::StopValidationError]
@api private @since 0.4.0
Attributes
@return [SmartCore::Validator]
@api private @since 0.1.0k
Public Class Methods
@param validator [SmartCore::Validator] @param validating_method [Symbol, String] @return [SmartCore::Validator::ErrorSet]
@api private @since 0.1.0
# File lib/smart_core/validator/invoker.rb, line 26 def call(validator, validating_method) new(validator).call(validating_method) end
@param validator [SmartCore::Validator] @return [void]
@api private @since 0.1.0
# File lib/smart_core/validator/invoker.rb, line 42 def initialize(validator) @validator = validator @access_lock = Mutex.new end
Public Instance Methods
@param validating_method [String, Symbol] @return [SmartCore::Validator::ErrorSet]
@api private @since 0.1.0
# File lib/smart_core/validator/invoker.rb, line 53 def call(validating_method) thread_safe do ErrorSet.new.tap do |outer_errors| begin extended_validator(outer_errors).send(validating_method) rescue StopValidationError end end end end
Private Instance Methods
Creates new validator object cloned from the original validator object with the new functionality:
- error code interception; - soft quit from the original method immidietly;
@param outer_errors [SmartCore::Validator::ErrorSet] @return [SmartCore::Validator]
@raise [SmartCore::Validator::Invoker::StopValidationError]
@api private @since 0.1.0
# File lib/smart_core/validator/invoker.rb, line 78 def extended_validator(outer_errors) validator.dup.tap do |validator_clone| validator_clone.define_singleton_method(:error) do |error_code| outer_errors.add_error(error_code) end validator_clone.define_singleton_method(:fatal) do |error_code| outer_errors.add_error(error_code) raise StopValidationError end end end
@param block [Proc] @return [Any]
@api private @since 0.1.0
# File lib/smart_core/validator/invoker.rb, line 96 def thread_safe(&block) @access_lock.synchronize(&block) end