SpeciesFileGroup/taxonworks

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

Summary

Maintainability
A
0 mins
Test Coverage
module Queries
  module TaxonDetermination
    class Filter < Query::Filter

      PARAMS = [
        :collection_object_id,
        :otu_id,
        :taxon_determination_id,
        :biological_colletion_object_id,

        taxon_determination_object_type: [],
        taxon_determination_object_id: [],
        biological_collection_object_id: [],
        collection_object_id: [],
        determiner_id: [],
        otu_id: [],
        taxon_determination_id: [],
      ].freeze

      # all Arrays
      attr_accessor :taxon_determination_id
      attr_accessor :collection_object_id
      attr_accessor :biological_collection_object_id
      attr_accessor :otu_id
      attr_accessor :determiner_id
      attr_accessor :taxon_determination_object_type
      attr_accessor :taxon_determination_object_id

      def initialize(query_params = {})
        super

        @biological_collection_object_id = params[:biological_collection_object_id]
        @collection_object_id = params[:collection_object_id]
        @determiner_id = params[:determiner_id]
        @otu_id = params[:otu_id]
        @taxon_determination_id = params[:taxon_determination_id]
        @taxon_determination_object_id = params[:taxon_determination_object_id]
        @taxon_determination_object_type = params[:taxon_determination_object_type]
      end

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

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

      def collection_object_id
        [@collection_object_id, @biological_collection_object_id].flatten.compact.uniq
      end

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

      def taxon_determination_object_type
        [@taxon_determination_object_type].flatten.compact
      end

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

      def otu_id_facet
        return nil if otu_id.empty?
        table[:otu_id].in(otu_id)
      end

      def collection_object_id_facet
        return nil if collection_object_id.empty?
        table[:taxon_determination_object_id].in(collection_object_id)
        .and(table[:taxon_determination_object_type].eq('CollectionObject'))
      end

      def taxon_determination_object_type_facet
        return nil if taxon_determination_object_type.empty?
        table[:taxon_determination_object_type].in(taxon_determination_object_type)
      end

      def taxon_determination_object_id_facet
        return nil if taxon_determination_object_id.empty?
        table[:taxon_determination_object_id].in(taxon_determination_object_id)
      end

      def determiner_id_facet
        return nil if determiner_id.empty?
        ::TaxonDetermination.joins(:determiner_roles).where(
          roles: {person_id: determiner_id}
        )
      end

      # @return [Arel::Table]
      def roles_table
        ::Role.arel_table
      end

      def merge_clauses
        [
          determiner_id_facet
        ]
      end

      def and_clauses
        [
          otu_id_facet,
          collection_object_id_facet,
          taxon_determination_object_id_facet,
          taxon_determination_object_type_facet
        ]
      end

    end
  end
end