arr-pm 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of arr-pm might be problematic. Click here for more details.

Files changed (4) hide show
  1. data/arr-pm.gemspec +1 -1
  2. data/lib/arr-pm.rb +4 -0
  3. data/lib/arr-pm/file.rb +54 -11
  4. metadata +10 -5
@@ -2,7 +2,7 @@ Gem::Specification.new do |spec|
2
2
  files = %x{git ls-files}.split("\n")
3
3
 
4
4
  spec.name = "arr-pm"
5
- spec.version = "0.0.4"
5
+ spec.version = "0.0.5"
6
6
  spec.summary = "RPM reader and writer library"
7
7
  spec.description = "This library allows to you to read and write rpm " \
8
8
  "packages. Written in pure ruby because librpm is not available " \
@@ -1,5 +1,9 @@
1
1
  require "arr-pm/namespace"
2
+ require "arr-pm/file"
2
3
 
4
+ # This class is not yet complete, it is in prototype.
5
+ #
6
+ # Please use {RPM::File} instead
3
7
  class RPM
4
8
  private
5
9
 
@@ -19,7 +19,6 @@ class RPM::File
19
19
  file = File.new(file, "r")
20
20
  end
21
21
  @file = file
22
-
23
22
  end # def initialize
24
23
 
25
24
  # Return the lead for this rpm
@@ -116,20 +115,64 @@ class RPM::File
116
115
  extractor.close
117
116
  end # def extract
118
117
 
119
- def requires
120
- tags = {}
121
- header.tags.each do |tag|
122
- tags[tag.tag] = tag.value
118
+ def tags
119
+ if @tags.nil?
120
+ @tags = {}
121
+ header.tags.each do |tag|
122
+ tags[tag.tag] = tag.value
123
+ end
123
124
  end
125
+ @tags
126
+ end # def taghash
124
127
 
125
- result = []
126
- reqs = tags[:requirename].zip(tags[:requireflags], tags[:requireversion])
127
- reqs.each do |name, flag, version|
128
- result << [name, operator(flag), version]
129
- end
130
- return result
128
+ # Get all relations of a given type to this package.
129
+ #
130
+ # Examples:
131
+ #
132
+ # rpm.relation(:require)
133
+ # rpm.relation(:conflict)
134
+ # rpm.relation(:provide)
135
+ #
136
+ # In the return array-of-arrays, the elements are:
137
+ # [ name (string), operator (string), version (string) ]
138
+ #
139
+ # operator will be ">=", ">", "=", "<", or "<="
140
+ #
141
+ # @return Array of [name, operator, version]
142
+ def relation(type)
143
+ name = "#{type}name".to_sym
144
+ flags = "#{type}flags".to_sym
145
+ version = "#{type}version".to_sym
146
+ # There is no data if we are missing all 3 tag types (name/flags/version)
147
+ # FYI: 'tags.keys' is an array, Array#& does set intersection.
148
+ return [] if (tags.keys & [name, flags, version]).size != 3
149
+ # Find tags <type>name, <type>flags, and <type>version, and return
150
+ # an array of "name operator version"
151
+ return tags[name].zip(tags[flags], tags[version]) \
152
+ .reduce([]) { |memo, (n,o,v)| memo << [n, operator(o), v] }
153
+ end # def relation
154
+
155
+ # Get an array of requires defined in this package.
156
+ #
157
+ # @return Array of [ [name, operator, version], ... ]
158
+ def requires
159
+ return relation(:require)
131
160
  end # def requires
132
161
 
162
+ # Get an array of conflicts defined in this package.
163
+ #
164
+ # @return Array of [ [name, operator, version], ... ]
165
+ def conflicts
166
+ return relation(:conflicts)
167
+ end # def conflicts
168
+
169
+ # Get an array of provides defined in this package.
170
+ #
171
+ # @return Array of [ [name, operator, version], ... ]
172
+ def provides
173
+ return provides(:provides)
174
+ end # def provides
175
+
133
176
  def operator(flag)
134
177
  have = lambda do |mask|
135
178
  return (flag & mask) == mask
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arr-pm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-09 00:00:00.000000000 Z
12
+ date: 2012-03-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cabin
16
- requirement: &9998020 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>'
@@ -21,7 +21,12 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *9998020
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>'
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  description: This library allows to you to read and write rpm packages. Written in
26
31
  pure ruby because librpm is not available on all systems
27
32
  email:
@@ -73,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
78
  version: '0'
74
79
  requirements: []
75
80
  rubyforge_project:
76
- rubygems_version: 1.8.16
81
+ rubygems_version: 1.8.18
77
82
  signing_key:
78
83
  specification_version: 3
79
84
  summary: RPM reader and writer library