Class: LedgerSync::Ledgers::NetSuite::Searcher

Inherits:
Searcher
  • Object
show all
Includes:
Mixins::OffsetAndLimitPaginationSearcherMixin
Defined in:
lib/ledger_sync/ledgers/netsuite/searcher.rb

Instance Attribute Summary

Attributes inherited from Searcher

#client, #pagination, #query, #request

Instance Method Summary collapse

Methods included from Mixins::OffsetAndLimitPaginationSearcherMixin

#next_searcher, #previous_searcher

Methods inherited from Searcher

#deserializer_class, #initialize, #next_searcher, #previous_searcher, #search

Methods included from Mixins::SerializationMixin

#deserializer, included, #serializer

Methods included from Mixins::InferSerializerMixin

included

Methods included from Mixins::InferResourceClassMixin

included

Constructor Details

This class inherits a constructor from LedgerSync::Ledgers::Searcher

Instance Method Details

#query_attributesObject



9
10
11
# File 'lib/ledger_sync/ledgers/netsuite/searcher.rb', line 9

def query_attributes
  @query_attributes ||= searcher_deserializer_class.attributes.values.map(&:hash_attribute)
end

#query_stringObject



13
14
15
# File 'lib/ledger_sync/ledgers/netsuite/searcher.rb', line 13

def query_string
  "SELECT #{query_attributes.join(', ')} FROM #{query_table}"
end

#query_tableObject



17
18
19
# File 'lib/ledger_sync/ledgers/netsuite/searcher.rb', line 17

def query_table
  @query_table ||= client.class.ledger_resource_type_for(resource_class: self.class.inferred_resource_class)
end

#request_urlObject



21
22
23
# File 'lib/ledger_sync/ledgers/netsuite/searcher.rb', line 21

def request_url
  client.api_base_url.gsub('/record/v1', '') + "/query/v1/suiteql?limit=#{limit}&offset=#{offset}"
end

#resourcesObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/ledger_sync/ledgers/netsuite/searcher.rb', line 25

def resources
  resource_class = self.class.inferred_resource_class

  @resources ||= begin
    @request = client
               .post(
                 body: { q: query_string.to_s },
                 request_url: request_url
               )

    case request.status
    when 200
      request.body
             .fetch('items')
             .map do |c|
        searcher_deserializer_class.new.deserialize(hash: c, resource: resource_class.new)
      end
    when 404
      []
    when 400
      if request.body["title"].include? "Invalid search query Search error occurred: Record ‘subsidiary’ was not found"
        raise LedgerSync::Ledgers::NetSuite::Error::SubsidiariesNotEnabled
      end
    end
  end
end

#searcher_deserializer_classObject



52
53
54
# File 'lib/ledger_sync/ledgers/netsuite/searcher.rb', line 52

def searcher_deserializer_class
  @searcher_deserializer_class ||= self.class.inferred_serialization_class(type: 'SearcherDeserializer')
end