module ForemanOpenscap::ComplianceStatusScopedSearch::ClassMethods
def apply_condition(scope, negate, conditions)
def apply_condition(scope, negate, conditions) if negate scope.where.not(conditions) else scope.where(conditions) end end
def policy_search(search_alias)
def policy_search(search_alias) scoped_search :relation => :policy, :on => :name, :complete_value => true, :rename => search_alias, :only_explicit => true end
def query_conditions(query)
def query_conditions(query) { :conditions => "reports.id IN (#{query})" } end
def query_conditions_from_scope(scope)
def query_conditions_from_scope(scope) query = scope.select(ArfReport.arel_table[:id]).to_sql query_conditions query end
def search_by_compliance_status(key, operator, value)
def search_by_compliance_status(key, operator, value) scope = case value when 'compliant' ArfReport.passed when 'incompliant' ArfReport.failed when 'inconclusive' ArfReport.othered end query_conditions_from_scope scope end
def search_by_comply_with(_key, _operator, policy_name)
def search_by_comply_with(_key, _operator, policy_name) search_by_policy_results policy_name, &:passed end
def search_by_host_collection_name(key, operator, value)
def search_by_host_collection_name(key, operator, value) scope = apply_condition(::Host.joins(:host_collections), operator == '<>', :katello_host_collections => { :name => value }) query_conditions_from_scope ForemanOpenscap::ArfReport.where(:host_id => scope) end
def search_by_inconclusive_with(_key, _operator, policy_name)
def search_by_inconclusive_with(_key, _operator, policy_name) search_by_policy_results policy_name, &:othered end
def search_by_last_for(key, operator, by)
def search_by_last_for(key, operator, by) by.gsub!(/[^[:alnum:]]/, '') case by.downcase when 'host' { :conditions => "reports.id IN ( SELECT MAX(id) FROM reports sub WHERE sub.type = 'ForemanOpenscap::ArfReport' AND sub.host_id = reports.host_id )" } when 'policy' { :conditions => 'reports.id IN ( SELECT latest.id FROM foreman_openscap_policies INNER JOIN (SELECT policy_id, MAX(reports.id) AS id FROM reports INNER JOIN foreman_openscap_policy_arf_reports ON reports.id = foreman_openscap_policy_arf_reports.arf_report_id GROUP BY policy_id ) latest ON foreman_openscap_policies.id = latest.policy_id)' } else raise "Cannot search last by #{by}" end end
def search_by_not_comply_with(_key, _operator, policy_name)
def search_by_not_comply_with(_key, _operator, policy_name) search_by_policy_results policy_name, &:failed end
def search_by_policy_results(policy_name, &selection)
def search_by_policy_results(policy_name, &selection) scope = ArfReport.of_policy(Policy.find_by(:name => policy_name).id) .instance_eval(&selection) query_conditions_from_scope scope end
def search_by_rule(rule_name, rule_result)
def search_by_rule(rule_name, rule_result) query = ArfReport.by_rule_result(rule_name, rule_result) .select(ArfReport.arel_table[:id]).to_sql query_conditions query end
def search_by_rule_failed(key, operator, rule_name)
def search_by_rule_failed(key, operator, rule_name) search_by_rule rule_name, "fail" end
def search_by_rule_othered(key, operator, rule_name)
def search_by_rule_othered(key, operator, rule_name) search_by_rule rule_name, LogExtensions.othered_result_constants end
def search_by_rule_passed(key, operator, rule_name)
def search_by_rule_passed(key, operator, rule_name) search_by_rule rule_name, "pass" end