Project

distant

0.0
No commit activity in last 3 years
No release in over 3 years
Distant API Client
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

Distant Client

Why?

Active-Rest-Client is dead.

FlexiRest doesn't work for me, and I'm too impatient to step painstakingly slow through Faraday code to figure out why.

  • Distant uses HTTParty under the hood.
  • If you need to set special headers, it's easy.
  • If you need to disable ssl certificate authentication, it's easy.
  • If you need to enable debugging information, it's easy.
  • If you need to change the data coming to or from your API, it's easy.

What Not To Do:

DON'T

  • Think you can expose database functionality as a REST API. You will be disappointed by performance every time.
  • Use this when another client for the API you want to consume already exists.

Installation

In your Gemfile

gem 'distant'

Usage

Distant.configure do |config|
  config.base_uri = 'https://www.example.com/api/v0'
  config.set_authentication_headers_with do |body|
    {'X-Foo-Api-Key' => ENV['FOO_API_KEY']}
  end
end

class Organization < Distant::Base
  attr_accessor :id, :name
  get :all, '/organizations'
  get :find, '/organizations/:id'
  has_many :networks, '/organizations/:id/networks'
  translate do
    from_hash do |hash|
      recursive_underscore(hash)
    end
    to_hash do |obj|
      {
        id: obj.id,
        fooId: obj.foo_id,
      }
    end
  end
end

class Network < Distant::Base
  attr_accessor :id, :organization_id, :name
  belongs_to :organization
  get :find, '/networks/:id'
  has_many :clients, '/networks/:id/clients'
end

class Client < Distant::Base
  attr_accessor :id, :network_id, :name
  belongs_to :network
  get :find, '/clients/:id'
end

Organization.all.each do |org|
  org.networks.each do |network|
    network.clients.each do |client|
      # DO THE THING
    end
  end
end

See examples directory for examples of usage.

RUNNING THE TESTS

Within Docker

docker build --no-cache -t distant/base . && \
  docker run -t -v $(pwd):/opt/distant distant/base bundle exec rspec

On your host OS

NOTE: Requires Ruby 2.3.0+

bundle
bundle exec rspec