module Arx::Validate

Validations for arXiv search query fields and identifier schemes.

@private

Public Class Methods

categories(categories) click to toggle source

Validates a list of arXiv categories.

@note This is only called after {values}, so there is no need to check types. @param categories [Array<String>] The categories to validate. @raise [ArgumentError] If any category is unrecognized (not a valid arXiv category). @see Arx::CATEGORIES

# File lib/arx/query/validate.rb, line 99
def categories(categories)
  categories.each do |category|
    raise ArgumentError.new("Unrecognized arXiv category (#{category}). See Arx::CATEGORIES.") unless Arx::CATEGORIES.keys.include? category
  end
end
connective(value, permitted:) click to toggle source

Validates a logical connective.

@param value [Symbol] The value to validate. @param permitted [Array<Symbol>] Permitted values for the field. @raise

[TypeError] If the value is not a +Symbol+.
[ArgumentError] If the value is not permitted.
# File lib/arx/query/validate.rb, line 75
def connective(value, permitted:)
  raise TypeError.new("Expected `connective` to be a Symbol, got: #{value.class}") unless value.is_a? Symbol
  raise ArgumentError.new("Expected `connective` to be one of #{permitted}, got: #{value}") unless permitted.include? value
end
exact(value) click to toggle source

Validates the exact parameter.

@param value [Boolean] The value to validate. @raise

[TypeError] If the value is not a boolean (+TrueClass+ or +FalseClass+).
# File lib/arx/query/validate.rb, line 64
def exact(value)
  raise TypeError.new("Expected `exact` to be boolean (TrueClass or FalseClass), got: #{value.class}") unless value == !!value
end
id?(id) click to toggle source

Validates an arXiv identifier of both the old and new schemes.

@see NEW_IDENTIFIER_FORMAT @see OLD_IDENTIFIER_FORMAT

# File lib/arx/query/validate.rb, line 109
def id?(id)
  return true if NEW_IDENTIFIER_FORMAT.match? id
  return true if OLD_IDENTIFIER_FORMAT.match?(id) && Arx::CATEGORIES.keys.include?(id.split('/').first)
  false
end
ids(ids) click to toggle source

Validates a list of arXiv paper identifiers.

@param ids [Array<String>] The identifiers to validate. @raise

[TypeError] If +ids+ is not an +Array+.
[TypeError] If any identifier is not a +String+.
[ArgumentError] If the identifier is invalid.
# File lib/arx/query/validate.rb, line 51
def ids(ids)
  raise TypeError.new("Expected `ids` to be an Array, got: #{ids.class}") unless ids.is_a? Array
  ids.each do |id|
    raise TypeError.new("Expected identifier to be a String, got: #{id.class} (#{id})") unless id.is_a? String
    raise ArgumentError.new("Malformed arXiv identifier: #{id}") unless id? id
  end
end
paging(start, max_results) click to toggle source

Validates the paging fields of the query string: start and max_results.

@param start [Integer] The start value to validate. @param max_results [Integer] The max_results value to validate. @raise

[TypeError] If the value of +start+ is not an +Integer+.
[TypeError] If the value of +max_results+ is not an +Integer+.
# File lib/arx/query/validate.rb, line 39
def paging(start, max_results)
  raise TypeError.new("Expected `start` to be an Integer, got: #{start.class}") unless start.is_a? Integer
  raise TypeError.new("Expected `max_results` to be an Integer, got: #{max_results.class}") unless max_results.is_a? Integer
end
sort_by(value, permitted:) click to toggle source

Validates the sortBy field of the query string.

@param value [Symbol] The value to validate. @param permitted [Array<Symbol>] Permitted values for the field. @raise

[TypeError] If the value is not a +Symbol+.
[ArgumentError] If the value is not permitted.
# File lib/arx/query/validate.rb, line 15
def sort_by(value, permitted:)
  raise TypeError.new("Expected `sort_by` to be a Symbol, got: #{value.class}") unless value.is_a? Symbol
  raise ArgumentError.new("Expected `sort_by` to be one of #{permitted}, got: #{value}") unless permitted.include? value
end
sort_order(value, permitted:) click to toggle source

Validates the sortOrder field of the query string.

@param value [Symbol] The value to validate. @param permitted [Array<Symbol>] Permitted values for the field. @raise

[TypeError] If the value is not a +Symbol+.
[ArgumentError] If the value is not permitted.
# File lib/arx/query/validate.rb, line 27
def sort_order(value, permitted:)
  raise TypeError.new("Expected `sort_order` to be a Symbol, got: #{value.class}") unless value.is_a? Symbol
  raise ArgumentError.new("Expected `sort_order` to be one of #{permitted}, got: #{value}") unless permitted.include? value
end
values(values) click to toggle source

Validates a list of values for the fields of the search query string.

@param values [Array<String>] The values to validate. @raise

[TypeError] If +values+ is not an +Array+.
[TypeError] If any value is not a +String+.
# File lib/arx/query/validate.rb, line 86
def values(values)
  raise TypeError.new("Expected `values` to be an Array, got: #{values.class}") unless values.is_a? Array
  values.each do |value|
    raise TypeError.new("Expected value to be a String, got: #{value.class} (#{value})") unless value.is_a? String
  end
end