xeroizer 2.16.5 → 2.17.1

Sign up to get free protection for your applications and to get access to all the features.
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