lib/mihari/models/rule.rb in mihari-6.3.0 vs lib/mihari/models/rule.rb in mihari-7.0.0
- old
+ new
@@ -1,81 +1,40 @@
# frozen_string_literal: true
-require "yaml"
-
module Mihari
module Models
#
# Rule model
#
class Rule < ActiveRecord::Base
has_many :alerts, dependent: :destroy
+ has_many :taggings, dependent: :destroy
+ has_many :tags, through: :taggings
+ include SearchCop
+ include Concerns::Searchable
+
+ search_scope :search do
+ attributes :id, :title, :description, :created_at, :updated_at
+ attributes tag: "tags.name"
+ end
+
def symbolized_data
@symbolized_data ||= data.deep_symbolize_keys
end
def yaml
data.to_yaml
end
- def tags
- (data["tags"] || []).map { |tag| { name: tag } }
- end
-
class << self
- #
- # Search rules
- #
- # @param [Mihari::Structs::Filters::Rule::SearchFilterWithPagination] filter
- #
- # @return [Array<Rule>]
- #
- def search(filter)
- limit = filter.limit.to_i
- raise ArgumentError, "limit should be bigger than zero" unless limit.positive?
+ # @!method search_by_filter(filter)
+ # @param [Mihari::Structs::Filters::Search] filter
+ # @return [Array<Mihari::Models::Alert>]
- page = filter.page.to_i
- raise ArgumentError, "page should be bigger than zero" unless page.positive?
-
- offset = (page - 1) * limit
-
- relation = build_relation(filter.without_pagination)
- relation.limit(limit).offset(offset).order(created_at: :desc)
- end
-
- #
- # Count alerts
- #
- # @param [Mihari::Structs::Filters::Rule::SearchFilterWithPagination] filter
- #
- # @return [Integer]
- #
- def count(filter)
- relation = build_relation(filter)
- relation.distinct("rules.id").count
- end
-
- private
-
- #
- # @param [Mihari::Structs::Filters::Rule::SearchFilter] filter
- #
- # @return [Mihari::Models::Rule]
- #
- def build_relation(filter)
- relation = includes(alerts: :tags)
-
- relation = relation.where(alerts: { tags: { name: filter.tag } }) if filter.tag
-
- relation = relation.where("rules.title LIKE ?", "%#{filter.title}%") if filter.title
- relation = relation.where("rules.description LIKE ?", "%#{filter.description}%") if filter.description
-
- relation = relation.where("rules.created_at >= ?", filter.from_at) if filter.from_at
- relation = relation.where("rules.created_at <= ?", filter.to_at) if filter.to_at
-
- relation
- end
+ # @!method count_by_filter(filter)
+ # @param [Mihari::Structs::Filters::Search] filter
+ # @return [Integer]
end
end
end
end