module Hawkei ## # == Hawkei \Config # # Represent the Hawkei configuration for the API class Config DEFAULT_OBFUSCATED_FIELDS = %w[ password password_confirmation secret secret_token authenticity_token token api_key access_token credit_card_number cvv ccv ].freeze ## # @return [String] API account token attr_accessor :api_key ## # @return [String] API space name attr_accessor :space_name ## # @return [String] API environment name attr_accessor :environment_name ## # @return [String] API host attr_accessor :api_host ## # @return [String] API version attr_accessor :api_version ## # @return [String] proxy url attr_accessor :proxy_url ## # @return [Boolean] http secure attr_accessor :http_secure ## # @return [Boolean] service is enable attr_accessor :enabled ## # @return [Array[String]] fields to obfuscate attr_accessor :obfuscated_fields ## # @return [Hash] metadata to be attach to the payload attr_accessor :metadata ## # @return [Boolean] enable the logger attr_accessor :log ## # @return [Logger] logger attr_accessor :logger ## # @return [String] domain attr_accessor :domain ## # @param [Hash{Symbol=>Object}] # Initialize and validate the configuration def initialize(options = {}) self.api_key = options[:api_key] self.space_name = options[:space_name] self.environment_name = options[:environment_name] self.api_host = options[:api_host] || 'api.hawkei.io' self.api_version = options[:api_version] || 'v1' self.proxy_url = options[:proxy_url] self.http_secure = options[:http_secure] || true self.enabled = options[:enabled] || true self.obfuscated_fields = options[:obfuscated_fields] || [] self.metadata = options[:metadata] self.log = options[:log] || true self.logger = FormatedLogger.build(options[:logger]) self.domain = options[:domain] end ## # validate the configuration # Raise when configuration are not valid # @return [Boolean] true def valid! format! %i[api_key space_name environment_name api_host api_version].each do |field| validate_presence(field) end true end private ## # Format configuration fields # # * Set obfuscated_fields to string # def format! self.obfuscated_fields = (obfuscated_fields.map(&:to_s) + DEFAULT_OBFUSCATED_FIELDS).uniq end def validate_presence(field) raise Hawkei::ConfigurationError, "#{field} can't be blank" if send(field).nil? || send(field).empty? end end end