Sha256: 9ca2d58032e1156af8e018149a0a3c79ee35fb2f6cc7765cdf0308758a50c064

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

require 'forwardable'
require 'null_logger'
require 'zendesk_api'

require 'gds_zendesk/users'

module GDSZendesk
  class Client
    extend Forwardable
    def_delegators :@zendesk_client, :ticket

    attr_accessor :config_options

    def initialize(config_options)
      @config_options = defaults.merge(config_options)
      @zendesk_client = build
    end

    def users
      Users.new(@zendesk_client)
    end

    def build
      check_that_username_and_password_are_provided

      ZendeskAPI::Client.new { |config|
        config.url = url
        config.username = username
        config.token = token if token
        config.password = password if password
        config.logger = logger
      }
    end

    protected
    def logger
      @config_options[:logger] || @config_options["logger"]
    end

    def check_that_username_and_password_are_provided
      raise ArgumentError, "Zendesk username not provided" if username.nil?
      raise ArgumentError, "Zendesk password or token not provided" if password.nil? && token.nil?
      raise ArgumentError, "Provide only one of token or password" unless password.nil? || token.nil?
    end

    def username
      @config_options[:username] || @config_options["username"]
    end

    def token
      @config_options[:token] || @config_options["token"]
    end

    def password
      @config_options[:password] || @config_options["password"]
    end

    def url
      @config_options[:url] || @config_options["url"]
    end

    def defaults
      {
          logger: NullLogger.instance,
          url: "https://govuk.zendesk.com/api/v2/"
      }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gds_zendesk-3.2.0 lib/gds_zendesk/client.rb