Module: JSS::Validate

Defined in:
lib/jss/validate.rb

Overview

A collection of methods for validating values. Mostly for ensuring the validity of data being set as attributes of APIObject subclass instances.

Some of these methods can take multiple input types, such as a String or an Array. All of them will either raise an exception if the value isn't valid, or will return a standardized form of the input (e.g. an Array, even if given a String)

Constant Summary collapse

MAC_ADDR_RE =

The regular expression that matches a valid MAC address.

/^[a-f0-9]{2}(:[a-f0-9]{2}){5}$/i

Class Method Summary collapse

Class Method Details

.boolean(bool, msg = nil) ⇒ Boolean

Confirm that the given value is a boolean value, accepting strings and symbols and returning real booleans as needed Accepts: true, false, 'true', 'false', :true, :false, 'yes', 'no', :yes, or :no (all Strings and Symbols are case insensitive)

TODO: use this throughout ruby-jss


111
112
113
114
115
116
117
# File 'lib/jss/validate.rb', line 111

def self.boolean(bool, msg = nil)
  msg ||= 'Value must be boolean true or false'
  return bool if JSS::TRUE_FALSE.include? bool
  return true if bool.to_s =~ /^(true|yes)$/i
  return false if bool.to_s =~ /^(false|no)$/i
  raise JSS::InvalidDataError, msg
end

.integer(val, msg = nil) ⇒ void

This method returns an undefined value.

Confirm that a value is an integer or a string representation of an integer. Return the integer, or raise an error

TODO: use this throughout ruby-jss


130
131
132
133
134
135
# File 'lib/jss/validate.rb', line 130

def self.integer(val, msg = nil)
  msg ||= 'Value must be an integer'
  val = val.to_i if val.is_a?(String) && val.jss_integer?
  raise JSS::InvalidDataError, msg unless val.is_a? Integer
  val
end

.ip_address(val, msg = nil) ⇒ String

Validate the format and content of an IPv4 address


63
64
65
66
67
68
69
70
71
# File 'lib/jss/validate.rb', line 63

def self.ip_address(val, msg = nil)
  msg ||= "Not a valid IPv4 address: '#{val}'"
  ok = true
  parts = val.strip.split '.'
  ok = false unless parts.size == 4
  parts.each { |p| ok = false unless p.jss_integer? && p.to_i < 256 && p.to_i >= 0 }
  raise JSS::InvalidDataError, msg unless ok
  val
end

.mac_address(val, msg = nil) ⇒ String

Validate the format and content of a MAC address


49
50
51
52
53
# File 'lib/jss/validate.rb', line 49

def self.mac_address(val, msg = nil)
  msg ||= "Not a valid MAC address: '#{val}'"
  raise JSS::InvalidDataError, msg unless val =~ MAC_ADDR_RE
  val
end

.non_empty_string(val, msg = nil) ⇒ String

validate that the given value is a non-empty string


145
146
147
148
149
# File 'lib/jss/validate.rb', line 145

def self.non_empty_string(val, msg = nil)
  msg ||= 'value must be a non-empty String'
  raise JSS::InvalidDataError, msg unless val.is_a?(String) && !val.empty?
  val
end

.unique_identifier(klass, identifier, val, msg = nil, api: JSS.api) ⇒ Object

Validate that a value doesn't already exist for a given identifier of a given class

e.g. when klass = JSS::Computer, identifier = :name, and val = 'foo' will raise an error when a computer named 'foo' exists

Otherwise returns val.


92
93
94
95
96
# File 'lib/jss/validate.rb', line 92

def self.unique_identifier(klass, identifier, val, msg = nil, api: JSS.api)
  msg ||= "A #{klass} already exists with #{identifier} '#{val}'"
  return val unless klass.all(:refresh, api: api).map { |i| i[identifier] }.include? val
  raise JSS::AlreadyExistsError, msg
end