SpeciesFileGroup/taxonworks

View on GitHub
lib/queries/confidence/filter.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Queries
  module Confidence
    class Filter < Query::Filter
      include Concerns::Polymorphic
      polymorphic_klass(::Confidence)

      PARAMS = [
        *::Confidence.related_foreign_keys.map(&:to_sym),
        :confidence_id,
        :confidence_level_id,
        :confidence_object_id,
        :confidence_object_type,
        confidence_id: [],
        confidence_level_id: [],
        confidence_object_type: [],
      ].freeze

      # @return Array
      attr_accessor :confidence_id

      # @return Array
      attr_accessor :confidence_level_id

      # @return Array
      attr_accessor :confidence_object_type

      # @return Array
      attr_accessor :confidence_object_id

      # @params params [ActionController::Parameters]
      def initialize(query_params)
        super
        @confidence_id = params[:confidence_id]
        @confidence_level_id = [params[:confidence_level_id]].flatten.compact
        @confidence_object_type = params[:confidence_object_type]
        @confidence_object_id = params[:confidence_object_id]

        set_polymorphic_params(params)
      end

      def confidence_id
        [@confidence_id].flatten.compact.uniq
      end

      def confidence_object_type
        [@confidence_object_type].flatten.compact
      end

      def confidence_object_id
        [@confidence_object_id].flatten.compact
      end

      # @return [Arel::Node, nil]
      def confidence_level_id_facet
        confidence_level_id.present? ? table[:confidence_level_id].in(confidence_level_id)  : nil
      end

      # @return [Arel::Node, nil]
      def confidence_object_type_facet
        confidence_object_type.present? ? table[:confidence_object_type].in(confidence_object_type)  : nil
      end

      # @return [Arel::Node, nil]
      def confidence_object_id_facet
        confidence_object_id.empty? ? nil : table[:confidence_object_id].in(confidence_object_id)
      end

      def and_clauses
        [
          confidence_level_id_facet,
          confidence_object_id_facet,
          confidence_object_type_facet,
        ]
      end

    end
  end
end