Sha256: e5329187bea986856ff742ad3aa4b67d3bbf6a6d59879137f14acefdde5a0d6e

Contents?: true

Size: 1.79 KB

Versions: 11

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

module LedgerSync
  module NetSuite
    class Searcher < Ledgers::Searcher
      include LedgerSync::Ledgers::Mixins::OffsetAndLimitPaginationSearcherMixin

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

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

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

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

      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::NetSuite::Error::SubsidiariesNotEnabled
            end
          end
        end
      end

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

      private

      def default_offset
        0
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
ledger_sync-netsuite-0.5.0 lib/ledger_sync/netsuite/searcher.rb
ledger_sync-netsuite-0.4.2 lib/ledger_sync/netsuite/searcher.rb
ledger_sync-netsuite-0.3.6 lib/ledger_sync/netsuite/searcher.rb
ledger_sync-netsuite-0.3.5 lib/ledger_sync/netsuite/searcher.rb
ledger_sync-netsuite-0.3.4 lib/ledger_sync/netsuite/searcher.rb
ledger_sync-netsuite-0.3.3 lib/ledger_sync/netsuite/searcher.rb
ledger_sync-netsuite-0.3.2 lib/ledger_sync/netsuite/searcher.rb
ledger_sync-netsuite-0.3.1 lib/ledger_sync/netsuite/searcher.rb
ledger_sync-netsuite-0.3.0 lib/ledger_sync/netsuite/searcher.rb
ledger_sync-netsuite-0.2.0 lib/ledger_sync/netsuite/searcher.rb
ledger_sync-netsuite-0.1.1 lib/ledger_sync/netsuite/searcher.rb