xeroizer-float 2.15.3.16 → 2.15.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/xeroizer/models/allocation.rb +13 -0
- data/lib/xeroizer/models/bank_transaction.rb +13 -0
- data/lib/xeroizer/models/credit_note.rb +2 -0
- data/lib/xeroizer/models/invoice.rb +31 -26
- data/lib/xeroizer/record/base.rb +13 -3
- data/lib/xeroizer/record/base_model.rb +4 -2
- data/lib/xeroizer/record/xml_helper.rb +1 -1
- data/lib/xeroizer.rb +1 -1
- data/test/stub_responses/bank_transactions.xml +16 -0
- data/test/stub_responses/records/bank_transaction-ea28d9c6-c9e8-4261-8c0f-cf04192f3726.xml +24 -0
- data/test/unit/models/bank_transaction_test.rb +11 -3
- data/test/unit/models/line_item_sum_test.rb +3 -2
- data/test/unit/record/model_definition_test.rb +9 -3
- data/xeroizer.gemspec +7 -3
- metadata +7 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.15.
|
1
|
+
2.15.5.1
|
@@ -15,6 +15,7 @@ module Xeroizer
|
|
15
15
|
} unless defined?(BANK_TRANSACTION_STATUS)
|
16
16
|
BANK_TRANSACTION_STATUSES = BANK_TRANSACTION_STATUS.keys.sort
|
17
17
|
|
18
|
+
BANK_TRANSFER_TYPES = [ 'SPEND-TRANSFER', 'RECEIVE-TRANSFER' ]
|
18
19
|
|
19
20
|
def initialize(parent)
|
20
21
|
super parent
|
@@ -37,6 +38,10 @@ module Xeroizer
|
|
37
38
|
string :currency_code
|
38
39
|
decimal :currency_rate, :calculated => true
|
39
40
|
|
41
|
+
decimal :total, :calculated => true
|
42
|
+
decimal :sub_total, :calculated => true
|
43
|
+
decimal :total_tax, :calculated => true
|
44
|
+
|
40
45
|
alias_method :reconciled?, :is_reconciled
|
41
46
|
|
42
47
|
belongs_to :contact, :model_name => 'Contact'
|
@@ -73,6 +78,8 @@ module Xeroizer
|
|
73
78
|
def total; sub_total + total_tax; end
|
74
79
|
|
75
80
|
def sub_total
|
81
|
+
return attributes[:total] if is_transfer?
|
82
|
+
|
76
83
|
if ought_to_recalculate_totals?
|
77
84
|
result = LineItemSum.sub_total(self.line_items)
|
78
85
|
result -= total_tax if line_amount_types == 'Inclusive'
|
@@ -83,11 +90,17 @@ module Xeroizer
|
|
83
90
|
end
|
84
91
|
|
85
92
|
def total_tax
|
93
|
+
return BigDecimal.new('0') if is_transfer?
|
94
|
+
|
86
95
|
return ought_to_recalculate_totals? ?
|
87
96
|
LineItemSum.total_tax(self.line_items) :
|
88
97
|
attributes[:total_tax]
|
89
98
|
end
|
90
99
|
|
100
|
+
def is_transfer?
|
101
|
+
BANK_TRANSFER_TYPES.include? attributes[:type]
|
102
|
+
end
|
103
|
+
|
91
104
|
private
|
92
105
|
|
93
106
|
def ought_to_recalculate_totals?
|
@@ -64,11 +64,13 @@ module Xeroizer
|
|
64
64
|
|
65
65
|
belongs_to :contact
|
66
66
|
has_many :line_items
|
67
|
+
has_many :allocations
|
67
68
|
|
68
69
|
validates_inclusion_of :type, :in => CREDIT_NOTE_TYPES
|
69
70
|
validates_inclusion_of :status, :in => CREDIT_NOTE_STATUSES, :allow_blanks => true
|
70
71
|
validates_associated :contact
|
71
72
|
validates_associated :line_items
|
73
|
+
validates_associated :allocations, :allow_blanks => true
|
72
74
|
|
73
75
|
public
|
74
76
|
|
@@ -1,15 +1,15 @@
|
|
1
1
|
module Xeroizer
|
2
2
|
module Record
|
3
|
-
|
3
|
+
|
4
4
|
class InvoiceModel < BaseModel
|
5
5
|
# To create a new invoice, use the folowing
|
6
6
|
# $xero_client.Invoice.build(type: 'ACCREC', ..., contact: {name: 'Foo Bar'},...)
|
7
7
|
# Note that we are not making an api request to xero just to get the contact
|
8
|
-
|
8
|
+
|
9
9
|
set_permissions :read, :write, :update
|
10
|
-
|
10
|
+
|
11
11
|
public
|
12
|
-
|
12
|
+
|
13
13
|
# Retrieve the PDF version of the invoice matching the `id`.
|
14
14
|
# @param [String] id invoice's ID.
|
15
15
|
# @param [String] filename optional filename to store the PDF in instead of returning the data.
|
@@ -22,11 +22,11 @@ module Xeroizer
|
|
22
22
|
pdf_data
|
23
23
|
end
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
class Invoice < Base
|
29
|
-
|
29
|
+
|
30
30
|
INVOICE_TYPE = {
|
31
31
|
'ACCREC' => 'Accounts Receivable',
|
32
32
|
'ACCPAY' => 'Accounts Payable'
|
@@ -42,11 +42,11 @@ module Xeroizer
|
|
42
42
|
'VOIDED' => 'Approved invoices that are voided'
|
43
43
|
} unless defined?(INVOICE_STATUS)
|
44
44
|
INVOICE_STATUSES = INVOICE_STATUS.keys.sort
|
45
|
-
|
45
|
+
|
46
46
|
set_primary_key :invoice_id
|
47
47
|
set_possible_primary_keys :invoice_id, :invoice_number
|
48
48
|
list_contains_summary_only true
|
49
|
-
|
49
|
+
|
50
50
|
guid :invoice_id
|
51
51
|
string :invoice_number
|
52
52
|
string :reference
|
@@ -68,12 +68,12 @@ module Xeroizer
|
|
68
68
|
decimal :currency_rate, :calculated => true
|
69
69
|
datetime :fully_paid_on_date
|
70
70
|
boolean :sent_to_contact
|
71
|
-
|
71
|
+
|
72
72
|
belongs_to :contact
|
73
73
|
has_many :line_items
|
74
74
|
has_many :payments
|
75
75
|
has_many :credit_notes
|
76
|
-
|
76
|
+
|
77
77
|
validates_presence_of :date, :due_date, :unless => :new_record?
|
78
78
|
validates_inclusion_of :type, :in => INVOICE_TYPES
|
79
79
|
validates_inclusion_of :status, :in => INVOICE_STATUSES, :unless => :new_record?
|
@@ -81,9 +81,9 @@ module Xeroizer
|
|
81
81
|
validates_associated :contact
|
82
82
|
validates_associated :line_items, :allow_blanks => true, :unless => :approved?
|
83
83
|
validates_associated :line_items, :if => :approved?
|
84
|
-
|
84
|
+
|
85
85
|
public
|
86
|
-
|
86
|
+
|
87
87
|
# Access the contact name without forcing a download of
|
88
88
|
# an incomplete, summary invoice.
|
89
89
|
def contact_name
|
@@ -95,12 +95,12 @@ module Xeroizer
|
|
95
95
|
def contact_id
|
96
96
|
attributes[:contact] && attributes[:contact][:contact_id]
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
# Helper method to check if the invoice has been approved.
|
100
100
|
def approved?
|
101
101
|
[ 'AUTHORISED', 'PAID', 'VOIDED' ].include? status
|
102
102
|
end
|
103
|
-
|
103
|
+
|
104
104
|
# Helper method to check if the invoice is accounts payable.
|
105
105
|
def accounts_payable?
|
106
106
|
type == 'ACCPAY'
|
@@ -127,7 +127,7 @@ module Xeroizer
|
|
127
127
|
@sub_total_is_set = true
|
128
128
|
attributes[:sub_total] = sub_total
|
129
129
|
end
|
130
|
-
|
130
|
+
|
131
131
|
def total_tax=(total_tax)
|
132
132
|
@total_tax_is_set = true
|
133
133
|
attributes[:total_tax] = total_tax
|
@@ -142,9 +142,9 @@ module Xeroizer
|
|
142
142
|
def sub_total(always_summary = false)
|
143
143
|
if !@sub_total_is_set && not_summary_or_loaded_record(always_summary)
|
144
144
|
sum = (line_items || []).inject(BigDecimal.new('0')) { | sum, line_item | sum + line_item.line_amount }
|
145
|
-
|
145
|
+
|
146
146
|
# If the default amount types are inclusive of 'tax' then remove the tax amount from this sub-total.
|
147
|
-
sum -= total_tax if line_amount_types == 'Inclusive'
|
147
|
+
sum -= total_tax if line_amount_types == 'Inclusive'
|
148
148
|
sum
|
149
149
|
else
|
150
150
|
attributes[:sub_total]
|
@@ -168,16 +168,16 @@ module Xeroizer
|
|
168
168
|
attributes[:total]
|
169
169
|
end
|
170
170
|
end
|
171
|
-
|
171
|
+
|
172
172
|
def not_summary_or_loaded_record(always_summary)
|
173
173
|
!always_summary && loaded_record?
|
174
174
|
end
|
175
175
|
|
176
176
|
def loaded_record?
|
177
|
-
new_record? ||
|
177
|
+
new_record? ||
|
178
178
|
(!new_record? && line_items && line_items.size > 0)
|
179
179
|
end
|
180
|
-
|
180
|
+
|
181
181
|
# Retrieve the PDF version of this invoice.
|
182
182
|
# @param [String] filename optional filename to store the PDF in instead of returning the data.
|
183
183
|
def pdf(filename = nil)
|
@@ -186,23 +186,28 @@ module Xeroizer
|
|
186
186
|
|
187
187
|
# Delete an approved invoice with no payments.
|
188
188
|
def delete!
|
189
|
-
|
189
|
+
change_status!('DELETED')
|
190
190
|
end
|
191
191
|
|
192
192
|
# Void an approved invoice with no payments.
|
193
193
|
def void!
|
194
|
-
|
194
|
+
change_status!('VOIDED')
|
195
|
+
end
|
196
|
+
|
197
|
+
# Approve a draft invoice
|
198
|
+
def approve!
|
199
|
+
change_status!('AUTHORISED')
|
195
200
|
end
|
196
201
|
|
197
202
|
protected
|
198
203
|
|
199
|
-
def
|
204
|
+
def change_status!(new_status)
|
200
205
|
raise CannotChangeInvoiceStatus.new(record, new_status) unless self.payments.size == 0
|
201
206
|
self.status = new_status
|
202
207
|
self.save
|
203
208
|
end
|
204
|
-
|
209
|
+
|
205
210
|
end
|
206
|
-
|
211
|
+
|
207
212
|
end
|
208
213
|
end
|
data/lib/xeroizer/record/base.rb
CHANGED
@@ -14,6 +14,7 @@ module Xeroizer
|
|
14
14
|
|
15
15
|
attr_reader :attributes
|
16
16
|
attr_reader :parent
|
17
|
+
attr_reader :model
|
17
18
|
attr_accessor :errors
|
18
19
|
attr_accessor :complete_record_downloaded
|
19
20
|
|
@@ -36,14 +37,19 @@ module Xeroizer
|
|
36
37
|
end
|
37
38
|
|
38
39
|
public
|
39
|
-
|
40
|
+
|
40
41
|
def initialize(parent)
|
41
42
|
@parent = parent
|
43
|
+
@model = new_model_class(self.class.name.demodulize)
|
42
44
|
@attributes = {}
|
43
45
|
end
|
44
|
-
|
46
|
+
|
45
47
|
def new_model_class(model_name)
|
46
|
-
|
48
|
+
if parent
|
49
|
+
Xeroizer::Record.const_get("#{model_name}Model".to_sym).new(parent.application, model_name.to_s)
|
50
|
+
else
|
51
|
+
Xeroizer::Record.const_get("#{model_name}Model".to_sym).new(nil, model_name.to_s)
|
52
|
+
end
|
47
53
|
end
|
48
54
|
|
49
55
|
def [](attribute)
|
@@ -55,6 +61,10 @@ module Xeroizer
|
|
55
61
|
self.send("#{attribute}=".to_sym, value)
|
56
62
|
end
|
57
63
|
|
64
|
+
def non_calculated_attributes
|
65
|
+
attributes.reject {|name| self.class.fields[name][:calculated] }
|
66
|
+
end
|
67
|
+
|
58
68
|
def attributes=(new_attributes)
|
59
69
|
return unless new_attributes.is_a?(Hash)
|
60
70
|
parent.mark_dirty(self) if parent
|
@@ -141,6 +141,7 @@ module Xeroizer
|
|
141
141
|
end
|
142
142
|
|
143
143
|
def batch_save(chunk_size = DEFAULT_RECORDS_PER_BATCH_SAVE)
|
144
|
+
no_errors = true
|
144
145
|
@objects = {}
|
145
146
|
@allow_batch_operations = true
|
146
147
|
|
@@ -156,8 +157,9 @@ module Xeroizer
|
|
156
157
|
response = parse_response(self.send(http_method, request, {:summarizeErrors => false}))
|
157
158
|
response.response_items.each_with_index do |record, i|
|
158
159
|
if record and record.is_a?(model_class)
|
159
|
-
some_records[i].attributes = record.
|
160
|
+
some_records[i].attributes = record.non_calculated_attributes
|
160
161
|
some_records[i].errors = record.errors
|
162
|
+
no_errors = record.errors.nil? || record.errors.empty? if no_errors
|
161
163
|
some_records[i].saved!
|
162
164
|
end
|
163
165
|
end
|
@@ -167,7 +169,7 @@ module Xeroizer
|
|
167
169
|
|
168
170
|
@objects = {}
|
169
171
|
@allow_batch_operations = false
|
170
|
-
|
172
|
+
no_errors
|
171
173
|
end
|
172
174
|
|
173
175
|
def parse_response(response_xml, options = {})
|
@@ -61,7 +61,7 @@ module Xeroizer
|
|
61
61
|
# Turn a record into its XML representation.
|
62
62
|
def to_xml(b = Builder::XmlMarkup.new(:indent => 2))
|
63
63
|
optional_root_tag(parent.class.optional_xml_root_name, b) do |b|
|
64
|
-
b.tag!(
|
64
|
+
b.tag!(model.class.xml_node_name || model.model_name) {
|
65
65
|
attributes.each do | key, value |
|
66
66
|
field = self.class.fields[key]
|
67
67
|
value = self.send(key) if field[:calculated]
|
data/lib/xeroizer.rb
CHANGED
@@ -2,7 +2,6 @@ require 'rubygems'
|
|
2
2
|
require 'date'
|
3
3
|
require 'forwardable'
|
4
4
|
require 'active_support/inflector'
|
5
|
-
require 'active_support/memoizable'
|
6
5
|
# require "active_support/core_ext"
|
7
6
|
require 'oauth'
|
8
7
|
require 'oauth/signature/rsa/sha1'
|
@@ -28,6 +27,7 @@ require 'xeroizer/configuration'
|
|
28
27
|
# Include models
|
29
28
|
require 'xeroizer/models/account'
|
30
29
|
require 'xeroizer/models/address'
|
30
|
+
require 'xeroizer/models/allocation'
|
31
31
|
require 'xeroizer/models/branding_theme'
|
32
32
|
require 'xeroizer/models/bank_transaction'
|
33
33
|
require 'xeroizer/models/bank_account'
|
@@ -48,5 +48,21 @@
|
|
48
48
|
<IsReconciled>false</IsReconciled>
|
49
49
|
<CurrencyRate>1.519520</CurrencyRate>
|
50
50
|
</BankTransaction>
|
51
|
+
<BankTransaction>
|
52
|
+
<Date>2013-09-17T00:00:00</Date>
|
53
|
+
<Status>AUTHORISED</Status>
|
54
|
+
<LineAmountTypes>NoTax</LineAmountTypes>
|
55
|
+
<Total>120.00</Total>
|
56
|
+
<UpdatedDateUTC>2013-09-17T14:47:58.95</UpdatedDateUTC>
|
57
|
+
<CurrencyCode>GBP</CurrencyCode>
|
58
|
+
<BankTransactionID>ea28d9c6-c9e8-4261-8c0f-cf04192f3726</BankTransactionID>
|
59
|
+
<BankAccount>
|
60
|
+
<AccountID>bd9e85e0-0478-433d-ae9f-0b3c4f04bfe4</AccountID>
|
61
|
+
<Code>090</Code>
|
62
|
+
<Name>Business Bank Account</Name>
|
63
|
+
</BankAccount>
|
64
|
+
<Type>SPEND-TRANSFER</Type>
|
65
|
+
<IsReconciled>false</IsReconciled>
|
66
|
+
</BankTransaction>
|
51
67
|
</BankTransactions>
|
52
68
|
</Response>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
2
|
+
<Id>4e25a58b-02c4-40f7-9e8b-ca77b2a9d61a</Id>
|
3
|
+
<Status>OK</Status>
|
4
|
+
<ProviderName>Xero API Previewer</ProviderName>
|
5
|
+
<DateTimeUTC>2013-09-18T14:17:01.2026157Z</DateTimeUTC>
|
6
|
+
<BankTransactions>
|
7
|
+
<BankTransaction>
|
8
|
+
<Date>2013-09-17T00:00:00</Date>
|
9
|
+
<Status>AUTHORISED</Status>
|
10
|
+
<LineAmountTypes>NoTax</LineAmountTypes>
|
11
|
+
<Total>120.00</Total>
|
12
|
+
<UpdatedDateUTC>2013-09-17T14:47:58.95</UpdatedDateUTC>
|
13
|
+
<CurrencyCode>GBP</CurrencyCode>
|
14
|
+
<BankTransactionID>ea28d9c6-c9e8-4261-8c0f-cf04192f3726</BankTransactionID>
|
15
|
+
<BankAccount>
|
16
|
+
<AccountID>bd9e85e0-0478-433d-ae9f-0b3c4f04bfe4</AccountID>
|
17
|
+
<Code>090</Code>
|
18
|
+
<Name>Business Bank Account</Name>
|
19
|
+
</BankAccount>
|
20
|
+
<Type>SPEND-TRANSFER</Type>
|
21
|
+
<IsReconciled>false</IsReconciled>
|
22
|
+
</BankTransaction>
|
23
|
+
</BankTransactions>
|
24
|
+
</Response>
|
@@ -7,8 +7,7 @@ class BankTransactionTest < Test::Unit::TestCase
|
|
7
7
|
def setup
|
8
8
|
fake_parent = Class.new do
|
9
9
|
attr_accessor :application
|
10
|
-
def mark_dirty(*args)
|
11
|
-
end
|
10
|
+
def mark_dirty(*args); end
|
12
11
|
end.new
|
13
12
|
|
14
13
|
the_line_items = [
|
@@ -52,7 +51,6 @@ class BankTransactionTest < Test::Unit::TestCase
|
|
52
51
|
end
|
53
52
|
|
54
53
|
context "bank transaction totals" do
|
55
|
-
|
56
54
|
should "large-scale testing from API XML" do
|
57
55
|
bank_transactions = @client.BankTransaction.all
|
58
56
|
bank_transactions.each do | bank_transaction |
|
@@ -71,5 +69,15 @@ class BankTransactionTest < Test::Unit::TestCase
|
|
71
69
|
end
|
72
70
|
end
|
73
71
|
|
72
|
+
should "handle bank transfers properly" do
|
73
|
+
bank_transactions = @client.BankTransaction.all
|
74
|
+
bank_transaction = bank_transactions.find { |bt| bt.attributes[:type] == "SPEND-TRANSFER" }
|
75
|
+
|
76
|
+
assert( bank_transaction.is_transfer? )
|
77
|
+
assert_equal( bank_transaction.attributes[:total], bank_transaction.total)
|
78
|
+
assert_equal( bank_transaction.attributes[:total], bank_transaction.sub_total)
|
79
|
+
assert_equal( 0, bank_transaction.total_tax)
|
80
|
+
end
|
81
|
+
|
74
82
|
end
|
75
83
|
end
|
@@ -4,9 +4,10 @@ class LineItemSumTest < Test::Unit::TestCase
|
|
4
4
|
include Xeroizer::Record
|
5
5
|
|
6
6
|
def setup
|
7
|
+
parent = stub(:application => nil, :mark_dirty => nil)
|
7
8
|
@the_line_items = [
|
8
|
-
LineItem.build({:quantity => 1, :unit_amount => 1.00, :tax_amount => 0.15},
|
9
|
-
LineItem.build({:quantity => 1, :unit_amount => 1.00, :tax_amount => 0.30},
|
9
|
+
LineItem.build({:quantity => 1, :unit_amount => 1.00, :tax_amount => 0.15}, parent),
|
10
|
+
LineItem.build({:quantity => 1, :unit_amount => 1.00, :tax_amount => 0.30}, parent),
|
10
11
|
]
|
11
12
|
end
|
12
13
|
|
@@ -16,6 +16,7 @@ class ModelDefinitionsTest < Test::Unit::TestCase
|
|
16
16
|
datetime :datetime1
|
17
17
|
|
18
18
|
end
|
19
|
+
class Xeroizer::Record::FirstRecordModel < Xeroizer::Record::BaseModel; end
|
19
20
|
|
20
21
|
class SecondRecord < Xeroizer::Record::Base
|
21
22
|
|
@@ -30,6 +31,7 @@ class ModelDefinitionsTest < Test::Unit::TestCase
|
|
30
31
|
datetime :datetime2
|
31
32
|
|
32
33
|
end
|
34
|
+
class Xeroizer::Record::SecondRecordModel < Xeroizer::Record::BaseModel; end
|
33
35
|
|
34
36
|
class TestRecord < Xeroizer::Record::Base
|
35
37
|
|
@@ -37,8 +39,10 @@ class ModelDefinitionsTest < Test::Unit::TestCase
|
|
37
39
|
string :name
|
38
40
|
|
39
41
|
end
|
42
|
+
class Xeroizer::Record::TestRecordModel < Xeroizer::Record::BaseModel; end
|
40
43
|
|
41
44
|
class SummaryOnlyRecord < Xeroizer::Record::Base
|
45
|
+
class Xeroizer::Record::SummaryOnlyRecordModel < Xeroizer::Record::BaseModel; end
|
42
46
|
|
43
47
|
list_contains_summary_only true
|
44
48
|
set_possible_primary_keys :primary_key_id
|
@@ -49,6 +53,7 @@ class ModelDefinitionsTest < Test::Unit::TestCase
|
|
49
53
|
end
|
50
54
|
|
51
55
|
class SummaryOnlyOffRecord < Xeroizer::Record::Base
|
56
|
+
class Xeroizer::Record::SummaryOnlyOffRecordModel < Xeroizer::Record::BaseModel; end
|
52
57
|
|
53
58
|
set_possible_primary_keys :primary_key_id
|
54
59
|
set_primary_key :primary_key_id
|
@@ -59,8 +64,9 @@ class ModelDefinitionsTest < Test::Unit::TestCase
|
|
59
64
|
|
60
65
|
def setup
|
61
66
|
@client = Xeroizer::PublicApplication.new(CONSUMER_KEY, CONSUMER_SECRET)
|
62
|
-
|
63
|
-
@
|
67
|
+
parent = stub(:application => @client, :mark_dirty => nil)
|
68
|
+
@first = FirstRecord.new(parent)
|
69
|
+
@second = SecondRecord.new(parent)
|
64
70
|
@record = TestRecord.build({}, @client.Contact)
|
65
71
|
@contact = @client.Contact.build
|
66
72
|
end
|
@@ -93,7 +99,7 @@ class ModelDefinitionsTest < Test::Unit::TestCase
|
|
93
99
|
|
94
100
|
should "define primary key with shortcut #id method" do
|
95
101
|
assert_nil(@first.id)
|
96
|
-
value = "
|
102
|
+
value = "PRIMARY KEY VALUE"
|
97
103
|
@first.id = value
|
98
104
|
assert_equal(value, @first.id)
|
99
105
|
assert_equal(value, @first.primary_key_id)
|
data/xeroizer.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "xeroizer"
|
8
|
-
s.version = "2.15.
|
8
|
+
s.version = "2.15.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Wayne Robinson"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2013-07-04"
|
13
13
|
s.description = "Ruby library for the Xero accounting system API."
|
14
14
|
s.email = "wayne.robinson@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -99,6 +99,7 @@ Gem::Specification.new do |s|
|
|
99
99
|
"test/acceptance/about_fetching_bank_transactions_test.rb",
|
100
100
|
"test/acceptance/acceptance_test.rb",
|
101
101
|
"test/acceptance/bank_transaction_reference_data.rb",
|
102
|
+
"test/acceptance/bulk_operations_test.rb",
|
102
103
|
"test/stub_responses/accounts.xml",
|
103
104
|
"test/stub_responses/api_exception.xml",
|
104
105
|
"test/stub_responses/bogus_oauth_error",
|
@@ -357,7 +358,7 @@ Gem::Specification.new do |s|
|
|
357
358
|
s.homepage = "http://github.com/waynerobinson/xeroizer"
|
358
359
|
s.licenses = ["MIT"]
|
359
360
|
s.require_paths = ["lib"]
|
360
|
-
s.rubygems_version = "1.8.
|
361
|
+
s.rubygems_version = "1.8.25"
|
361
362
|
s.summary = "Xero library"
|
362
363
|
|
363
364
|
if s.respond_to? :specification_version then
|
@@ -367,6 +368,7 @@ Gem::Specification.new do |s|
|
|
367
368
|
s.add_runtime_dependency(%q<builder>, [">= 2.1.2"])
|
368
369
|
s.add_runtime_dependency(%q<oauth>, ["= 0.4.5"])
|
369
370
|
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
371
|
+
s.add_runtime_dependency(%q<tzinfo>, [">= 0"])
|
370
372
|
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
371
373
|
s.add_runtime_dependency(%q<i18n>, [">= 0"])
|
372
374
|
s.add_runtime_dependency(%q<builder>, [">= 2.1.2"])
|
@@ -379,6 +381,7 @@ Gem::Specification.new do |s|
|
|
379
381
|
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
380
382
|
s.add_dependency(%q<oauth>, ["= 0.4.5"])
|
381
383
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
384
|
+
s.add_dependency(%q<tzinfo>, [">= 0"])
|
382
385
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
383
386
|
s.add_dependency(%q<i18n>, [">= 0"])
|
384
387
|
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
@@ -392,6 +395,7 @@ Gem::Specification.new do |s|
|
|
392
395
|
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
393
396
|
s.add_dependency(%q<oauth>, ["= 0.4.5"])
|
394
397
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
398
|
+
s.add_dependency(%q<tzinfo>, [">= 0"])
|
395
399
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
396
400
|
s.add_dependency(%q<i18n>, [">= 0"])
|
397
401
|
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xeroizer-float
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.15.
|
4
|
+
version: 2.15.5.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-09-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: builder
|
@@ -233,6 +233,7 @@ files:
|
|
233
233
|
- lib/xeroizer/logging.rb
|
234
234
|
- lib/xeroizer/models/account.rb
|
235
235
|
- lib/xeroizer/models/address.rb
|
236
|
+
- lib/xeroizer/models/allocation.rb
|
236
237
|
- lib/xeroizer/models/bank_account.rb
|
237
238
|
- lib/xeroizer/models/bank_transaction.rb
|
238
239
|
- lib/xeroizer/models/branding_theme.rb
|
@@ -323,6 +324,7 @@ files:
|
|
323
324
|
- test/stub_responses/payments.xml
|
324
325
|
- test/stub_responses/rate_limit_exceeded
|
325
326
|
- test/stub_responses/records/bank_transaction-8644472b-ea4e-4e5a-9987-f79250ece35e.xml
|
327
|
+
- test/stub_responses/records/bank_transaction-ea28d9c6-c9e8-4261-8c0f-cf04192f3726.xml
|
326
328
|
- test/stub_responses/records/bank_transaction-ee4c4d5a-437d-4369-b152-848bd932f431.xml
|
327
329
|
- test/stub_responses/records/contact-043892a1-aef1-4c18-88d8-b8ccb6d31466.xml
|
328
330
|
- test/stub_responses/records/contact-09664078-efe2-4a88-89a5-67eac9b0047b.xml
|
@@ -565,6 +567,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
565
567
|
- - ! '>='
|
566
568
|
- !ruby/object:Gem::Version
|
567
569
|
version: '0'
|
570
|
+
segments:
|
571
|
+
- 0
|
572
|
+
hash: -4125047856813018795
|
568
573
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
569
574
|
none: false
|
570
575
|
requirements:
|