arr-pm 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.

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