Sha256: adafe7fdc645fa4f0c9884cb0e35cb321a09885cbbe4201cd2ffb5087647fda7

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 KB

Contents

require 'faraday'
require 'json'

require 'mailerlite/middleware/raise_error'
require 'mailerlite/middleware/underscore_keys'

module MailerLite
  class Connection
    attr_reader :client

    def initialize(client)
      @client = client
    end

    def get(path, options = {})
      request(:get, path, options).body
    end

    def delete(path, options = {})
      request(:delete, path, options).body
    end

    def post(path, options = {})
      options['apiKey'] = client.config.api_key

      response = connection.post do |req|
        req.url(path)
        req.headers['Content-Type'] = 'application/json'
        req.body = options.to_json
      end

      response.body
    end

    private

    def request(method, path, options = {})
      options['apiKey'] = client.config.api_key

      response = connection.send(method) do |request|
        request.url(path, options)
      end

      response
    end

    def connection
      conn_opts = {
        headers: { user_agent: client.config.user_agent },
        url: client.config.url,
        builder: middleware
      }

      Faraday.new(conn_opts)
    end

    def middleware
      @middleware ||= Faraday::RackBuilder.new do |builder|
        builder.request :json

        builder.use FaradayMiddleware::FollowRedirects
        builder.use FaradayMiddleware::Mashify
        builder.use MailerLite::Middleware::UnderscoreKeys
        builder.use FaradayMiddleware::ParseJson
        builder.use MailerLite::Middleware::RaiseError

        builder.adapter Faraday.default_adapter
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mailerlite-0.2.0 lib/mailerlite/connection.rb
mailerlite-0.1.0 lib/mailerlite/connection.rb