class SmartCore::Schema::Checker::Rules::Options::Type

@api private @since 0.1.0

Constants

ERROR_CODE

@note Constant is used only for clarity (for other developers) @return [Symbol]

@api private @since 0.1.0

Attributes

type[R]

@return [String, Symbol, SmartCore::Types::Primitive]

@api private @since 0.1.0

Public Class Methods

new(rule, required_type) click to toggle source

@param rule [SmartCore::Schema::Checker::Rules::Base] @param required_type [String, Symbol, SmartCore::Types::Primitive] @return [void]

@api private @since 0.1.0

# File lib/smart_core/schema/checker/rules/options/type.rb, line 20
def initialize(rule, required_type)
  super(rule)
  @type = resolve_required_type(required_type)
end

Public Instance Methods

validate(verifiable_hash) click to toggle source

@param verifiable_hash [SmartCore::Schema::Checker::VerifiableHash] @return [SmartCore::Schema::Checker::Rules::Result::Success] @return [SmartCore::Schema::Checker::Rules::Result::Failure]

@api private @since 0.1.0

# File lib/smart_core/schema/checker/rules/options/type.rb, line 31
def validate(verifiable_hash)
  schema_value = verifiable_hash[schema_key]

  if type.valid?(schema_value)
    SmartCore::Schema::Checker::Rules::Result::Success.new(
      key: schema_key,
      value: schema_value
    )
  else
    SmartCore::Schema::Checker::Rules::Result::Failure.new(
      key: schema_key,
      value: schema_value,
      error: ERROR_CODE,
      message: "Requires #{type} type (got: #{schema_value.class})"
    )
  end
end

Private Instance Methods

resolve_required_type(required_type) click to toggle source

@param required_type [String, Symbol, SmartCore::Types::Primitive] @return [SmartCore::Types::Primitive]

@api private @since 0.1.0

# File lib/smart_core/schema/checker/rules/options/type.rb, line 62
    def resolve_required_type(required_type)
      unless required_type.is_a?(String) ||
             required_type.is_a?(Symbol) ||
             required_type.is_a?(SmartCore::Types::Primitive)
        raise(SmartCore::Schema::ArgumentError, <<~ERROR_MESSAGE)
          Schema key type should be a type of string, symbol or SmartCore:Types::Primitive (got: #{required_type})
        ERROR_MESSAGE
      end

      if required_type.is_a?(SmartCore::Types::Primitive)
        required_type
      else
        begin
          SmartCore::Schema::Checker::Rules::TYPE_ALIASES.fetch(required_type.to_s)
        rescue KeyError
          raise(SmartCore::Schema::ArgumentError, <<~ERROR_MESSAGE)
            Chosen schema key type is not supported or not registered (got #{required_type})
          ERROR_MESSAGE
        end
      end

      # TODO: rework with smart_type-system
    end