Module: Quickbooks::Service::ServiceCrud

Included in:
BaseService
Defined in:
lib/quickbooks/service/service_crud.rb

Instance Method Summary collapse

Instance Method Details

#all(object_query = nil, options = {}) ⇒ Object

fetch all records, returns an array of models



10
11
12
13
14
15
16
# File 'lib/quickbooks/service/service_crud.rb', line 10

def all(object_query=nil, options={})
  collection = []
  self.query_in_batches(object_query, options) do |batch|
    collection << batch.entries
  end
  collection.flatten
end

#create(entity, options = {}) ⇒ Object Also known as: update



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/quickbooks/service/service_crud.rb', line 45

def create(entity, options = {})
  raise Quickbooks::InvalidModelException.new(entity.errors.full_messages.join(',')) unless entity.valid?
  xml = entity.to_xml_ns(options)

  response = do_http_post(url_for_resource(model.resource_for_singular), valid_xml_document(xml), options[:query])
  if response.code.to_i == 200
    model.from_xml(parse_singular_entity_response(model, response.plain_body))
  else
    nil
  end
end

#delete(entity) ⇒ Object

Raises:

  • (NotImplementedError)


58
59
60
# File 'lib/quickbooks/service/service_crud.rb', line 58

def delete(entity)
  raise NotImplementedError
end

#delete_by_query_string(entity, options = {}) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/quickbooks/service/service_crud.rb', line 62

def delete_by_query_string(entity, options = {})
  url = "#{url_for_resource(model::REST_RESOURCE)}?operation=delete"

  xml = entity.to_xml_ns(options)
  response = do_http_post(url, valid_xml_document(xml))
  if response.code.to_i == 200
    parse_singular_entity_response_for_delete(model, response.plain_body)
  else
    false
  end
end

#exists?(field, selector, options = {}) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/quickbooks/service/service_crud.rb', line 28

def exists?(field, selector, options={})
  find_by(field, selector, options).count > 0
end

#fetch_by_id(id, params = {}) ⇒ Object



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

def fetch_by_id(id, params = {})
  url = "#{url_for_resource(model.resource_for_singular)}/#{id}"
  fetch_object(model, url, params)
end

#find_by(field, selector, options = {}) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/quickbooks/service/service_crud.rb', line 32

def find_by(field, selector, options={})
  if field.class == Symbol
    field = field.to_s.camelcase
  end
  q = "select * from %s where %s = '%s'" % [model.resource_for_singular, field, selector]
  self.query(q, options)
end

#query(object_query = nil, options = {}) ⇒ Object



5
6
7
# File 'lib/quickbooks/service/service_crud.rb', line 5

def query(object_query = nil, options = {})
  fetch_collection(object_query, model, options)
end

#query_in_batches(object_query = nil, options = {}) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/quickbooks/service/service_crud.rb', line 18

def query_in_batches(object_query=nil, options={})
  page = 0
  per_page = options.delete(:per_page) || 1_000
  begin
    page += 1
    results = query(object_query, page: page, per_page: per_page)
    yield results if results.count > 0
  end until results.count < per_page
end