marcelobarreto/postgrest-rb

View on GitHub
lib/postgrest/builders/filter_builder.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module Postgrest
  module Builders
    class FilterBuilder < BaseBuilder
      attr_accessor :inverse_next

      def initialize(http)
        super
        @inverse_next = false
      end

      %i[
        eq neq gt gte lt lte like
        ilike fts plfts phfts wfts
      ].each do |method_name|
        define_method(method_name) do |values|
          query = begin
            URI.decode_www_form(http.uri.query)
          rescue StandardError
            []
          end

          word = inverse_next ? "not.#{method_name}" : method_name
          @inverse_next = false
          values.each { |key, value| query << [key, "#{word}.#{value}"] }
          http.update_query_params(query)

          self
        end
      end

      def not
        @inverse_next = true
        self
      end
    end
  end
end