Files

59 lines
2.3 KiB
Ruby

# frozen_string_literal: true
module Fiken
# The entry point. Holds the connection and exposes the resource accessors.
#
# client = Fiken::Client.new(token: ENV["FIKEN_TOKEN"])
# client.user
# client.companies.list
# client.contacts("my-company-slug").find(123)
# client.invoices("my-company-slug").drafts.create(invoice_attrs)
class Client
attr_reader :connection
def initialize(token: nil, access_token: nil, **options)
bearer = token || access_token
raise ArgumentError, "provide :token or :access_token" if bearer.nil? || bearer.empty?
@connection = Connection.new(token: bearer, **options)
end
# GET /user
def user
Object.new(connection.get("/user").body)
end
# GET /companies, GET /companies/{slug}
def companies
Resources::Companies.new(self)
end
# Convenience: fetch a single company by slug.
def company(slug)
companies.find(slug)
end
# Company-scoped resources. Each takes the company slug.
def accounts(slug) = Resources::Accounts.new(self, slug)
def account_balances(slug) = Resources::AccountBalances.new(self, slug)
def activities(slug) = Resources::Activities.new(self, slug)
def bank_accounts(slug) = Resources::BankAccounts.new(self, slug)
def bank_balances(slug) = Resources::BankBalances.new(self, slug)
def contacts(slug) = Resources::Contacts.new(self, slug)
def credit_notes(slug) = Resources::CreditNotes.new(self, slug)
def groups(slug) = Resources::Groups.new(self, slug)
def inbox(slug) = Resources::Inbox.new(self, slug)
def invoices(slug) = Resources::Invoices.new(self, slug)
def journal_entries(slug) = Resources::JournalEntries.new(self, slug)
def offers(slug) = Resources::Offers.new(self, slug)
def order_confirmations(slug) = Resources::OrderConfirmations.new(self, slug)
def products(slug) = Resources::Products.new(self, slug)
def projects(slug) = Resources::Projects.new(self, slug)
def purchases(slug) = Resources::Purchases.new(self, slug)
def sales(slug) = Resources::Sales.new(self, slug)
def time_entries(slug) = Resources::TimeEntries.new(self, slug)
def time_users(slug) = Resources::TimeUsers.new(self, slug)
def transactions(slug) = Resources::Transactions.new(self, slug)
end
end