Sha256: 80ae138eaae22ccd2e55b2a5796b76e2756cbbc69f9050d6f3d68b4f045bfa79

Contents?: true

Size: 1.99 KB

Versions: 1

Compression:

Stored size: 1.99 KB

Contents

module EnsureIt
  TRUE_NAMES = %w(true y yes 1)

  patch Object do
    def ensure_boolean(default: nil, **opts)
      default
    end

    def ensure_boolean!(**opts)
      EnsureIt.raise_error(:ensure_boolean!,
                           **EnsureIt::ensure_boolean_error(**opts))
    end
  end

  patch String do
    def ensure_boolean(default: nil, strings: false, **opts)
      return TRUE_NAMES.include?(downcase) if strings == true
      default
    end

    def ensure_boolean!(strings: false, **opts)
      return TRUE_NAMES.include?(downcase) if strings == true
      EnsureIt.raise_error(:ensure_boolean!,
                           **EnsureIt::ensure_boolean_error(**opts))
    end
  end

  patch Symbol do
    def ensure_boolean(default: nil, strings: false, **opts)
      return TRUE_NAMES.include?(to_s.downcase) if strings == true
      default
    end

    def ensure_boolean!(strings: false, **opts)
      return TRUE_NAMES.include?(to_s.downcase) if strings == true
      EnsureIt.raise_error(:ensure_boolean!,
                           **EnsureIt::ensure_boolean_error(**opts))
    end
  end

  patch Numeric do
    def ensure_boolean(default: nil, numbers: true, positive: false, **opts)
      return positive == true ? self > 0 : self != 0 if numbers == true
      default
    end

    def ensure_boolean!(numbers: true, positive: false, **opts)
      return positive == true ? self > 0 : self != 0 if numbers == true
      EnsureIt.raise_error(:ensure_boolean!,
                           **EnsureIt::ensure_boolean_error(**opts))
    end
  end

  patch TrueClass do
    def ensure_boolean(**opts)
      self
    end
    alias_method :ensure_boolean!, :ensure_boolean
  end

  patch FalseClass do
    def ensure_boolean(**opts)
      self
    end
    alias_method :ensure_boolean!, :ensure_boolean
  end

  def self.ensure_boolean_error(**opts)
    unless opts.key?(:message)
      opts[:message] = '#{subject} should be a boolean or be able' \
                       ' to convert to it'
    end
    opts
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ensure_it-1.0.0 lib/ensure_it/ensure_boolean.rb