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