module Stannum::Support::Optional

Methods for handling optional/required options.

@api private

Public Class Methods

resolve( optional: nil, required: nil, required_by_default: true, **options ) click to toggle source

@private

# File lib/stannum/support/optional.rb, line 12
def resolve(
  optional:            nil,
  required:            nil,
  required_by_default: true,
  **options
)
  default =
    validate_option(required_by_default, as: :required_by_default)

  options.merge(
    required: required?(
      default:  default,
      optional: validate_option(optional, as: :optional),
      required: validate_option(required, as: :required)
    )
  )
end

Private Class Methods

required?(default:, optional:, required:) click to toggle source
# File lib/stannum/support/optional.rb, line 32
def required?(default:, optional:, required:)
  return default if optional.nil? && required.nil?

  return !optional if required.nil?

  return required if optional.nil?

  return required unless required == optional

  raise ArgumentError, 'required and optional must match', caller(1..-1)
end
validate_option(option, as:) click to toggle source
# File lib/stannum/support/optional.rb, line 44
def validate_option(option, as:)
  return option if option.nil? || option == true || option == false

  raise ArgumentError, "#{as} must be true or false", caller(1..-1)
end

Public Instance Methods

optional?() click to toggle source

@return [true, false] false if the property accepts nil values, otherwise

true.
# File lib/stannum/support/optional.rb, line 53
def optional?
  !options[:required]
end
required?() click to toggle source

@return [true, false] true if the property accepts nil values, otherwise

false.
# File lib/stannum/support/optional.rb, line 59
def required?
  options[:required]
end

Private Instance Methods

resolve_required_option(**options) click to toggle source
# File lib/stannum/support/optional.rb, line 65
def resolve_required_option(**options)
  Stannum::Support::Optional.resolve(**options)
end