Class: Katello::ContentViewPackageFilter

Inherits:
ContentViewFilter show all
Defined in:
app/models/katello/content_view_package_filter.rb

Constant Summary collapse

CONTENT_TYPE =
Rpm::CONTENT_TYPE

Constants inherited from ContentViewFilter

Katello::ContentViewFilter::CONTENT_OPTIONS, Katello::ContentViewFilter::CONTENT_TYPES, Katello::ContentViewFilter::DEB, Katello::ContentViewFilter::DOCKER, Katello::ContentViewFilter::ERRATA, Katello::ContentViewFilter::MODULE_STREAM, Katello::ContentViewFilter::PACKAGE_GROUP, Katello::ContentViewFilter::RPM

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ContentViewFilter

applicable, #applicable_repos, #as_json, class_for, #content_type, create_for, deb, docker, errata, #filter_type, module_stream, #original_module_streams=, #params_format, #resulting_products, rule_class_for, rule_ids_for, #validate_content_view, #validate_filter_repos, yum

Methods inherited from Model

#destroy!

Class Method Details

.generate_rpm_clauses(package_filenames = []) ⇒ Object



45
46
47
# File 'app/models/katello/content_view_package_filter.rb', line 45

def self.generate_rpm_clauses(package_filenames = [])
  { 'filename' => { "$in" => package_filenames.sort } } unless package_filenames.empty?
end

Instance Method Details

#applicable_rpmsObject



49
50
51
# File 'app/models/katello/content_view_package_filter.rb', line 49

def applicable_rpms
  Rpm.in_repositories(self.applicable_repos)
end

#content_unit_pulp_ids(repo) ⇒ Object



35
36
37
38
39
40
41
42
43
# File 'app/models/katello/content_view_package_filter.rb', line 35

def content_unit_pulp_ids(repo)
  package_filenames = []
  self.package_rules.each do |rule|
    package_filenames.concat(query_rpms(repo, rule))
  end
  package_filenames.concat(repo.packages_without_errata.map(&:filename)) if self.original_packages
  rpms = Rpm.in_repositories(repo)
  rpms.where(filename: package_filenames).where(:modular => false).pluck(:pulp_id).flatten.uniq
end

#generate_clauses(repo) ⇒ Array

Returns a set of Pulp/MongoDB conditions to filter out packages in the repo repository that match parameters if the repository content type is managed by pulp2.

Returns a set of pulpcore hrefs (pulp_ids) if the repository content type is managed by pulpcore.

Parameters:

  • repo (Repository)

    a repository containing packages to filter

Returns:

  • (Array)

    an array of hashes with MongoDB conditions



18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/models/katello/content_view_package_filter.rb', line 18

def generate_clauses(repo)
  package_filenames = []

  self.package_rules.each do |rule|
    package_filenames.concat(query_rpms(repo, rule))
  end
  if self.original_packages
    package_filenames.concat(repo.packages_without_errata.map(&:filename))
  end

  ContentViewPackageFilter.generate_rpm_clauses(package_filenames)
end

#original_packages=(value) ⇒ Object



31
32
33
# File 'app/models/katello/content_view_package_filter.rb', line 31

def original_packages=(value)
  self[:original_packages] = value
end

#query_rpms(repo, rule) ⇒ Object



53
54
55
56
# File 'app/models/katello/content_view_package_filter.rb', line 53

def query_rpms(repo, rule)
  rpms = Rpm.in_repositories(repo)
  query_rpms_from_collection(rpms, rule).pluck("#{Rpm.table_name}.filename")
end

#query_rpms_from_collection(collection, rule) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'app/models/katello/content_view_package_filter.rb', line 58

def query_rpms_from_collection(collection, rule)
  query_name = rule.name.tr("*", "%")
  query = collection.non_modular.where("#{Rpm.table_name}.name ilike ?", query_name)
  if rule.architecture.present?
    query_arch = rule.architecture.tr("*", "%")
    query = query.where("#{Rpm.table_name}.arch ilike ?", query_arch)
  end
  if rule.version.present?
    query = query.search_version_equal(rule.version)
  elsif rule.min_version.present? || rule.max_version.present?
    query = query.search_version_range(rule.min_version, rule.max_version)
  end
  query.default_sort
end