Class: Quickbooks::Service::BaseService

Inherits:
Object
  • Object
show all
Includes:
ServiceCrud, Util::Logging
Defined in:
lib/quickbooks/service/base_service.rb

Defined Under Namespace

Classes: RequestInfo

Constant Summary collapse

XML_NS =
%{xmlns="http://schema.intuit.com/finance/v3"}
HTTP_CONTENT_TYPE =
'application/xml'
HTTP_ACCEPT =
'application/xml'
HTTP_ACCEPT_ENCODING =
'gzip, deflate'
BASE_DOMAIN =
'quickbooks.api.intuit.com'
SANDBOX_DOMAIN =
'sandbox-quickbooks.api.intuit.com'

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ServiceCrud

#all, #create, #delete, #delete_by_query_string, #exists?, #fetch_by_id, #find_by, #query, #query_in_batches

Methods included from Util::Logging

#log, #log?, #log_xml

Constructor Details

#initialize(attributes = {}) ⇒ BaseService

Returns a new instance of BaseService.



25
26
27
28
29
# File 'lib/quickbooks/service/base_service.rb', line 25

def initialize(attributes = {})
  domain = Quickbooks.sandbox_mode ? SANDBOX_DOMAIN : BASE_DOMAIN
  @base_uri = "https://#{domain}/v3/company"
  attributes.each {|key, value| public_send("#{key}=", value) }
end

Instance Attribute Details

#after_requestObject

Returns the value of attribute after_request.



14
15
16
# File 'lib/quickbooks/service/base_service.rb', line 14

def after_request
  @after_request
end

#around_requestObject

Returns the value of attribute around_request.



13
14
15
# File 'lib/quickbooks/service/base_service.rb', line 13

def around_request
  @around_request
end

#base_uriObject (readonly)

Returns the value of attribute base_uri.



9
10
11
# File 'lib/quickbooks/service/base_service.rb', line 9

def base_uri
  @base_uri
end

#before_requestObject

Returns the value of attribute before_request.



12
13
14
# File 'lib/quickbooks/service/base_service.rb', line 12

def before_request
  @before_request
end

#company_idObject

Returns the value of attribute company_id.



7
8
9
# File 'lib/quickbooks/service/base_service.rb', line 7

def company_id
  @company_id
end

#last_response_intuit_tidObject (readonly)

Returns the value of attribute last_response_intuit_tid.



11
12
13
# File 'lib/quickbooks/service/base_service.rb', line 11

def last_response_intuit_tid
  @last_response_intuit_tid
end

#last_response_xmlObject (readonly)

Returns the value of attribute last_response_xml.



10
11
12
# File 'lib/quickbooks/service/base_service.rb', line 10

def last_response_xml
  @last_response_xml
end

#oauthObject

Returns the value of attribute oauth.



8
9
10
# File 'lib/quickbooks/service/base_service.rb', line 8

def oauth
  @oauth
end

Instance Method Details

#access_token=(token) ⇒ Object



31
32
33
34
# File 'lib/quickbooks/service/base_service.rb', line 31

def access_token=(token)
  @oauth = token
  rebuild_connection!
end

#default_model_queryObject



78
79
80
# File 'lib/quickbooks/service/base_service.rb', line 78

def default_model_query
  "SELECT * FROM #{self.class.name.split("::").last}"
end

#is_json?Boolean

Returns:

  • (Boolean)


70
71
72
# File 'lib/quickbooks/service/base_service.rb', line 70

def is_json?
  self.class::HTTP_CONTENT_TYPE == "application/json"
end

#is_pdf?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/quickbooks/service/base_service.rb', line 74

def is_pdf?
  self.class::HTTP_CONTENT_TYPE == "application/pdf"
end

#realm_id=(company_id) ⇒ Object

realm & company are synonymous



41
42
43
# File 'lib/quickbooks/service/base_service.rb', line 41

def realm_id=(company_id)
  @company_id = company_id
end

#rebuild_connection!Object

OAuth2

The default Faraday connection does not have gzip or multipart support.

We need to reset the existing connection and build a new one.



51
52
53
54
55
56
57
58
59
# File 'lib/quickbooks/service/base_service.rb', line 51

def rebuild_connection!
  @oauth.client.connection = nil
  @oauth.client.connection.build do |builder|
    builder.use :gzip
    builder.request :multipart
    builder.request :url_encoded
    builder.adapter :net_http
  end
end

#url_for_baseObject

Raises:



65
66
67
68
# File 'lib/quickbooks/service/base_service.rb', line 65

def url_for_base
  raise MissingRealmError.new unless @company_id
  "#{@base_uri}/#{@company_id}"
end

#url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) ⇒ Object



82
83
84
85
86
87
# File 'lib/quickbooks/service/base_service.rb', line 82

def url_for_query(query = nil, start_position = 1, max_results = 20, options = {})
  query ||= default_model_query
  query = "#{query} STARTPOSITION #{start_position} MAXRESULTS #{max_results}"

  "#{url_for_base}/query?query=#{CGI.escape(query)}"
end

#url_for_resource(resource) ⇒ Object



61
62
63
# File 'lib/quickbooks/service/base_service.rb', line 61

def url_for_resource(resource)
  "#{url_for_base}/#{resource}"
end