Class: Katello::Util::PackageFilter
- Inherits:
-
Object
- Object
- Katello::Util::PackageFilter
- Defined in:
- app/lib/katello/util/package_filter.rb
Constant Summary collapse
- LESS_THAN =
"<".freeze
- GREATER_THAN =
">".freeze
- EQUAL =
"=".freeze
- OPERATORS =
[LESS_THAN, GREATER_THAN, EQUAL].freeze
Instance Attribute Summary collapse
-
#epoch ⇒ Object
Returns the value of attribute epoch.
-
#operator ⇒ Object
Returns the value of attribute operator.
-
#relation ⇒ Object
Returns the value of attribute relation.
-
#release ⇒ Object
Returns the value of attribute release.
-
#version ⇒ Object
Returns the value of attribute version.
Instance Method Summary collapse
- #convert(name = '?') ⇒ Object
- #epoch_clause(op) ⇒ Object
- #extract_epoch_version_release(evr) ⇒ Object
-
#initialize(relation, evr, operator = nil) ⇒ PackageFilter
constructor
A new instance of PackageFilter.
- #release_clause(op) ⇒ Object
- #results ⇒ Object
- #version_clause(op) ⇒ Object
Constructor Details
#initialize(relation, evr, operator = nil) ⇒ PackageFilter
Returns a new instance of PackageFilter.
11 12 13 14 15 |
# File 'app/lib/katello/util/package_filter.rb', line 11 def initialize(relation, evr, operator = nil) extract_epoch_version_release(evr) self.operator = operator self.relation = relation end |
Instance Attribute Details
#epoch ⇒ Object
Returns the value of attribute epoch.
9 10 11 |
# File 'app/lib/katello/util/package_filter.rb', line 9 def epoch @epoch end |
#operator ⇒ Object
Returns the value of attribute operator.
9 10 11 |
# File 'app/lib/katello/util/package_filter.rb', line 9 def operator @operator end |
#relation ⇒ Object
Returns the value of attribute relation.
9 10 11 |
# File 'app/lib/katello/util/package_filter.rb', line 9 def relation @relation end |
#release ⇒ Object
Returns the value of attribute release.
9 10 11 |
# File 'app/lib/katello/util/package_filter.rb', line 9 def release @release end |
#version ⇒ Object
Returns the value of attribute version.
9 10 11 |
# File 'app/lib/katello/util/package_filter.rb', line 9 def version @version end |
Instance Method Details
#convert(name = '?') ⇒ Object
65 66 67 |
# File 'app/lib/katello/util/package_filter.rb', line 65 def convert(name = '?') "#{name} COLLATE \"C\"" end |
#epoch_clause(op) ⇒ Object
45 46 47 |
# File 'app/lib/katello/util/package_filter.rb', line 45 def epoch_clause(op) "CAST(epoch AS INT) #{op} :epoch" end |
#extract_epoch_version_release(evr) ⇒ Object
17 18 19 20 21 22 23 24 |
# File 'app/lib/katello/util/package_filter.rb', line 17 def extract_epoch_version_release(evr) parsed = Package.parse_evr(evr) self.epoch = parsed[:epoch].to_i # nil or blank becomes 0 v = parsed[:version] self.version = (v.nil? || v.blank?) ? '' : Package.sortable_version(v) r = parsed[:release] self.release = (r.nil? || r.blank?) ? '' : Package.sortable_version(r) end |
#release_clause(op) ⇒ Object
57 58 59 60 61 62 63 |
# File 'app/lib/katello/util/package_filter.rb', line 57 def release_clause(op) if op == '=' "release_sortable = :release" else "#{convert(:release_sortable)} #{op} #{convert(':release')}" end end |
#results ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'app/lib/katello/util/package_filter.rb', line 26 def results if operator == EQUAL conditions = epoch_clause(operator) conditions += ' AND ' + version_clause(operator) unless version.blank? conditions += ' AND ' + release_clause(operator) unless release.blank? else conditions = '' unless version.blank? unless release.blank? conditions = " OR (#{version_clause('=')} AND #{release_clause(operator)})" end conditions = " OR (#{epoch_clause('=')} AND (#{version_clause(operator)}#{conditions}))" end conditions = "#{epoch_clause(operator)}#{conditions}" end self.relation.where(conditions, :version => version, :release => release, :epoch => epoch) end |
#version_clause(op) ⇒ Object
49 50 51 52 53 54 55 |
# File 'app/lib/katello/util/package_filter.rb', line 49 def version_clause(op) if op == '=' "version_sortable = :version" else "#{convert(:version_sortable)} #{op} #{convert(':version')}" end end |