Sha256: d9dd7af899399700e624921eb499c21a852f05d68e62b7488310023af87ab59c

Contents?: true

Size: 1.07 KB

Versions: 3

Compression:

Stored size: 1.07 KB

Contents

module Klaviyo
  API_ENDPOINT = 'https://a.klaviyo.com'

  class Client
    attr_reader :api_key, :conn, :token
    def initialize(api_key, token)
      @api_key = api_key
      @token = token
      @conn = Faraday.new(
        url: API_ENDPOINT,
        ssl: { ca_path: Klaviyo::DEFAULT_CA_BUNDLE_PATH }
      ) do |b|
        b.headers['Accept'] = 'application/json'
        b.request  :url_encoded
        b.response :logger
        b.response :json, content_type: 'application/json'
        b.adapter  Faraday.default_adapter
      end
    end

    def build_params(params = {})
      options = params.merge(
        api_key: api_key,
        token: token
      )

      {
        data: Base64.encode64(JSON.generate(options)).delete("\n")
      }
    end

    def invoke(resource, method, options = {})
      constantize("klaviyo/#{resource}").send(
        method,
        options.merge(client: self)
      )
    end

    private

    def constantize(class_name)
      Object.module_eval(class_name.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase })
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
parallel588-klaviyo-0.7.0 lib/klaviyo/client.rb
parallel588-klaviyo-0.6.0 lib/klaviyo/client.rb
parallel588-klaviyo-0.5.0 lib/klaviyo/client.rb