quickeebooks 0.1.9 → 0.1.10
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.
- data/Gemfile.lock +1 -1
- data/HISTORY.md +4 -0
- data/README.md +54 -20
- data/coverage/index.html +444 -390
- data/lib/quickeebooks/version.rb +1 -1
- data/lib/quickeebooks/windows/service/job.rb +6 -2
- data/lib/quickeebooks/windows/service/payment_method.rb +0 -10
- data/lib/quickeebooks/windows/service/service_base.rb +17 -2
- data/spec/quickeebooks/windows/services/job_spec.rb +29 -1
- data/spec/xml/windows/job_list_error_invalid_filter_ordering.xml +9 -0
- metadata +3 -2
data/lib/quickeebooks/version.rb
CHANGED
@@ -5,7 +5,11 @@ module Quickeebooks
|
|
5
5
|
module Windows
|
6
6
|
module Service
|
7
7
|
class Job < Quickeebooks::Windows::Service::ServiceBase
|
8
|
-
|
8
|
+
|
9
|
+
FILTER_ORDER = %w{OfferingId IteratorId StartPage ChunkSize IncludeTagElements CDCAsOf SynchronizedFilter
|
10
|
+
DraftFilter ObjectStateEnable CustomFieldEnable CustomFieldQueryParam CustomFieldFilter CustomFieldDefinitionSet
|
11
|
+
ListIdSet StartCreatedTMS EndCreatedTMS StartModifiedTMS EndModifiedTMS CustomerIdSet IncludeFinancialIndicator}
|
12
|
+
|
9
13
|
def list(filters = [], page = 1, per_page = 20, sort = nil, options = {})
|
10
14
|
filters << Quickeebooks::Shared::Service::Filter.new(:boolean, :field => 'CustomFieldEnable', :value => true)
|
11
15
|
fetch_collection(Quickeebooks::Windows::Model::Job, nil, filters, page, per_page, sort, options)
|
@@ -15,7 +19,7 @@ module Quickeebooks
|
|
15
19
|
url = "#{url_for_resource(Quickeebooks::Windows::Model::Job::REST_RESOURCE)}/#{id}"
|
16
20
|
fetch_object(Quickeebooks::Windows::Model::Job, url, {:idDomain => idDomain})
|
17
21
|
end
|
18
|
-
|
22
|
+
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
@@ -1,13 +1,3 @@
|
|
1
|
-
# require 'quickeebooks/windows/service/service_base'
|
2
|
-
# require 'quickeebooks/windows/model/payment'
|
3
|
-
# require 'quickeebooks/windows/model/payment_method'
|
4
|
-
# require 'quickeebooks/windows/model/payment_line_item'
|
5
|
-
# require 'quickeebooks/windows/model/payment_detail'
|
6
|
-
# require 'quickeebooks/windows/model/credit_card'
|
7
|
-
# require 'quickeebooks/windows/model/credit_charge_info'
|
8
|
-
# require 'quickeebooks/windows/model/credit_charge_response'
|
9
|
-
# require 'nokogiri'
|
10
|
-
|
11
1
|
module Quickeebooks
|
12
2
|
module Windows
|
13
3
|
module Service
|
@@ -54,6 +54,20 @@ module Quickeebooks
|
|
54
54
|
"#{@base_uri}/#{raw}/v2/#{@realm_id}"
|
55
55
|
end
|
56
56
|
|
57
|
+
# Intuit API requires that filters obey a specific ordering
|
58
|
+
# Each Service implementation should have a +FILTER_ORDER+ Array constant
|
59
|
+
# defined. If this is defined than any filters given will be re-ordered
|
60
|
+
# to match the required ordering
|
61
|
+
def enforce_filter_order(filters)
|
62
|
+
if self.class.const_defined?(:FILTER_ORDER)
|
63
|
+
self.class.const_get(:FILTER_ORDER).map do |field|
|
64
|
+
filters.detect { |f| f.field.to_s == field }
|
65
|
+
end.compact
|
66
|
+
else
|
67
|
+
filters
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
57
71
|
private
|
58
72
|
|
59
73
|
def parse_xml(xml)
|
@@ -93,6 +107,7 @@ module Quickeebooks
|
|
93
107
|
|
94
108
|
# ... followed by any filters
|
95
109
|
if filters.is_a?(Array) && filters.length > 0
|
110
|
+
filters = enforce_filter_order(filters).compact
|
96
111
|
post_body_tags << filters.collect { |f| f.to_xml }
|
97
112
|
post_body_tags.flatten!
|
98
113
|
end
|
@@ -198,7 +213,7 @@ module Quickeebooks
|
|
198
213
|
when 200
|
199
214
|
# even HTTP 200 can contain an error, so we always have to peek for an Error
|
200
215
|
if response_is_error?
|
201
|
-
|
216
|
+
parse_and_raise_exception
|
202
217
|
else
|
203
218
|
response
|
204
219
|
end
|
@@ -213,7 +228,7 @@ module Quickeebooks
|
|
213
228
|
end
|
214
229
|
end
|
215
230
|
|
216
|
-
def
|
231
|
+
def parse_and_raise_exception
|
217
232
|
err = parse_intuit_error
|
218
233
|
ex = IntuitRequestException.new(err[:message])
|
219
234
|
ex.code = err[:code]
|
@@ -39,8 +39,36 @@ describe "Quickeebooks::Windows::Service::Job" do
|
|
39
39
|
my_job.dba_name.should == "EngeniusMicro"
|
40
40
|
my_job.acct_num.should == ".0000"
|
41
41
|
my_job.job_parent_name.should == ".0000.001"
|
42
|
+
end
|
43
|
+
|
44
|
+
it "gets a REST error when filters are not in expected order" do
|
45
|
+
xml = windowsFixture("job_list_error_invalid_filter_ordering.xml")
|
46
|
+
model = Quickeebooks::Windows::Model::Job
|
47
|
+
service = Quickeebooks::Windows::Service::Job.new
|
48
|
+
service.access_token = @oauth
|
49
|
+
service.realm_id = @realm_id
|
50
|
+
FakeWeb.register_uri(:post, service.url_for_resource(model::REST_RESOURCE), :status => ["200", "OK"], :body => xml)
|
51
|
+
|
52
|
+
|
53
|
+
filters = []
|
54
|
+
filters << Quickeebooks::Windows::Service::Filter.new(:datetime, :field => 'StartCreatedTMS', :value => Time.mktime(2013, 6, 1))
|
55
|
+
filters << Quickeebooks::Windows::Service::Filter.new(:datetime, :field => 'EndCreatedTMS', :value => Time.mktime(2013, 6, 10))
|
56
|
+
|
57
|
+
expect { response = service.list(filters) }.to raise_error(IntuitRequestException)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "reorders filters according to the Service specification" do
|
61
|
+
service = Quickeebooks::Windows::Service::Job.new
|
42
62
|
|
43
|
-
|
63
|
+
f1 = Quickeebooks::Windows::Service::Filter.new(:datetime, :field => 'StartCreatedTMS', :value => Time.mktime(2013, 6, 1))
|
64
|
+
f2 = Quickeebooks::Windows::Service::Filter.new(:boolean, :field => 'CustomFieldEnable', :value => true)
|
65
|
+
f3 = Quickeebooks::Windows::Service::Filter.new(:datetime, :field => 'EndCreatedTMS', :value => Time.mktime(2013, 6, 10))
|
66
|
+
|
67
|
+
out_of_order = [f1, f2, f3]
|
68
|
+
in_order = [f2, f1, f3]
|
69
|
+
reordered = service.enforce_filter_order(out_of_order)
|
70
|
+
|
71
|
+
reordered.should == in_order
|
44
72
|
end
|
45
73
|
|
46
74
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<RestResponse xmlns="http://www.intuit.com/sb/cdm/v2">
|
3
|
+
<Error RequestId="9dd3bf46bbd246318a4963575f8263bb">
|
4
|
+
<RequestName>ErrorRequest</RequestName>
|
5
|
+
<ProcessedTime>2013-06-06T17:58:31.512Z</ProcessedTime>
|
6
|
+
<ErrorCode>-2001</ErrorCode>
|
7
|
+
<ErrorDesc>cvc-complex-type.2.4.a: Invalid content was found starting with element 'CustomFieldEnable'. One of '{"http://www.intuit.com/sb/cdm/v2":CustomerIdSet, "http://www.intuit.com/sb/cdm/v2":IncludeFinancialIndicator}' is expected.</ErrorDesc>
|
8
|
+
</Error>
|
9
|
+
</RestResponse>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quickeebooks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: roxml
|
@@ -535,6 +535,7 @@ files:
|
|
535
535
|
- spec/xml/windows/http_401.xml
|
536
536
|
- spec/xml/windows/invoice_success_create.xml
|
537
537
|
- spec/xml/windows/invoices.xml
|
538
|
+
- spec/xml/windows/job_list_error_invalid_filter_ordering.xml
|
538
539
|
- spec/xml/windows/jobs.xml
|
539
540
|
- spec/xml/windows/payment_create_success.xml
|
540
541
|
- spec/xml/windows/payment_methods.xml
|