Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion lib/freeagent.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ module FreeAgent
require_relative 'freeagent/client'
require_relative 'freeagent/errors'

require_relative 'freeagent/collection'
require_relative 'freeagent/resource'
require_relative 'freeagent/user'
require_relative 'freeagent/company'
require_relative 'freeagent/timeline_item'
require_relative 'freeagent/attachment'

require_relative 'freeagent/category'
require_relative 'freeagent/contact'
require_relative 'freeagent/project'
require_relative 'freeagent/task'
Expand All @@ -19,6 +20,8 @@ module FreeAgent
require_relative 'freeagent/estimate'
require_relative 'freeagent/expense'
require_relative 'freeagent/bank_transaction'
require_relative 'freeagent/bank_transaction_explanation'

class << self
attr_accessor :environment
attr_accessor :debug
Expand Down
17 changes: 17 additions & 0 deletions lib/freeagent/bank_transaction_explanation.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
module FreeAgent
class BankTransactionExplanation < Resource
resource :bank_transaction_explanation

resource_methods :default
attr_accessor :bank_account, :bank_transaction, :manual_sales_tax_amount, :sales_tax_rate, :description,
:gross_value, :foreign_currency_value, :rebill_type, :rebill_factor, :category, :paid_invoice,
:paid_bill, :paid_user, :transfer_bank_account, :asset_life_years, :attachment

date_accessor :dated_on

def self.find_all_by_bank_account(bank_account, options = {})
options.merge!(:bank_account => bank_account)
BankTransactionExplanation.filter(options)
end
end
end
23 changes: 23 additions & 0 deletions lib/freeagent/category.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module FreeAgent
class Category < Resource
resource :category
endpoint[:plural] = :categories

resource_methods :find

attr_accessor :url, :description, :nominal_code, :allowable_for_tax, :tax_reporting_name, :auto_sales_tax_rate

def self.all
response = FreeAgent.client.get("#{endpoint[:plural]}")
response.values.flatten.collect { |r| self.new(r) }
end

def self.find(id)
response = FreeAgent.client.get("#{endpoint[:plural]}/#{id}")
self.new(response.values.first)
rescue FreeAgent::ApiError => error
raise error if FreeAgent.debug
nil
end
end
end
18 changes: 14 additions & 4 deletions lib/freeagent/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,21 +59,31 @@ def access_token=(token)
end

def get(path, params={})
request(:get, "#{Client.site}#{path}", :params => params).parsed
parse(request(:get, "#{Client.site}#{path}", :params => params))
end

def post(path, data={})
request(:post, "#{Client.site}#{path}", :data => data).parsed
parse(request(:post, "#{Client.site}#{path}", :data => data))
end

def put(path, data={})
request(:put, "#{Client.site}#{path}", :data => data).parsed
parse(request(:put, "#{Client.site}#{path}", :data => data))
end

def delete(path, data={})
request(:delete, "#{Client.site}#{path}", :data => data).parsed
parse(request(:delete, "#{Client.site}#{path}", :data => data))
end

def parse(request)
request.parsed.tap do |hash|
if link_header = request.headers['Link']
link_header.scan(/<(https:.*?)>; rel='(prev|next|first|last)'/).each do |(url, rel)|
hash[rel] = url
end
end
end
end

private

def request(method, path, options = {})
Expand Down
49 changes: 49 additions & 0 deletions lib/freeagent/collection.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
module FreeAgent
class Collection < Array
def initialize(response, resource)
super(response[resource.endpoint[:plural]].collect { |r| resource.new(r) })
@resource = resource
@next_page_url = response['next']
@prev_page_url = response['prev']
@first_page_url = response['first']
@last_page_url = response['last']
end

def next_page?
@next_page_url
end

def prev_page?
@prev_page_url
end

def first_page?
@first_page_url
end

def last_page?
@last_page_url
end

def next_page
fetch_page(@next_page_url)
end

def prev_page
fetch_page(@prev_page_url)
end

def first_page
fetch_page(@first_page_url)
end

def last_page
fetch_page(@last_page_url)
end

def fetch_page(url)
uri = URI.parse(url).request_uri.gsub(/^\/v2/, '')
Collection.new(FreeAgent.client.get(uri), @resource)
end
end
end
3 changes: 1 addition & 2 deletions lib/freeagent/resource.rb
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,7 @@ def self.define_all

def self.define_filter
self.define_singleton_method(:filter) do |params|
response = FreeAgent.client.get("#{endpoint[:plural]}/", params)
response[endpoint[:plural]].collect{ |r| self.new(r) }
Collection.new(FreeAgent.client.get("#{endpoint[:plural]}/", params), self)
end
end

Expand Down