module Legion module Settings module Rules # Check that a value is a hash. # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_a_hash(value) value.is_a?(Hash) end alias is_a_hash? must_be_a_hash # Check that a value is a hash, if set (not nil). # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_a_hash_if_set(value) value.nil? ? true : must_be_a_hash(value) end # Check that a value is an array. # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_an_array(value) value.is_a?(Array) end alias is_an_array? must_be_an_array # Check that a value is an array, if set (not nil). # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_an_array_if_set(value) value.nil? ? true : must_be_an_array(value) end # Check that a value is a string. # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_a_string(value) value.is_a?(String) end alias is_a_string? must_be_a_string # Check that a value is a string, if set (not nil). # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_a_string_if_set(value) value.nil? ? true : must_be_a_string(value) end # Check that a value is an integer. # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_an_integer(value) value.is_a?(Integer) end alias is_an_integer? must_be_an_integer # Check that a value is an integer, if set (not nil). # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_an_integer_if_set(value) value.nil? ? true : must_be_an_integer(value) end # Check that a value is numeric. # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_a_numeric(value) value.is_a?(Numeric) end # Check that a value is numeric, if set (not nil). # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_a_numeric_if_set(value) value.nil? ? true : must_be_a_numeric(value) end # Check that a value matches a regular expression. # # @param regex [Regexp] pattern to compare with value. # @param value [Object] to check if matches pattern. # @return [TrueClass, FalseClass] def must_match_regex(regex, value) (value =~ regex).zero? end # Check if a value is boolean. # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_boolean(value) !value.nil? end # Check if a value is boolean, if set (no nil). # # @param value [Object] to check. # @return [TrueClass, FalseClass] def must_be_boolean_if_set(value) value.nil? ? true : must_be_boolean(value) end # Check that value items are all strings and not empty. # # @param value [Array] with items to check. # @param regex [Regexp] to validate string items with. # @return [TrueClass, FalseClass] def items_must_be_strings(value, regex = nil) value.all? do |item| item.is_a?(String) && !item.empty? && (regex.nil? || item =~ regex) end end # Check if either of the values are set (not nil). # # @param values [Array] to check if not nil. # @return [TrueClass, FalseClass] def either_are_set?(*values) values.any? do |value| !value.nil? end end # Check if values are valid times (can be parsed). # # @param values [Array] to check if valid time. # @return [TrueClass, FalseClass] def must_be_time(*values) values.all? do |value| begin Time.parse(value) rescue StandardError false end end end # Check if values are allowed. # # @param allowed [Array] allowed values. # @param values [Array] to check if allowed. # @return [TrueClass, FalseClass] def must_be_either(allowed, *values) values.flatten.all? do |value| allowed.include?(value) end end # Check if values are allowed, if set (not nil). # # @param allowed [Array] allowed values. # @param values [Array] to check if allowed. # @return [TrueClass, FalseClass] def must_be_either_if_set(allowed, *values) values[0].nil? ? true : must_be_either(allowed, values) end end end end