lib/mrkt.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
require 'mrkt/version'
require 'mrkt/errors'

require 'mrkt/concerns/connection'
require 'mrkt/concerns/authentication'
require 'mrkt/concerns/crud_helpers'
require 'mrkt/concerns/crud_activities'
require 'mrkt/concerns/crud_campaigns'
require 'mrkt/concerns/crud_leads'
require 'mrkt/concerns/crud_lists'
require 'mrkt/concerns/import_leads'
require 'mrkt/concerns/import_custom_objects'
require 'mrkt/concerns/crud_custom_objects'
require 'mrkt/concerns/crud_custom_activities'
require 'mrkt/concerns/crud_programs'
require 'mrkt/concerns/crud_program_members'
require 'mrkt/concerns/crud_asset_static_lists'
require 'mrkt/concerns/crud_asset_folders'

module Mrkt
  class Client
    include Connection
    include Authentication
    include CrudHelpers
    include CrudActivities
    include CrudCampaigns
    include CrudLeads
    include CrudLists
    include ImportLeads
    include ImportCustomObjects
    include CrudCustomObjects
    include CrudCustomActivities
    include CrudPrograms
    include CrudProgramMembers
    include CrudAssetStaticLists
    include CrudAssetFolders

    attr_accessor :debug

    def initialize(options = {})
      @host = options.fetch(:host)

      @client_id = options.fetch(:client_id)
      @client_secret = options.fetch(:client_secret)
      @partner_id = options[:partner_id]

      @retry_authentication = options.fetch(:retry_authentication, false)
      @retry_authentication_count = options.fetch(:retry_authentication_count, 3).to_i
      @retry_authentication_wait_seconds = options.fetch(:retry_authentication_wait_seconds, 0).to_i

      @debug = options[:debug]

      @logger = options[:logger]
      @log_options = options[:log_options]

      @options = options
    end

    def merge_params(params, optional)
      params.merge(optional.keep_if { |_key, value| value })
    end

    %i[get post delete].each do |http_method|
      define_method(http_method) do |path, params = {}, optional = {}, &block|
        authenticate!

        payload = merge_params(params, optional)

        resp = connection.send(http_method, path, payload) do |req|
          add_authorization(req)
          block&.call(req)
        end

        resp.body
      end
    end
  end
end