xeroizer 2.15.6 → 2.15.7
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/xeroizer/http.rb +11 -6
- data/lib/xeroizer/models/bank_transaction.rb +4 -0
- data/lib/xeroizer/models/tax_rate.rb +2 -4
- data/lib/xeroizer/oauth.rb +2 -1
- data/lib/xeroizer/version.rb +1 -1
- data/lib/xeroizer.rb +2 -2
- data/test/unit/models/bank_transaction_validation_test.rb +1 -1
- data/test/unit/models/tax_rate_test.rb +3 -3
- data/test/unit/oauth_test.rb +2 -2
- data/test/unit/record/base_test.rb +1 -1
- data/test/unit/record/record_association_test.rb +1 -1
- metadata +3 -3
data/lib/xeroizer/http.rb
CHANGED
@@ -133,17 +133,22 @@ module Xeroizer
|
|
133
133
|
def handle_oauth_error!(response)
|
134
134
|
error_details = CGI.parse(response.plain_body)
|
135
135
|
description = error_details["oauth_problem_advice"].first
|
136
|
+
problem = error_details["oauth_problem"].first
|
136
137
|
|
137
138
|
# see http://oauth.pbworks.com/ProblemReporting
|
138
139
|
# In addition to token_expired and token_rejected, Xero also returns
|
139
140
|
# 'rate limit exceeded' when more than 60 requests have been made in
|
140
141
|
# a second.
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
142
|
+
if problem
|
143
|
+
case (problem)
|
144
|
+
when "token_expired" then raise OAuth::TokenExpired.new(description)
|
145
|
+
when "token_rejected" then raise OAuth::TokenInvalid.new(description)
|
146
|
+
when "rate limit exceeded" then raise OAuth::RateLimitExceeded.new(description)
|
147
|
+
when "consumer_key_unknown" then raise OAuth::ConsumerKeyUnknown.new(description)
|
148
|
+
else raise OAuth::UnknownError.new(problem + ':' + description)
|
149
|
+
end
|
150
|
+
else
|
151
|
+
raise OAuth::UnknownError.new("Xero API may be down or the way OAuth errors are provided by Xero may have changed.")
|
147
152
|
end
|
148
153
|
end
|
149
154
|
|
@@ -1,10 +1,13 @@
|
|
1
1
|
require 'xeroizer/models/line_item'
|
2
2
|
require 'xeroizer/models/line_item_sum'
|
3
|
+
require 'xeroizer/models/attachment'
|
3
4
|
|
4
5
|
module Xeroizer
|
5
6
|
module Record
|
6
7
|
class BankTransactionModel < BaseModel
|
7
8
|
set_permissions :read
|
9
|
+
|
10
|
+
include AttachmentModel::Extensions
|
8
11
|
end
|
9
12
|
|
10
13
|
class BankTransaction < Base
|
@@ -15,6 +18,7 @@ module Xeroizer
|
|
15
18
|
} unless defined?(BANK_TRANSACTION_STATUS)
|
16
19
|
BANK_TRANSACTION_STATUSES = BANK_TRANSACTION_STATUS.keys.sort
|
17
20
|
|
21
|
+
include Attachment::Extensions
|
18
22
|
|
19
23
|
def initialize(parent)
|
20
24
|
super parent
|
@@ -14,11 +14,9 @@ module Xeroizer
|
|
14
14
|
end
|
15
15
|
|
16
16
|
class TaxRate < Base
|
17
|
-
set_primary_key :tax_type
|
18
|
-
set_possible_primary_keys :tax_type, :name
|
19
|
-
|
20
17
|
set_primary_key :name
|
21
|
-
|
18
|
+
set_possible_primary_keys :tax_type, :name
|
19
|
+
|
22
20
|
string :name
|
23
21
|
string :tax_type
|
24
22
|
string :status
|
data/lib/xeroizer/oauth.rb
CHANGED
@@ -27,8 +27,9 @@ module Xeroizer
|
|
27
27
|
class TokenExpired < StandardError; end
|
28
28
|
class TokenInvalid < StandardError; end
|
29
29
|
class RateLimitExceeded < StandardError; end
|
30
|
+
class ConsumerKeyUnknown < StandardError; end
|
30
31
|
class UnknownError < StandardError; end
|
31
|
-
|
32
|
+
|
32
33
|
unless defined? XERO_CONSUMER_OPTIONS
|
33
34
|
XERO_CONSUMER_OPTIONS = {
|
34
35
|
:site => "https://api.xero.com",
|
data/lib/xeroizer/version.rb
CHANGED
data/lib/xeroizer.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'date'
|
3
3
|
require 'forwardable'
|
4
4
|
require 'active_support/inflector'
|
5
|
-
|
5
|
+
require "active_support/core_ext"
|
6
6
|
require 'oauth'
|
7
7
|
require 'oauth/signature/rsa/sha1'
|
8
8
|
require 'nokogiri'
|
@@ -11,7 +11,7 @@ require 'time'
|
|
11
11
|
require 'bigdecimal'
|
12
12
|
require 'cgi'
|
13
13
|
|
14
|
-
$: << File.expand_path(File.dirname(__FILE__))
|
14
|
+
$: << File.expand_path(File.dirname(__FILE__))
|
15
15
|
|
16
16
|
require 'big_decimal_to_s'
|
17
17
|
require 'class_level_inheritable_attributes'
|
@@ -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 or RECEIVE."
|
11
|
+
expected_error = "Invalid type. Expected either SPEND, RECEIVE, RECEIVE-PREPAYMENT or RECEIVE-OVERPAYMENT."
|
12
12
|
|
13
13
|
assert_equal expected_error, instance.errors_for(:type).first, "Expected an error about type"
|
14
14
|
|
@@ -8,12 +8,12 @@ class TaxRateTest < Test::Unit::TestCase
|
|
8
8
|
@client = Xeroizer::PublicApplication.new(CONSUMER_KEY, CONSUMER_SECRET)
|
9
9
|
end
|
10
10
|
|
11
|
-
should "have a primary key value of :
|
12
|
-
assert_equal :
|
11
|
+
should "have a primary key value of :name" do
|
12
|
+
assert_equal :name, Xeroizer::Record::TaxRate.primary_key_name
|
13
13
|
end
|
14
14
|
|
15
15
|
should "build and save a tax rate with components via PUT" do
|
16
|
-
@client.expects(:
|
16
|
+
@client.expects(:http_post).with { |client, url, body, extra_params|
|
17
17
|
url == "https://api.xero.com/api.xro/2.0/TaxRates" &&
|
18
18
|
body == expected_tax_rate_create_body
|
19
19
|
}.returns(tax_rate_create_successful_response)
|
data/test/unit/oauth_test.rb
CHANGED
@@ -75,7 +75,7 @@ class OAuthTest < Test::Unit::TestCase
|
|
75
75
|
end
|
76
76
|
|
77
77
|
should "handle ApiExceptions" do
|
78
|
-
Xeroizer::OAuth.any_instance.stubs(:
|
78
|
+
Xeroizer::OAuth.any_instance.stubs(:put).returns(stub(:plain_body => get_file_as_string("api_exception.xml"),
|
79
79
|
:code => "400"))
|
80
80
|
|
81
81
|
assert_raises Xeroizer::ApiException do
|
@@ -85,7 +85,7 @@ class OAuthTest < Test::Unit::TestCase
|
|
85
85
|
end
|
86
86
|
|
87
87
|
should "handle random root elements" do
|
88
|
-
Xeroizer::OAuth.any_instance.stubs(:
|
88
|
+
Xeroizer::OAuth.any_instance.stubs(:put).returns(stub(:plain_body => "<RandomRootElement></RandomRootElement>",
|
89
89
|
:code => "200"))
|
90
90
|
|
91
91
|
assert_raises Xeroizer::UnparseableResponse do
|
@@ -33,7 +33,7 @@ class RecordBaseTest < Test::Unit::TestCase
|
|
33
33
|
end
|
34
34
|
|
35
35
|
should "new_record? should be false after successfully creating a record" do
|
36
|
-
Xeroizer::OAuth.any_instance.stubs(:
|
36
|
+
Xeroizer::OAuth.any_instance.stubs(:put).returns(stub(:plain_body => get_record_xml(:contact), :code => '200'))
|
37
37
|
assert_equal(true, @contact.new_record?)
|
38
38
|
assert_nil(@contact.contact_id)
|
39
39
|
assert_equal(true, @contact.save, "Error saving contact: #{@contact.errors.inspect}")
|
@@ -6,7 +6,7 @@ class RecordAssociationTest < Test::Unit::TestCase
|
|
6
6
|
def setup
|
7
7
|
@client = Xeroizer::PublicApplication.new(CONSUMER_KEY, CONSUMER_SECRET)
|
8
8
|
mock_api('Invoices')
|
9
|
-
@client.stubs(:
|
9
|
+
@client.stubs(:http_put).returns(get_record_xml(:invoice, "762aa45d-4632-45b5-8087-b4f47690665e"))
|
10
10
|
end
|
11
11
|
|
12
12
|
context "belongs_to association" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xeroizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.15.
|
4
|
+
version: 2.15.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -630,7 +630,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
630
630
|
version: '0'
|
631
631
|
segments:
|
632
632
|
- 0
|
633
|
-
hash:
|
633
|
+
hash: -261170401126906910
|
634
634
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
635
635
|
none: false
|
636
636
|
requirements:
|
@@ -639,7 +639,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
639
639
|
version: '0'
|
640
640
|
segments:
|
641
641
|
- 0
|
642
|
-
hash:
|
642
|
+
hash: -261170401126906910
|
643
643
|
requirements: []
|
644
644
|
rubyforge_project:
|
645
645
|
rubygems_version: 1.8.29
|