diff --git a/lib/quickbooks-ruby.rb b/lib/quickbooks-ruby.rb index 35a330ae..9a705fae 100644 --- a/lib/quickbooks-ruby.rb +++ b/lib/quickbooks-ruby.rb @@ -191,6 +191,7 @@ module Quickbooks @@sandbox_mode = false @@logger = nil + @@minorversion = 47 class << self def sandbox_mode @@ -201,6 +202,14 @@ def sandbox_mode=(sandbox_mode) @@sandbox_mode = sandbox_mode end + def minorversion=(v) + @@minorversion = v + end + + def minorversion + @@minorversion + end + def logger @@logger ||= ::Logger.new($stdout) # TODO: replace with a real log file end diff --git a/lib/quickbooks/model/account.rb b/lib/quickbooks/model/account.rb index 0ed2fc4c..80af278e 100644 --- a/lib/quickbooks/model/account.rb +++ b/lib/quickbooks/model/account.rb @@ -4,7 +4,6 @@ class Account < BaseModel XML_COLLECTION_NODE = "Account" XML_NODE = "Account" REST_RESOURCE = 'account' - MINORVERSION = 13 ASSET = 'Asset' EQUITY = 'Equity' diff --git a/lib/quickbooks/model/customer.rb b/lib/quickbooks/model/customer.rb index 98e5b5a8..a1f2a4fb 100644 --- a/lib/quickbooks/model/customer.rb +++ b/lib/quickbooks/model/customer.rb @@ -16,8 +16,6 @@ class Customer < BaseModel include NameEntity::Quality include NameEntity::PermitAlterations - MINORVERSION = 33 - xml_name XML_NODE xml_accessor :id, :from => 'Id' xml_accessor :sync_token, :from => 'SyncToken', :as => Integer diff --git a/lib/quickbooks/model/invoice.rb b/lib/quickbooks/model/invoice.rb index fcc29c58..1d6ef706 100644 --- a/lib/quickbooks/model/invoice.rb +++ b/lib/quickbooks/model/invoice.rb @@ -17,7 +17,6 @@ class Invoice < BaseModel XML_COLLECTION_NODE = "Invoice" XML_NODE = "Invoice" EMAIL_STATUS_NEED_TO_SEND = 'NeedToSend' - MINORVERSION = 37 xml_accessor :id, :from => 'Id' xml_accessor :sync_token, :from => 'SyncToken', :as => Integer diff --git a/lib/quickbooks/model/item.rb b/lib/quickbooks/model/item.rb index a185ac18..65655f82 100644 --- a/lib/quickbooks/model/item.rb +++ b/lib/quickbooks/model/item.rb @@ -10,7 +10,6 @@ class Item < BaseModel XML_COLLECTION_NODE = "Item" XML_NODE = "Item" REST_RESOURCE = 'item' - MINORVERSION = 47 INVENTORY_TYPE = 'Inventory' NON_INVENTORY_TYPE = 'NonInventory' diff --git a/lib/quickbooks/model/preferences.rb b/lib/quickbooks/model/preferences.rb index a4d40e84..cceea55b 100644 --- a/lib/quickbooks/model/preferences.rb +++ b/lib/quickbooks/model/preferences.rb @@ -4,7 +4,6 @@ class Preferences < BaseModel XML_COLLECTION_NODE = "Preferences" XML_NODE = "Preferences" REST_RESOURCE = 'preferences' - MINORVERSION = 32 xml_name XML_NODE diff --git a/lib/quickbooks/model/purchase_order.rb b/lib/quickbooks/model/purchase_order.rb index 7a239faf..eec9b659 100644 --- a/lib/quickbooks/model/purchase_order.rb +++ b/lib/quickbooks/model/purchase_order.rb @@ -8,7 +8,6 @@ class PurchaseOrder < BaseModel REST_RESOURCE = 'purchaseorder' XML_COLLECTION_NODE = "PurchaseOrder" XML_NODE = "PurchaseOrder" - MINORVERSION = 45 xml_accessor :id, :from => 'Id' xml_accessor :sync_token, :from => 'SyncToken', :as => Integer diff --git a/lib/quickbooks/service/access_token.rb b/lib/quickbooks/service/access_token.rb index 010639d6..5e22dc39 100644 --- a/lib/quickbooks/service/access_token.rb +++ b/lib/quickbooks/service/access_token.rb @@ -23,7 +23,8 @@ def renew def disconnect conn = Faraday.new conn.basic_auth oauth.client.id, oauth.client.secret - response = conn.post(DISCONNECT_URL, token: oauth.refresh_token || oauth.token) + url = "#{DISCONNECT_URL}?minorversion=#{Quickbooks.minorversion}" + response = conn.post(url, token: oauth.refresh_token || oauth.token) if response.success? Quickbooks::Model::AccessTokenResponse.new(error_code: "0") diff --git a/lib/quickbooks/service/account.rb b/lib/quickbooks/service/account.rb index 7291b65f..ed8db0f0 100644 --- a/lib/quickbooks/service/account.rb +++ b/lib/quickbooks/service/account.rb @@ -7,11 +7,6 @@ def delete(account) update(account, :sparse => true) end - def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - url = super(query, start_position, max_results, options) - "#{url}&minorversion=#{Quickbooks::Model::Account::MINORVERSION}" - end - private def model diff --git a/lib/quickbooks/service/base_service.rb b/lib/quickbooks/service/base_service.rb index af7f2d93..66c879e6 100644 --- a/lib/quickbooks/service/base_service.rb +++ b/lib/quickbooks/service/base_service.rb @@ -229,6 +229,8 @@ def do_http_file_upload(uploadIO, url, metadata = nil) body['file_metadata_0'] = param_part end + url = add_query_string_to_url(url, {}) + do_http(:upload, url, body, headers) end @@ -292,7 +294,9 @@ def oauth_post_with_multipart(url, body, headers) @oauth.post_with_multipart(url, headers: headers, body: body, raise_errors: false) end - def add_query_string_to_url(url, params) + def add_query_string_to_url(url, params = {}) + params ||= {} + params['minorversion'] = Quickbooks.minorversion if params.is_a?(Hash) && !params.empty? keyvalues = params.collect { |k| "#{k.first}=#{k.last}" }.join("&") delim = url.index("?") != nil ? "&" : "?" diff --git a/lib/quickbooks/service/customer.rb b/lib/quickbooks/service/customer.rb index c108da72..68f11dc4 100644 --- a/lib/quickbooks/service/customer.rb +++ b/lib/quickbooks/service/customer.rb @@ -7,21 +7,11 @@ def delete(customer) update(customer, :sparse => true) end - def url_for_resource(resource) - url = super(resource) - "#{url}?minorversion=#{Quickbooks::Model::Customer::MINORVERSION}" - end - def fetch_by_id(id, params = {}) - url = "#{url_for_base}/customer/#{id}?minorversion=#{Quickbooks::Model::Customer::MINORVERSION}" + url = "#{url_for_base}/customer/#{id}" fetch_object(model, url, params) end - def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - url = super(query, start_position, max_results, options) - "#{url}&minorversion=#{Quickbooks::Model::Customer::MINORVERSION}" - end - private def model diff --git a/lib/quickbooks/service/invoice.rb b/lib/quickbooks/service/invoice.rb index c1c4492b..ed2dd44c 100644 --- a/lib/quickbooks/service/invoice.rb +++ b/lib/quickbooks/service/invoice.rb @@ -6,20 +6,11 @@ def delete(invoice) delete_by_query_string(invoice) end - def url_for_resource(resource) - url = super(resource) - end - def fetch_by_id(id, params = {}) - url = "#{url_for_base}/invoice/#{id}?minorversion=#{Quickbooks::Model::Invoice::MINORVERSION}" + url = "#{url_for_base}/invoice/#{id}" fetch_object(model, url, params) end - def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - url = super(query, start_position, max_results, options) - "#{url}&minorversion=#{Quickbooks::Model::Invoice::MINORVERSION}" - end - def send(invoice, email_address=nil) query = email_address.present? ? "?sendTo=#{email_address}" : "" url = "#{url_for_resource(model::REST_RESOURCE)}/#{invoice.id}/send#{query}" diff --git a/lib/quickbooks/service/item.rb b/lib/quickbooks/service/item.rb index ef56735f..51b1c916 100644 --- a/lib/quickbooks/service/item.rb +++ b/lib/quickbooks/service/item.rb @@ -7,21 +7,11 @@ def delete(item) update(item, :sparse => true) end - def url_for_resource(resource) - url = super(resource) - "#{url}?minorversion=#{Quickbooks::Model::Item::MINORVERSION}" - end - def fetch_by_id(id, params = {}) - url = "#{url_for_base}/item/#{id}?minorversion=#{Quickbooks::Model::Item::MINORVERSION}" + url = "#{url_for_base}/item/#{id}" fetch_object(model, url, params) end - def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - url = super(query, start_position, max_results, options) - "#{url}&minorversion=#{Quickbooks::Model::Item::MINORVERSION}" - end - private def model diff --git a/lib/quickbooks/service/preferences.rb b/lib/quickbooks/service/preferences.rb index 474bf8f5..4623e926 100644 --- a/lib/quickbooks/service/preferences.rb +++ b/lib/quickbooks/service/preferences.rb @@ -2,11 +2,6 @@ module Quickbooks module Service class Preferences < BaseService - def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - url = super(query, start_position, max_results, options) - "#{url}&minorversion=#{Quickbooks::Model::Preferences::MINORVERSION}" - end - private def model diff --git a/lib/quickbooks/service/service_crud_json.rb b/lib/quickbooks/service/service_crud_json.rb index 68594bc4..a540747c 100644 --- a/lib/quickbooks/service/service_crud_json.rb +++ b/lib/quickbooks/service/service_crud_json.rb @@ -8,7 +8,7 @@ def fetch_by_id(id, params = {}) def create(entity, options = {}) raise Quickbooks::InvalidModelException.new(entity.errors.full_messages.join(',')) unless entity.valid? - response = do_http(:post, url_for_resource(model.resource_for_singular), entity.to_json, options) + response = do_http_post(url_for_resource(model.resource_for_singular), entity.to_json, options) if response.code.to_i == 200 JSON.parse(response.plain_body) else diff --git a/spec/lib/quickbooks/service/account_spec.rb b/spec/lib/quickbooks/service/account_spec.rb index 0bf9c756..7f5b036d 100644 --- a/spec/lib/quickbooks/service/account_spec.rb +++ b/spec/lib/quickbooks/service/account_spec.rb @@ -5,6 +5,7 @@ it "can query for accounts" do xml = fixture("accounts.xml") + stub_http_request(:get, @service.url_for_query, ["200", "OK"], xml, {}, true) accounts = @service.query diff --git a/spec/lib/quickbooks/service/base_service_spec.rb b/spec/lib/quickbooks/service/base_service_spec.rb index 7bc83eb8..ea1f97da 100644 --- a/spec/lib/quickbooks/service/base_service_spec.rb +++ b/spec/lib/quickbooks/service/base_service_spec.rb @@ -223,8 +223,9 @@ end it "calls before_request" do + v = Quickbooks.minorversion output_string = "BEFORE REQUEST:\nurl: https://quickbooks.api.intuit.com/v3/company/9991111222/query?query=SE"\ - "LECT+%2A+FROM+Vendor+STARTPOSITION+1+MAXRESULTS+20\nheaders: {\"Content-Type\"=>\"applicatio"\ + "LECT+%2A+FROM+Vendor+STARTPOSITION+1+MAXRESULTS+20&minorversion=#{v}\nheaders: {\"Content-Type\"=>\"applicatio"\ "n/xml\", \"Accept\"=>\"application/xml\", \"Accept-Encoding\"=>\"gzip, deflate\"}\nbody: {}"\ "\nmethod: get\n" @@ -247,8 +248,9 @@ end it "calls after_request" do + v = Quickbooks.minorversion output_string = "AFTER REQUEST:\nurl: https://quickbooks.api.intuit.com/v3/company/9991111222/query?query=SEL"\ - "ECT+%2A+FROM+Vendor+STARTPOSITION+1+MAXRESULTS+20\nheaders: {\"Content-Type\"=>\"application"\ + "ECT+%2A+FROM+Vendor+STARTPOSITION+1+MAXRESULTS+20&minorversion=#{v}\nheaders: {\"Content-Type\"=>\"application"\ "/xml\", \"Accept\"=>\"application/xml\", \"Accept-Encoding\"=>\"gzip, deflate\", \"Authoriza"\ "tion\"=>\"Bearer token\"}\nbody: {}\nmethod: get\nresponse: \n\"application/xml\", \"Accept\"=>\"application/xml\", \"Accept-Encoding\"=>\"gzip, deflate"\ "\"}\nbody: {}\nmethod: get\nAROUND REQUEST (AFTER CALL):\nresponse: \n