Module: Arx::Validate

Defined in:
lib/arx/query/validate.rb

Overview

Validations for arXiv search query fields and identifier schemes.

Class Method Summary collapse

Class Method Details

.categories(categories) ⇒ Object

Note:

This is only called after values, so there is no need to check types.

Validates a list of arXiv categories.

Parameters:

  • categories (Array<String>)

    The categories to validate.

Raises:

  • (ArgumentError)

    If any category is unrecognized (not a valid arXiv category).

See Also:



99
100
101
102
103
# 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:) ⇒ Object

Validates a logical connective.

Parameters:

  • value (Symbol)

    The value to validate.

  • permitted (Array<Symbol>)

    Permitted values for the field.

Raises:

  • TypeError

    If the value is not a Symbol.

    ArgumentError

    If the value is not permitted.



75
76
77
78
# 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) ⇒ Object

Validates the exact parameter.

Parameters:

  • value (Boolean)

    The value to validate.

Raises:

  • TypeError

    If the value is not a boolean (TrueClass or FalseClass).



64
65
66
# 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) ⇒ Boolean

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

Returns:

  • (Boolean)

See Also:



109
110
111
112
113
# 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) ⇒ Object

Validates a list of arXiv paper identifiers.

Parameters:

  • ids (Array<String>)

    The identifiers to validate.

Raises:

  • TypeError

    If ids is not an Array.

    TypeError

    If any identifier is not a String.

    ArgumentError

    If the identifier is invalid.



51
52
53
54
55
56
57
# 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) ⇒ Object

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

Parameters:

  • start (Integer)

    The start value to validate.

  • max_results (Integer)

    The max_results value to validate.

Raises:

  • TypeError

    If the value of start is not an Integer.

    TypeError

    If the value of max_results is not an Integer.



39
40
41
42
# 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:) ⇒ Object

Validates the sortBy field of the query string.

Parameters:

  • value (Symbol)

    The value to validate.

  • permitted (Array<Symbol>)

    Permitted values for the field.

Raises:

  • TypeError

    If the value is not a Symbol.

    ArgumentError

    If the value is not permitted.



15
16
17
18
# 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:) ⇒ Object

Validates the sortOrder field of the query string.

Parameters:

  • value (Symbol)

    The value to validate.

  • permitted (Array<Symbol>)

    Permitted values for the field.

Raises:

  • TypeError

    If the value is not a Symbol.

    ArgumentError

    If the value is not permitted.



27
28
29
30
# 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) ⇒ Object

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

Parameters:

  • values (Array<String>)

    The values to validate.

Raises:

  • TypeError

    If values is not an Array.

    TypeError

    If any value is not a String.



86
87
88
89
90
91
# 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