Class: Katello::Util::PackageFilter

Inherits:
Object
  • Object
show all
Defined in:
app/lib/katello/util/package_filter.rb

Constant Summary collapse

LESS_THAN =
"<"
GREATER_THAN =
">"
EQUAL =
"="
OPERATORS =
[LESS_THAN, GREATER_THAN, EQUAL]

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#epochObject

Returns the value of attribute epoch.



9
10
11
# File 'app/lib/katello/util/package_filter.rb', line 9

def epoch
  @epoch
end

#operatorObject

Returns the value of attribute operator.



9
10
11
# File 'app/lib/katello/util/package_filter.rb', line 9

def operator
  @operator
end

#relationObject

Returns the value of attribute relation.



9
10
11
# File 'app/lib/katello/util/package_filter.rb', line 9

def relation
  @relation
end

#releaseObject

Returns the value of attribute release.



9
10
11
# File 'app/lib/katello/util/package_filter.rb', line 9

def release
  @release
end

#versionObject

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



44
45
46
# File 'app/lib/katello/util/package_filter.rb', line 44

def convert(name = '?')
  "convert_to(#{name}, 'SQL_ASCII')"
end

#extract_epoch_version_release(evr) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/lib/katello/util/package_filter.rb', line 17

def extract_epoch_version_release(evr)
  match = case evr
          when /\A(\d+):(.*)-(.*)\z/
            evr.match(/\A(?<epoch>\d+):(?<version>.*)-(?<release>.*)\z/)
          when /\A(\d+):(.*)\z/
            evr.match(/\A(?<epoch>\d+):(?<version>.*)\z/)
          when /\A(.*)-(.*)\z/
            evr.match(/\A(?<version>.*)-(?<release>.*)\z/)
          else
            evr.match(/\A(?<version>.*)\z/)
          end
  self.version = Package.sortable_version(match[:version])
  self.epoch = match[:epoch] rescue nil
  self.release = (match[:release] rescue nil) ? Package.sortable_version(match[:release]) : nil
end

#resultsObject



33
34
35
36
37
38
39
40
41
42
# File 'app/lib/katello/util/package_filter.rb', line 33

def results
  epoch_clause = "epoch #{operator} :epoch OR (epoch = :epoch AND (%s))"
  version_clause = "#{convert(:version_sortable)} #{operator} #{convert(':version')}"
  release_clause = "(#{convert(:version_sortable)} = #{convert(':version')} AND " \
      "#{convert(:release_sortable)} #{operator} #{convert(':release')})"

  version_clause = "#{version_clause} OR #{release_clause}" unless release.blank?
  version_clause = epoch_clause % version_clause unless epoch.blank?
  self.relation.where(version_clause, :version => version, :release => release, :epoch => epoch)
end