# 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