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.
- checksums.yaml +4 -4
- data/README.md +21 -27
- data/lib/class_level_inheritable_attributes.rb +3 -0
- data/lib/xeroizer.rb +13 -1
- data/lib/xeroizer/exceptions.rb +1 -1
- data/lib/xeroizer/generic_application.rb +13 -1
- data/lib/xeroizer/http.rb +128 -120
- data/lib/xeroizer/models/account.rb +1 -0
- data/lib/xeroizer/models/address.rb +18 -9
- data/lib/xeroizer/models/attachment.rb +1 -1
- data/lib/xeroizer/models/balances.rb +1 -0
- data/lib/xeroizer/models/bank_transaction.rb +2 -2
- data/lib/xeroizer/models/bank_transfer.rb +28 -0
- data/lib/xeroizer/models/contact.rb +11 -4
- data/lib/xeroizer/models/credit_note.rb +9 -4
- data/lib/xeroizer/models/from_bank_account.rb +12 -0
- data/lib/xeroizer/models/invoice.rb +11 -3
- data/lib/xeroizer/models/invoice_reminder.rb +19 -0
- data/lib/xeroizer/models/line_item.rb +21 -9
- data/lib/xeroizer/models/manual_journal.rb +6 -0
- data/lib/xeroizer/models/organisation.rb +4 -0
- data/lib/xeroizer/models/overpayment.rb +40 -0
- data/lib/xeroizer/models/payroll/bank_account.rb +23 -0
- data/lib/xeroizer/models/payroll/employee.rb +45 -0
- data/lib/xeroizer/models/payroll/home_address.rb +24 -0
- data/lib/xeroizer/models/prepayment.rb +1 -0
- data/lib/xeroizer/models/tax_rate.rb +5 -4
- data/lib/xeroizer/models/to_bank_account.rb +12 -0
- data/lib/xeroizer/oauth.rb +8 -8
- data/lib/xeroizer/partner_application.rb +4 -8
- data/lib/xeroizer/payroll_application.rb +28 -0
- data/lib/xeroizer/private_application.rb +2 -4
- data/lib/xeroizer/record/base_model.rb +137 -122
- data/lib/xeroizer/record/base_model_http_proxy.rb +1 -1
- data/lib/xeroizer/record/payroll_base.rb +25 -0
- data/lib/xeroizer/record/payroll_base_model.rb +29 -0
- data/lib/xeroizer/record/record_association_helper.rb +13 -14
- data/lib/xeroizer/record/validation_helper.rb +1 -1
- data/lib/xeroizer/record/xml_helper.rb +10 -8
- data/lib/xeroizer/report/aged_receivables_by_contact.rb +0 -1
- data/lib/xeroizer/report/base.rb +0 -1
- data/lib/xeroizer/report/factory.rb +3 -3
- data/lib/xeroizer/report/row/header.rb +4 -4
- data/lib/xeroizer/report/row/xml_helper.rb +2 -2
- data/lib/xeroizer/version.rb +1 -1
- data/test/acceptance/about_creating_prepayment_test.rb +46 -0
- data/test/acceptance/about_fetching_bank_transactions_test.rb +21 -21
- data/test/acceptance/acceptance_test.rb +4 -4
- data/test/acceptance/bank_transaction_reference_data.rb +3 -1
- data/test/acceptance/bank_transfer_test.rb +26 -0
- data/test/test_helper.rb +6 -4
- data/test/unit/models/address_test.rb +92 -0
- data/test/unit/models/bank_transaction_validation_test.rb +1 -1
- data/test/unit/models/contact_test.rb +20 -4
- data/test/unit/models/line_item_test.rb +20 -6
- data/test/unit/models/tax_rate_test.rb +52 -1
- data/test/unit/record/base_model_test.rb +1 -1
- data/test/unit/record/base_test.rb +9 -6
- data/test/unit/record/model_definition_test.rb +2 -2
- data/test/unit/report_test.rb +19 -21
- 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
|
-
|
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(
|
50
|
-
@client.send(
|
51
|
-
@client.stubs(:http_get).with {|client, url, params| url =~ /#{model_name}\/#{record.id}$/ }.returns(get_record_xml(
|
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
|
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
|
-
|
57
|
-
|
58
|
-
assert_equal(
|
59
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
data/test/unit/report_test.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
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
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
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
|
-
|
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.
|
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:
|
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.
|
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
|