dwradcliffe/groupme

View on GitHub
lib/groupme/client.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'groupme/groups'
require 'groupme/members'
require 'groupme/bots'
require 'groupme/messages'
require 'groupme/users'
require 'groupme/likes'
require 'faraday_middleware'

module GroupMe
  class Client
    def initialize(options = {})
      @token = options[:token].to_s
      fail ArgumentError, ":token can't be blank" if @token.empty?
    end

    include GroupMe::Groups
    include GroupMe::Members
    include GroupMe::Bots
    include GroupMe::Messages
    include GroupMe::Users
    include GroupMe::Likes

    private

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

    def post(path, data = {})
      request(:post, path, data)
    end

    def request(method, path, data = {})
      res = connection.send(method, "v3/#{path}", data)
      if res.success? && !res.body.empty? && res.body != ' '
        res.body.response
      else
        res
      end
    end

    # Returns a Faraday::Connection object
    #
    # @return [Faraday::Connection]
    def connection
      @connection ||= Faraday.new 'https://api.groupme.com/' do |f|
        f.request :json
        f.headers[:user_agent] = GroupMe::USER_AGENT
        f.headers['X-Access-Token'] = @token

        # f.response :logger
        f.response :mashify
        f.response :json, :content_type => /\bjson$/

        f.adapter Faraday.default_adapter
      end
    end
  end
end