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.
@@ -1,5 +1,5 @@
1
1
  module Quickeebooks
2
2
 
3
- VERSION = "0.1.9"
3
+ VERSION = "0.1.10"
4
4
 
5
5
  end
@@ -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
- parse_and_raise_exceptione
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 parse_and_raise_exceptione
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.9
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-04 00:00:00.000000000 Z
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