xeroizer 2.16.5 → 2.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -27
  3. data/lib/class_level_inheritable_attributes.rb +3 -0
  4. data/lib/xeroizer.rb +13 -1
  5. data/lib/xeroizer/exceptions.rb +1 -1
  6. data/lib/xeroizer/generic_application.rb +13 -1
  7. data/lib/xeroizer/http.rb +128 -120
  8. data/lib/xeroizer/models/account.rb +1 -0
  9. data/lib/xeroizer/models/address.rb +18 -9
  10. data/lib/xeroizer/models/attachment.rb +1 -1
  11. data/lib/xeroizer/models/balances.rb +1 -0
  12. data/lib/xeroizer/models/bank_transaction.rb +2 -2
  13. data/lib/xeroizer/models/bank_transfer.rb +28 -0
  14. data/lib/xeroizer/models/contact.rb +11 -4
  15. data/lib/xeroizer/models/credit_note.rb +9 -4
  16. data/lib/xeroizer/models/from_bank_account.rb +12 -0
  17. data/lib/xeroizer/models/invoice.rb +11 -3
  18. data/lib/xeroizer/models/invoice_reminder.rb +19 -0
  19. data/lib/xeroizer/models/line_item.rb +21 -9
  20. data/lib/xeroizer/models/manual_journal.rb +6 -0
  21. data/lib/xeroizer/models/organisation.rb +4 -0
  22. data/lib/xeroizer/models/overpayment.rb +40 -0
  23. data/lib/xeroizer/models/payroll/bank_account.rb +23 -0
  24. data/lib/xeroizer/models/payroll/employee.rb +45 -0
  25. data/lib/xeroizer/models/payroll/home_address.rb +24 -0
  26. data/lib/xeroizer/models/prepayment.rb +1 -0
  27. data/lib/xeroizer/models/tax_rate.rb +5 -4
  28. data/lib/xeroizer/models/to_bank_account.rb +12 -0
  29. data/lib/xeroizer/oauth.rb +8 -8
  30. data/lib/xeroizer/partner_application.rb +4 -8
  31. data/lib/xeroizer/payroll_application.rb +28 -0
  32. data/lib/xeroizer/private_application.rb +2 -4
  33. data/lib/xeroizer/record/base_model.rb +137 -122
  34. data/lib/xeroizer/record/base_model_http_proxy.rb +1 -1
  35. data/lib/xeroizer/record/payroll_base.rb +25 -0
  36. data/lib/xeroizer/record/payroll_base_model.rb +29 -0
  37. data/lib/xeroizer/record/record_association_helper.rb +13 -14
  38. data/lib/xeroizer/record/validation_helper.rb +1 -1
  39. data/lib/xeroizer/record/xml_helper.rb +10 -8
  40. data/lib/xeroizer/report/aged_receivables_by_contact.rb +0 -1
  41. data/lib/xeroizer/report/base.rb +0 -1
  42. data/lib/xeroizer/report/factory.rb +3 -3
  43. data/lib/xeroizer/report/row/header.rb +4 -4
  44. data/lib/xeroizer/report/row/xml_helper.rb +2 -2
  45. data/lib/xeroizer/version.rb +1 -1
  46. data/test/acceptance/about_creating_prepayment_test.rb +46 -0
  47. data/test/acceptance/about_fetching_bank_transactions_test.rb +21 -21
  48. data/test/acceptance/acceptance_test.rb +4 -4
  49. data/test/acceptance/bank_transaction_reference_data.rb +3 -1
  50. data/test/acceptance/bank_transfer_test.rb +26 -0
  51. data/test/test_helper.rb +6 -4
  52. data/test/unit/models/address_test.rb +92 -0
  53. data/test/unit/models/bank_transaction_validation_test.rb +1 -1
  54. data/test/unit/models/contact_test.rb +20 -4
  55. data/test/unit/models/line_item_test.rb +20 -6
  56. data/test/unit/models/tax_rate_test.rb +52 -1
  57. data/test/unit/record/base_model_test.rb +1 -1
  58. data/test/unit/record/base_test.rb +9 -6
  59. data/test/unit/record/model_definition_test.rb +2 -2
  60. data/test/unit/report_test.rb +19 -21
  61. metadata +20 -3
data/test/test_helper.rb CHANGED
@@ -19,12 +19,14 @@ module TestHelper
19
19
  # rake test
20
20
  # (this probably won't work under OAuth?)
21
21
  #
22
+
23
+ $VERBOSE=nil
22
24
 
23
25
  STUB_XERO_CALLS = ENV["STUB_XERO_CALLS"].nil? ? true : (ENV["STUB_XERO_CALLS"] == "true") unless defined? STUB_XERO_CALLS
24
26
 
25
27
  CONSUMER_KEY = ENV["CONSUMER_KEY"] || "fake_key" unless defined?(CONSUMER_KEY)
26
28
  CONSUMER_SECRET = ENV["CONSUMER_SECRET"] || "fake_secret" unless defined?(CONSUMER_SECRET)
27
- PRIVATE_KEY_PATH = ENV["PRIVATE_KEY_PATH"] || "fake_key" unless defined?(PRIVATE_KEY_PATH)
29
+ KEY_FILE = ENV["KEY_FILE"] || "fake_key" unless defined?(KEY_FILE)
28
30
 
29
31
  # Helper constant for checking regex
30
32
  GUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/ unless defined?(GUID_REGEX)
@@ -46,9 +48,9 @@ module TestHelper
46
48
  end
47
49
 
48
50
  def mock_api(model_name)
49
- @client.stubs(:http_get).with {|client, url, params| url =~ /#{model_name}$/ }.returns(get_record_xml("#{model_name.underscore.pluralize}".to_sym))
50
- @client.send("#{model_name.singularize}".to_sym).all.each do | record |
51
- @client.stubs(:http_get).with {|client, url, params| url =~ /#{model_name}\/#{record.id}$/ }.returns(get_record_xml("#{model_name.underscore.singularize}".to_sym, record.id))
51
+ @client.stubs(:http_get).with {|client, url, params| url =~ /#{model_name}$/ }.returns(get_record_xml(model_name.underscore.pluralize.to_s.to_sym))
52
+ @client.send(model_name.singularize.to_s.to_sym).all.each do | record |
53
+ @client.stubs(:http_get).with {|client, url, params| url =~ /#{model_name}\/#{record.id}$/ }.returns(get_record_xml(model_name.underscore.singularize.to_s.to_sym, record.id))
52
54
  end
53
55
  end
54
56
 
@@ -0,0 +1,92 @@
1
+ require 'test_helper'
2
+
3
+ class AddressTest < Test::Unit::TestCase
4
+ include TestHelper
5
+
6
+ def setup
7
+ @client = Xeroizer::PublicApplication.new(CONSUMER_KEY, CONSUMER_SECRET)
8
+ @contact = @client.Contact.build
9
+ end
10
+
11
+ def build_valid_address
12
+ @contact.add_address({
13
+ :type => "DEFAULT",
14
+ :address_line1 => "Baker street",
15
+ :address_line2 => "221",
16
+ :address_line3 => "Appartment: B",
17
+ :address_line4 => "abcdefgh",
18
+ :city => "London",
19
+ :region => "Marylebone",
20
+ :postal_code => "NW1 6XE",
21
+ :country => "UK",
22
+ :attention_to => "Mr Sherlock Holmes"
23
+ })
24
+ end
25
+
26
+ def generate_random_string(size)
27
+ charset = %w{A C D E F G H J K M N P Q R T V W X Y Z}
28
+ (0...size).map{ charset.to_a[rand(charset.size)] }.join
29
+ end
30
+
31
+ context "validators" do
32
+
33
+ should "allow valid address with valid attributes" do
34
+ address = build_valid_address
35
+ assert_equal(true, address.valid?)
36
+ end
37
+
38
+ should "not allow address_line1 to be longer than 500 characters" do
39
+ address = build_valid_address
40
+ address.line1 = generate_random_string(501)
41
+ assert_equal(false, address.valid?)
42
+ end
43
+
44
+ should "not allow address_line2 to be longer than 500 characters" do
45
+ address = build_valid_address
46
+ address.line2 = generate_random_string(501)
47
+ assert_equal(false, address.valid?)
48
+ end
49
+ should "not allow address_line3 to be longer than 500 characters" do
50
+ address = build_valid_address
51
+ address.line3 = generate_random_string(501)
52
+ assert_equal(false, address.valid?)
53
+ end
54
+
55
+ should "not allow address_line4 to be longer than 500 characters" do
56
+ address = build_valid_address
57
+ address.line4 = generate_random_string(501)
58
+ assert_equal(false, address.valid?)
59
+ end
60
+
61
+
62
+ should "not allow city to be longer than 255 characters" do
63
+ address = build_valid_address
64
+ address.city = generate_random_string(256)
65
+ assert_equal(false, address.valid?)
66
+ end
67
+
68
+ should "not allow region to be longer than 255 characters" do
69
+ address = build_valid_address
70
+ address.region = generate_random_string(256)
71
+ assert_equal(false, address.valid?)
72
+ end
73
+
74
+ should "not allow postal_code to be longer than 50 characters" do
75
+ address = build_valid_address
76
+ address.postal_code = generate_random_string(51)
77
+ assert_equal(false, address.valid?)
78
+ end
79
+
80
+ should "not allow country to be longer than 50 characters" do
81
+ address = build_valid_address
82
+ address.country = generate_random_string(51)
83
+ assert_equal(false, address.valid?)
84
+ end
85
+
86
+ should "not allow attention_to to be longer than 255 characters" do
87
+ address = build_valid_address
88
+ address.attention_to = generate_random_string(256)
89
+ assert_equal(false, address.valid?)
90
+ end
91
+ end
92
+ end
@@ -8,7 +8,7 @@ class BankTransactionValidationTest < Test::Unit::TestCase
8
8
 
9
9
  assert false == instance.valid?, "Expected invalid because of invalid type"
10
10
 
11
- expected_error = "Invalid type. Expected either SPEND, RECEIVE, RECEIVE-PREPAYMENT or RECEIVE-OVERPAYMENT."
11
+ expected_error = "Invalid type. Expected one of https://developer.xero.com/documentation/api/types#BankTransactionTypes"
12
12
 
13
13
  assert_equal expected_error, instance.errors_for(:type).first, "Expected an error about type"
14
14
 
@@ -20,6 +20,20 @@ class ContactTest < Test::Unit::TestCase
20
20
  assert_equal(true, contact.valid?)
21
21
  assert_equal(0, contact.errors.size)
22
22
  end
23
+
24
+ should "not allow invalid addresses" do
25
+ contact = @client.Contact.build(name: "SOMETHING")
26
+ address = contact.add_address(:type => "INVALID_TYPE")
27
+
28
+ assert_equal(false, contact.valid?)
29
+ invalid_error = contact.errors_for(:addresses).first
30
+ assert_not_nil(invalid_error)
31
+ assert_equal("must all be valid", invalid_error)
32
+
33
+ address.type = "DEFAULT"
34
+ assert_equal(true, contact.valid?)
35
+ assert_equal(0, contact.errors.size)
36
+ end
23
37
  end
24
38
 
25
39
  context "response parsing" do
@@ -53,10 +67,12 @@ class ContactTest < Test::Unit::TestCase
53
67
  end
54
68
 
55
69
  should "be able to have no name if has a contact_id" do
56
- assert_equal(false, @contact.valid?)
57
- @contact.contact_id = "1-2-3"
58
- assert_equal(true, @contact.valid?)
59
- assert_equal(0, @contact.errors.size)
70
+ contact = @client.Contact.build
71
+
72
+ assert_equal(false, contact.valid?)
73
+ contact.contact_id = "1-2-3"
74
+ assert_equal(true, contact.valid?)
75
+ assert_equal(0, contact.errors.size)
60
76
  end
61
77
 
62
78
  it "parses extra attributes when present" do
@@ -3,23 +3,23 @@ require "test_helper"
3
3
  class LineItemTest < Test::Unit::TestCase
4
4
  include TestHelper
5
5
  include Xeroizer::Record
6
-
6
+
7
7
  def setup
8
8
  @client = Xeroizer::PublicApplication.new(CONSUMER_KEY, CONSUMER_SECRET)
9
9
  end
10
-
10
+
11
11
  it "line_item tracking specified correctly" do
12
12
  invoice = @client.Invoice.build
13
13
  line_item = invoice.add_line_item({:description => "Test Description", :quantity => 1, :unit_amount => 200})
14
-
14
+
15
15
  line_item.add_tracking(:name => "Name 1", :option => "Option 1")
16
16
  line_item.add_tracking(:name => "Name 2", :option => "Option 2")
17
-
17
+
18
18
  doc = Nokogiri::XML(line_item.to_xml)
19
19
  assert_equal 2, doc.xpath("/LineItem/Tracking/TrackingCategory").size
20
20
  end
21
21
 
22
- it "line_amount equals unit_price times quantity" do
22
+ it "line_amount equals unit_price times quantity if there is no discount_rate" do
23
23
  line_item = LineItem.new(nil)
24
24
 
25
25
  line_item.quantity = 1
@@ -28,7 +28,21 @@ class LineItemTest < Test::Unit::TestCase
28
28
 
29
29
  expected = BigDecimal((line_item.quantity * (line_item.unit_amount)).to_s).round(2)
30
30
 
31
- assert_equal expected.to_s, line_item.line_amount.to_s
31
+ assert_equal expected.to_s, line_item.line_amount.to_s,
32
+ "expected line_amount to equal unit_amount times quantity"
33
+ end
34
+
35
+ it "line_amount equals unit_amount times quantity minus the discount if there is a discount_rate" do
36
+ line_item = LineItem.new(nil)
37
+ line_item.quantity = 1
38
+ line_item.unit_amount = BigDecimal("1337.00")
39
+ line_item.tax_amount = BigDecimal("0.15")
40
+ line_item.discount_rate = BigDecimal("10.0")
41
+
42
+ discount = (100 - line_item.discount_rate) / 100
43
+ expected = BigDecimal(((line_item.quantity * line_item.unit_amount) * discount).to_s).round(2)
44
+ assert_equal expected.to_s, line_item.line_amount.to_s,
45
+ "expected line_amount to equal unit_amount times quantity minus the discount"
32
46
  end
33
47
 
34
48
  it "line_amount is zero when quantity is nil or zero" do
@@ -32,6 +32,25 @@ class TaxRateTest < Test::Unit::TestCase
32
32
  assert_equal "10.0", tax_component.rate.to_s
33
33
  end
34
34
 
35
+ should "allow reading of the ReportTaxType" do
36
+ @client.expects(:http_get).with { |client, url, extra_params|
37
+ url == "https://api.xero.com/api.xro/2.0/TaxRates"
38
+ }.returns(tax_rate_get_response)
39
+ rates = @client.TaxRate.all
40
+ assert_equal "OUTPUT", rates.first.report_tax_type
41
+ end
42
+
43
+ should "allow GET with a filter on ReportTaxType" do
44
+ expected_url = "https://api.xero.com/api.xro/2.0/TaxRates"
45
+ expected_params = {:where => 'ReportTaxType=="OUTPUT"'}
46
+
47
+ @client.expects(:http_get).with { |client, url, extra_params|
48
+ url == expected_url && extra_params == expected_params
49
+ }.returns(tax_rate_get_response)
50
+
51
+ @client.TaxRate.all(where: {report_tax_type: 'OUTPUT'})
52
+ end
53
+
35
54
  def expected_tax_rate_create_body
36
55
  <<-EOS
37
56
  <TaxRate>
@@ -78,4 +97,36 @@ class TaxRateTest < Test::Unit::TestCase
78
97
  EOS
79
98
  end
80
99
 
81
- end
100
+ def tax_rate_get_response
101
+ <<-EOS
102
+ <Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
103
+ <Id>53715e8f-f080-4cd8-a077-1100c0512d44</Id>
104
+ <Status>OK</Status>
105
+ <ProviderName>Xero API Previewer</ProviderName>
106
+ <DateTimeUTC>2014-10-28T15:39:58.5477531Z</DateTimeUTC>
107
+ <TaxRates>
108
+ <TaxRate>
109
+ <Name>Tax on Sales</Name>
110
+ <TaxType>OUTPUT</TaxType>
111
+ <ReportTaxType>OUTPUT</ReportTaxType>
112
+ <CanApplyToAssets>true</CanApplyToAssets>
113
+ <CanApplyToEquity>true</CanApplyToEquity>
114
+ <CanApplyToExpenses>true</CanApplyToExpenses>
115
+ <CanApplyToLiabilities>true</CanApplyToLiabilities>
116
+ <CanApplyToRevenue>true</CanApplyToRevenue>
117
+ <DisplayTaxRate>9.2500</DisplayTaxRate>
118
+ <EffectiveRate>9.2500</EffectiveRate>
119
+ <Status>ACTIVE</Status>
120
+ <TaxComponents>
121
+ <TaxComponent>
122
+ <Name>Sales Tax</Name>
123
+ <Rate>9.2500</Rate>
124
+ <IsCompound>false</IsCompound>
125
+ </TaxComponent>
126
+ </TaxComponents>
127
+ </TaxRate>
128
+ </TaxRates>
129
+ </Response>
130
+ EOS
131
+ end
132
+ end
@@ -31,7 +31,7 @@ class RecordBaseModelTest < Test::Unit::TestCase
31
31
  end
32
32
 
33
33
  should "set_api_controller_name should set the base controller name used by Xero" do
34
- assert_equal('AppleController', @apple_model.api_controller_name)
34
+ assert_equal('AppleController', @apple_model.api_controller_name)
35
35
  assert_equal('PearController', @pear_model.api_controller_name)
36
36
  end
37
37
 
@@ -55,13 +55,16 @@ class RecordBaseTest < Test::Unit::TestCase
55
55
  end
56
56
 
57
57
  context "about logging" do
58
+ # Setup we only wish to do once:
59
+ class ExampleRecordClass < Xeroizer::Record::Base
60
+ def valid?; true; end
61
+ def to_xml(b = nil); "<FakeRequest />" end
62
+ string :id
63
+ end
64
+ class Xeroizer::Record::ExampleRecordClassModel < Xeroizer::Record::BaseModel; end
65
+
66
+ # Setup before each test
58
67
  setup do
59
- class ExampleRecordClass < Xeroizer::Record::Base
60
- def valid?; true; end
61
- def to_xml(b = nil); "<FakeRequest />" end
62
- string :id
63
- end
64
- class Xeroizer::Record::ExampleRecordClassModel < Xeroizer::Record::BaseModel ; end
65
68
  @example_class = ExampleRecordClass
66
69
  end
67
70
 
@@ -42,7 +42,7 @@ class ModelDefinitionsTest < Test::Unit::TestCase
42
42
  class Xeroizer::Record::TestRecordModel < Xeroizer::Record::BaseModel; end
43
43
 
44
44
  class SummaryOnlyRecord < Xeroizer::Record::Base
45
- class Xeroizer::Record::SummaryOnlyRecordModel < Xeroizer::Record::BaseModel; end
45
+ class Xeroizer::Record::SummaryOnlyRecordModel < Xeroizer::Record::BaseModel; end
46
46
 
47
47
  list_contains_summary_only true
48
48
  set_possible_primary_keys :primary_key_id
@@ -53,7 +53,7 @@ class ModelDefinitionsTest < Test::Unit::TestCase
53
53
  end
54
54
 
55
55
  class SummaryOnlyOffRecord < Xeroizer::Record::Base
56
- class Xeroizer::Record::SummaryOnlyOffRecordModel < Xeroizer::Record::BaseModel; end
56
+ class Xeroizer::Record::SummaryOnlyOffRecordModel < Xeroizer::Record::BaseModel; end
57
57
 
58
58
  set_possible_primary_keys :primary_key_id
59
59
  set_primary_key :primary_key_id
@@ -63,21 +63,21 @@ class FactoryTest < Test::Unit::TestCase
63
63
  end
64
64
 
65
65
  should "convert cells to BigDecimal where possible" do
66
- num_regex = /^[-]?\d+(\.\d+)?$/
66
+ def assess_row(row)
67
+ return 0 unless row.row? || row.summary?
68
+
69
+ row.cells.select {|cell| cell.value.is_a?(BigDecimal) && cell.value > 0}.length
70
+ end
71
+
67
72
  counter = 0
68
- @report.rows.each do | row |
69
- if row.row? || row.summary?
70
- row.cells.each do | cell |
71
- counter += 1 if cell.value.is_a?(BigDecimal) && cell.value > 0
72
- end
73
- elsif row.section?
74
- row.rows.each do | row |
75
- if row.row? || row.summary?
76
- row.cells.each do | cell |
77
- counter += 1 if cell.value.is_a?(BigDecimal) && cell.value > 0
78
- end
79
- end
73
+
74
+ @report.rows.each do |row|
75
+ if row.section?
76
+ row.rows.each do |inner_row|
77
+ counter += assess_row(inner_row)
80
78
  end
79
+ else
80
+ counter += assess_row(row)
81
81
  end
82
82
  end
83
83
  assert_not_equal(0, counter, "at least one converted number in the report should be greater than 0")
@@ -93,13 +93,11 @@ class FactoryTest < Test::Unit::TestCase
93
93
 
94
94
  should "have working report type helpers" do
95
95
  @report.rows.each do | row |
96
- if row.type == 'Section'
97
- check_valid_report_type(row)
98
- row.rows.each do | row |
99
- check_valid_report_type(row)
100
- end
101
- else
102
- check_valid_report_type(row)
96
+ check_valid_report_type(row)
97
+
98
+ next unless row.type == 'Section'
99
+ row.rows.each do |inner_row|
100
+ check_valid_report_type(inner_row)
103
101
  end
104
102
  end
105
103
  end
@@ -149,7 +147,7 @@ class FactoryTest < Test::Unit::TestCase
149
147
  when 'SummaryRow' then assert_equal(true, row.summary?)
150
148
  when 'Section' then assert_equal(true, row.section?)
151
149
  else
152
- assert(false, "Invalid type: #{row.type}")
150
+ assert(false, "Invalid type: #{row.type}")
153
151
  end
154
152
  end
155
153
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xeroizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.16.5
4
+ version: 2.17.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wayne Robinson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-01 00:00:00.000000000 Z
11
+ date: 2017-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -261,6 +261,7 @@ files:
261
261
  - lib/xeroizer/models/balances.rb
262
262
  - lib/xeroizer/models/bank_account.rb
263
263
  - lib/xeroizer/models/bank_transaction.rb
264
+ - lib/xeroizer/models/bank_transfer.rb
264
265
  - lib/xeroizer/models/batch_payments.rb
265
266
  - lib/xeroizer/models/bills.rb
266
267
  - lib/xeroizer/models/branding_theme.rb
@@ -274,7 +275,9 @@ files:
274
275
  - lib/xeroizer/models/employee.rb
275
276
  - lib/xeroizer/models/expense_claim.rb
276
277
  - lib/xeroizer/models/external_link.rb
278
+ - lib/xeroizer/models/from_bank_account.rb
277
279
  - lib/xeroizer/models/invoice.rb
280
+ - lib/xeroizer/models/invoice_reminder.rb
278
281
  - lib/xeroizer/models/item.rb
279
282
  - lib/xeroizer/models/item_purchase_details.rb
280
283
  - lib/xeroizer/models/item_sales_details.rb
@@ -288,8 +291,12 @@ files:
288
291
  - lib/xeroizer/models/manual_journal_line.rb
289
292
  - lib/xeroizer/models/option.rb
290
293
  - lib/xeroizer/models/organisation.rb
294
+ - lib/xeroizer/models/overpayment.rb
291
295
  - lib/xeroizer/models/payment.rb
292
296
  - lib/xeroizer/models/payment_terms.rb
297
+ - lib/xeroizer/models/payroll/bank_account.rb
298
+ - lib/xeroizer/models/payroll/employee.rb
299
+ - lib/xeroizer/models/payroll/home_address.rb
293
300
  - lib/xeroizer/models/phone.rb
294
301
  - lib/xeroizer/models/prepayment.rb
295
302
  - lib/xeroizer/models/purchase_order.rb
@@ -299,11 +306,13 @@ files:
299
306
  - lib/xeroizer/models/schedule.rb
300
307
  - lib/xeroizer/models/tax_component.rb
301
308
  - lib/xeroizer/models/tax_rate.rb
309
+ - lib/xeroizer/models/to_bank_account.rb
302
310
  - lib/xeroizer/models/tracking_category.rb
303
311
  - lib/xeroizer/models/tracking_category_child.rb
304
312
  - lib/xeroizer/models/user.rb
305
313
  - lib/xeroizer/oauth.rb
306
314
  - lib/xeroizer/partner_application.rb
315
+ - lib/xeroizer/payroll_application.rb
307
316
  - lib/xeroizer/private_application.rb
308
317
  - lib/xeroizer/public_application.rb
309
318
  - lib/xeroizer/record/application_helper.rb
@@ -311,6 +320,8 @@ files:
311
320
  - lib/xeroizer/record/base_model.rb
312
321
  - lib/xeroizer/record/base_model_http_proxy.rb
313
322
  - lib/xeroizer/record/model_definition_helper.rb
323
+ - lib/xeroizer/record/payroll_base.rb
324
+ - lib/xeroizer/record/payroll_base_model.rb
314
325
  - lib/xeroizer/record/record_association_helper.rb
315
326
  - lib/xeroizer/record/validation_helper.rb
316
327
  - lib/xeroizer/record/validators/associated_validator.rb
@@ -334,9 +345,11 @@ files:
334
345
  - lib/xeroizer/response.rb
335
346
  - lib/xeroizer/version.rb
336
347
  - test/acceptance/about_creating_bank_transactions_test.rb
348
+ - test/acceptance/about_creating_prepayment_test.rb
337
349
  - test/acceptance/about_fetching_bank_transactions_test.rb
338
350
  - test/acceptance/acceptance_test.rb
339
351
  - test/acceptance/bank_transaction_reference_data.rb
352
+ - test/acceptance/bank_transfer_test.rb
340
353
  - test/acceptance/bulk_operations_test.rb
341
354
  - test/stub_responses/accounts.xml
342
355
  - test/stub_responses/api_exception.xml
@@ -578,6 +591,7 @@ files:
578
591
  - test/test_helper.rb
579
592
  - test/unit/generic_application_test.rb
580
593
  - test/unit/http_test.rb
594
+ - test/unit/models/address_test.rb
581
595
  - test/unit/models/bank_transaction_model_parsing_test.rb
582
596
  - test/unit/models/bank_transaction_test.rb
583
597
  - test/unit/models/bank_transaction_validation_test.rb
@@ -628,15 +642,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
628
642
  version: '0'
629
643
  requirements: []
630
644
  rubyforge_project:
631
- rubygems_version: 2.5.1
645
+ rubygems_version: 2.6.12
632
646
  signing_key:
633
647
  specification_version: 4
634
648
  summary: Xero library
635
649
  test_files:
636
650
  - test/acceptance/about_creating_bank_transactions_test.rb
651
+ - test/acceptance/about_creating_prepayment_test.rb
637
652
  - test/acceptance/about_fetching_bank_transactions_test.rb
638
653
  - test/acceptance/acceptance_test.rb
639
654
  - test/acceptance/bank_transaction_reference_data.rb
655
+ - test/acceptance/bank_transfer_test.rb
640
656
  - test/acceptance/bulk_operations_test.rb
641
657
  - test/stub_responses/accounts.xml
642
658
  - test/stub_responses/api_exception.xml
@@ -878,6 +894,7 @@ test_files:
878
894
  - test/test_helper.rb
879
895
  - test/unit/generic_application_test.rb
880
896
  - test/unit/http_test.rb
897
+ - test/unit/models/address_test.rb
881
898
  - test/unit/models/bank_transaction_model_parsing_test.rb
882
899
  - test/unit/models/bank_transaction_test.rb
883
900
  - test/unit/models/bank_transaction_validation_test.rb