# frozen_string_literal: true module Supersaas class BaseApi attr_accessor :client INTEGER_REGEX = /\A[0-9]+\Z/.freeze DATETIME_REGEX = /\A\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}\Z/.freeze PROMOTION_REGEX = /\A[0-9a-zA-Z]+\Z/.freeze def initialize(client) @client = client end protected def validate_id(value) if value.is_a?(Integer) value elsif value.is_a?(String) && value =~ INTEGER_REGEX value.to_i else raise Supersaas::Exception, "Invalid id parameter: #{value}. Provide a integer value." end end def validate_user(value) return if value.nil? unless value.is_a?(Integer) || value.is_a?(String) raise Supersaas::Exception, "Invalid user id parameter: #{value}." end value end def validate_number(value) validate_id(value) end def validate_name(value) unless value.nil? || (value.is_a?(String) && value.size) raise Supersaas::Exception, 'Required parameter name is missing.' end value end def validate_present(value) raise Supersaas::Exception, 'Required parameter is missing.' unless value value end def validate_notfound(value) unless value.is_a?(String) && %w[error ignore].include?(value) raise Supersaas::Exception, "Required parameter notfound can only be 'error' or 'ignore'." end value end def validate_promotion(value) unless value.is_a?(String) && value.size && value =~ PROMOTION_REGEX raise Supersaas::Exception, 'Required parameter promotional code not found or contains other than alphanumeric characters.' end value end def validate_duplicate(value) unless value.is_a?(String) && %w[ignore raise].include?(value) raise Supersaas::Exception, "Required parameter duplicate can only be 'ignore'." end value end def validate_datetime(value) if value.is_a?(String) && value =~ DATETIME_REGEX value elsif value.is_a?(Time) || value.is_a?(DateTime) value.strftime('%Y-%m-%d %H:%M:%S') else raise ArgumentError end rescue ArgumentError raise Supersaas::Exception, "Invalid datetime parameter: #{value}. Provide a Time object or formatted 'YYYY-DD-MM HH:MM:SS' string." end def validate_options(value, options) unless options.include?(value) raise Supersaas::Exception, "Invalid option parameter: #{value}. Must be one of #{options.join(', ')}." end value end end end