Module: DecoLite::OptionsValidatable

Includes:
FieldsOptionable, NamespaceOptionable, RequiredFieldsOptionable
Included in:
Optionable, Options
Defined in:
lib/deco_lite/options_validatable.rb

Overview

Methods to validate options.

Constant Summary collapse

OPTIONS =
[OPTION_FIELDS, OPTION_NAMESPACE, OPTION_REQUIRED_FIELDS].freeze

Constants included from RequiredFieldsOptionable

RequiredFieldsOptionable::OPTION_REQUIRED_FIELDS, RequiredFieldsOptionable::OPTION_REQUIRED_FIELDS_AUTO, RequiredFieldsOptionable::OPTION_REQUIRED_FIELDS_DEFAULT, RequiredFieldsOptionable::OPTION_REQUIRED_FIELDS_VALUES

Constants included from NamespaceOptionable

NamespaceOptionable::OPTION_NAMESPACE, NamespaceOptionable::OPTION_NAMESPACE_DEFAULT

Constants included from FieldsOptionable

FieldsOptionable::OPTION_FIELDS, FieldsOptionable::OPTION_FIELDS_DEFAULT, FieldsOptionable::OPTION_FIELDS_MERGE, FieldsOptionable::OPTION_FIELDS_STRICT, FieldsOptionable::OPTION_FIELDS_VALUES

Instance Method Summary collapse

Instance Method Details

#validate_option_fields!(fields:) ⇒ Object

Raises:

  • (ArgumentError)


36
37
38
39
40
41
42
# File 'lib/deco_lite/options_validatable.rb', line 36

def validate_option_fields!(fields:)
  return if OPTION_FIELDS_VALUES.include?(fields)

  raise ArgumentError,
    "option :fields value or type is invalid. #{OPTION_FIELDS_VALUES} (Symbol) " \
    "was expected, but '#{fields}' (#{fields.class}) was received."
end

#validate_option_keys!(options:) ⇒ Object

Raises:

  • (ArgumentError)


31
32
33
34
# File 'lib/deco_lite/options_validatable.rb', line 31

def validate_option_keys!(options:)
  invalid_options = options.except(*OPTIONS)&.keys
  raise ArgumentError, "One or more option keys were unrecognized: #{invalid_options}" unless invalid_options.blank?
end

#validate_option_namespace!(namespace:) ⇒ Object

Raises:

  • (ArgumentError)


44
45
46
47
48
49
50
# File 'lib/deco_lite/options_validatable.rb', line 44

def validate_option_namespace!(namespace:)
  # :namespace is optional.
  return if namespace.blank? || namespace.is_a?(Symbol)

  raise ArgumentError, 'option :namespace value or type is invalid. A Symbol was expected, ' \
                       "but '#{namespace}' (#{namespace.class}) was received."
end

#validate_option_required_fields!(required_fields:) ⇒ Object

Raises:

  • (ArgumentError)


52
53
54
55
56
57
58
59
# File 'lib/deco_lite/options_validatable.rb', line 52

def validate_option_required_fields!(required_fields:)
  # :required_fields is optional.
  return if required_fields.blank? || OPTION_REQUIRED_FIELDS_VALUES.include?(required_fields)

  raise ArgumentError,
    "option :fields_required value or type is invalid. #{OPTION_REQUIRED_FIELDS_VALUES} (Symbol) " \
    "was expected, but '#{required_fields}' (#{required_fields.class}) was received."
end

#validate_options!(options:) ⇒ Object

Raises:

  • (ArgumentError)


16
17
18
19
20
21
22
23
24
25
# File 'lib/deco_lite/options_validatable.rb', line 16

def validate_options!(options:)
  raise ArgumentError, 'options is not a Hash' unless options.is_a? Hash

  validate_options_present! options: options

  validate_option_keys! options: options
  validate_option_fields! fields: options[OPTION_FIELDS]
  validate_option_namespace! namespace: options[OPTION_NAMESPACE]
  validate_option_required_fields! required_fields: options[OPTION_REQUIRED_FIELDS]
end

#validate_options_present!(options:) ⇒ Object

Raises:

  • (ArgumentError)


27
28
29
# File 'lib/deco_lite/options_validatable.rb', line 27

def validate_options_present!(options:)
  raise ArgumentError, 'options is blank?' if options.blank?
end