Sha256: e02c092fd85cff5f11a2bad5344e3b57b6e4c30f112bd853bea2e78618f5bf79

Contents?: true

Size: 1.3 KB

Versions: 25

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

module Mihari
  module Models
    module Concerns
      module Searchable
        extend ActiveSupport::Concern

        class_methods do
          #
          # @param [Mihari::Structs::Filters::Search] filter
          #
          # @return [Array<Mihari::Models::Rule>]
          #
          def search_by_filter(filter)
            limit = filter.limit.to_i
            raise ArgumentError, "limit should be greater than or equal to zero" if limit.negative?

            page = filter.page.to_i
            raise ArgumentError, "page should be greater than zero" unless page.positive?

            offset = (page - 1) * limit

            relation = build_relation(filter)
            relation.limit(limit).offset(offset).order(created_at: :desc)
          end

          #
          # @param [Mihari::Structs::Filters::Search] filter
          #
          # @return [Array<Mihari::Models::Rule>]
          #
          def count_by_filter(filter)
            relation = build_relation(filter)
            relation.distinct(:id).count
          end

          private

          #
          # @param [Mihari::Structs::Filters::Search] filter
          #
          def build_relation(filter)
            filter.q.empty? ? all : search(filter.q)
          end
        end
      end
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
mihari-8.1.0 lib/mihari/models/concerns/searchable.rb
mihari-8.0.2 lib/mihari/models/concerns/searchable.rb
mihari-8.0.1 lib/mihari/models/concerns/searchable.rb
mihari-8.0.0 lib/mihari/models/concerns/searchable.rb
mihari-7.6.4 lib/mihari/models/concerns/searchable.rb
mihari-7.6.3 lib/mihari/models/concerns/searchable.rb
mihari-7.6.2 lib/mihari/models/concerns/searchable.rb
mihari-7.6.1 lib/mihari/models/concerns/searchable.rb
mihari-7.6.0 lib/mihari/models/concerns/searchable.rb
mihari-7.5.0 lib/mihari/models/concerns/searchable.rb
mihari-7.4.0 lib/mihari/models/concerns/searchable.rb
mihari-7.3.2 lib/mihari/models/concerns/searchable.rb
mihari-7.3.1 lib/mihari/models/concerns/searchable.rb
mihari-7.3.0 lib/mihari/models/concerns/searchable.rb
mihari-7.2.0 lib/mihari/models/concerns/searchable.rb
mihari-7.1.3 lib/mihari/models/concerns/searchable.rb
mihari-7.1.2 lib/mihari/models/concerns/searchable.rb
mihari-7.1.1 lib/mihari/models/concerns/searchable.rb
mihari-7.1.0 lib/mihari/models/concerns/searchable.rb
mihari-7.0.5 lib/mihari/models/concerns/searchable.rb