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
-
.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).
-
.integer(val, msg = nil) ⇒ void
Confirm that a value is an integer or a string representation of an integer.
-
.ip_address(val, msg = nil) ⇒ String
Validate the format and content of an IPv4 address.
-
.mac_address(val, msg = nil) ⇒ String
Validate the format and content of a MAC address.
-
.non_empty_string(val, msg = nil) ⇒ String
validate that the given value is a non-empty string.
-
.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.
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 |