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