Sha256: 3f13f889bdf960c753a34d9cb09cf127c80cc0b4b0007fbf311ad34597cf88dc

Contents?: true

Size: 926 Bytes

Versions: 11

Compression:

Stored size: 926 Bytes

Contents

# frozen_string_literal: true
module Kasket
  module SelectManagerMixin
    # binds can be removed once we stop supporting Rails < 5.2
    def to_kasket_query(klass, binds = [])
      begin
        query = Kasket::Visitor.new(klass, binds).accept(ast)
      rescue TypeError # unsupported object in ast
        return nil
      end

      return nil if query.nil? || query == :unsupported
      return nil if query[:attributes].blank?

      query[:index] = query[:attributes].map(&:first)

      if query[:limit]
        return nil if query[:limit] > 1
        # return nil if !query[:index].include?(:id)
      end

      if query[:index].size > 1 && query[:attributes].any? { |_attribute, value| value.is_a?(Array) }
        return nil
      end

      query[:key] = klass.kasket_key_for(query[:attributes])
      query[:key] << '/first' if query[:limit] == 1 && !query[:index].include?(:id)

      query
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
kasket-4.14.2 lib/kasket/select_manager_mixin.rb
kasket-4.14.1 lib/kasket/select_manager_mixin.rb
kasket-4.14.0 lib/kasket/select_manager_mixin.rb
kasket-4.13.0 lib/kasket/select_manager_mixin.rb
kasket-4.12.0 lib/kasket/select_manager_mixin.rb
kasket-4.11.0 lib/kasket/select_manager_mixin.rb
kasket-4.10.4 lib/kasket/select_manager_mixin.rb
kasket-4.10.2.1 lib/kasket/select_manager_mixin.rb
kasket-4.10.0 lib/kasket/select_manager_mixin.rb
kasket-4.9.1 lib/kasket/select_manager_mixin.rb
kasket-4.9.0 lib/kasket/select_manager_mixin.rb