repomd_parser 0.1.5 → 1.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e96fc8459331c46c5a95a479d50c93973db28675e71f37d367300ad921c5995
4
- data.tar.gz: 0bc27934593e3e22225850446f537754e0ee7e0f1d190fdb27e51019dffd3771
3
+ metadata.gz: 464be2962408f4592e3d06eadda7c14ac22f0e7deea9b962e246bc13e40181cb
4
+ data.tar.gz: 9caa45644420feea003a12f2902d02f538972c0e68b76a26b85229ffe03e1b61
5
5
  SHA512:
6
- metadata.gz: 10fc061b160790a2bf8a4f440dbbbdcc3cbbfbb9c70fd40616a16be1c7270040695a440eb65ae3a493ac5b6aac791c43002f580782a2a88eb2405ee5d4dce50c
7
- data.tar.gz: 5905bf2dfcce585e9ebcadf452dab17ebb17a0dcf0e5d04f010042d982a4b0484204e4b56fdd48e142dc308022d58e028ea3b5076c93af775be6cddda0a648cd
6
+ metadata.gz: b7e9367a0b325fd882238e38d71cf98ebf535d9fa4452ffb90dcaf9f0667081e8cca1bd8db716c35270c23d955281845da2c9a7195c656c5c4210f9bd2d1e84a
7
+ data.tar.gz: 6697e2943d63f684229439453c4e08ee5cded95059d3eacbd61f610bd0087f8b388780648b6ef9092cac9323d5c768ab5fc3970d89a54bb9d4bdb8851873c093
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in repomd_parser.gemspec
6
6
  gemspec
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # RepomdParser [![Build Status](https://travis-ci.org/ikapelyukhin/repomd-parser.svg?branch=master)](https://travis-ci.org/ikapelyukhin/repomd-parser)
1
+ # RepomdParser
2
2
 
3
3
  RPM repository metadata parser.
4
4
 
@@ -20,10 +20,23 @@ Alternatively, install as `gem install repomd_parser`.
20
20
 
21
21
  Parses `repomd.xml` -- the main repository metadata file, which references other metadata files.
22
22
 
23
- `parse` method returns an array of `RepomdParser::Reference`.
23
+ `parse` and `parse_file` methods return an array of `RepomdParser::Reference`.
24
+
25
+ ##### Using the `parse` method
24
26
 
25
27
  ```ruby
26
- metadata_files = RepomdParser::RepomdXmlParser.new('repomd.xml').parse
28
+ File.open('repomd.xml') do |fh|
29
+ metadata_files = RepomdParser::RepomdXmlParser.new.parse(fh)
30
+ metadata_files.each do |metadata_file|
31
+ printf "type: %10s, location: %s\n", metadata_file.type, metadata_file.location
32
+ end
33
+ end
34
+ ```
35
+
36
+ ##### Using the `parse_file` method
37
+
38
+ ```ruby
39
+ metadata_files = RepomdParser::RepomdXmlParser.new.parse_file('repomd.xml')
27
40
  metadata_files.each do |metadata_file|
28
41
  printf "type: %10s, location: %s\n", metadata_file.type, metadata_file.location
29
42
  end
@@ -33,10 +46,23 @@ end
33
46
 
34
47
  Parses `primary.xml`, which contains information about RPM packages in the repository.
35
48
 
36
- `parse` method returns an array of `RepomdParser::Reference`.
49
+ `parse` and `parse_file` methods return an array of `RepomdParser::Reference`.
50
+
51
+ ##### Using the `parse` method
52
+
53
+ ```ruby
54
+ File.open('primary.xml') do |fh|
55
+ rpm_packages = RepomdParser::PrimaryXmlParser.new.parse(fh)
56
+ rpm_packages.each do |rpm|
57
+ printf "arch: %8s, location: %s\n", rpm.arch, rpm.location
58
+ end
59
+ end
60
+ ```
61
+
62
+ ##### Using the `parse_file` method
37
63
 
38
64
  ```ruby
39
- rpm_packages = RepomdParser::PrimaryXmlParser.new('primary.xml').parse
65
+ rpm_packages = RepomdParser::PrimaryXmlParser.new.parse_file('primary.xml')
40
66
  rpm_packages.each do |rpm|
41
67
  printf "arch: %8s, location: %s\n", rpm.arch, rpm.location
42
68
  end
@@ -46,15 +72,54 @@ end
46
72
 
47
73
  Parses `deltainfo.xml`, which contains information about delta-RPM packages in the repository.
48
74
 
49
- `parse` method returns an array of `RepomdParser::Reference`.
75
+ `parse` and `parse_file` methods return an array of `RepomdParser::Reference`.
76
+
77
+ ##### Using the `parse` method
78
+
79
+ ```ruby
80
+ File.open('deltainfo.xml') do |fh|
81
+ rpm_packages = RepomdParser::DeltainfoXmlParser.new.parse(fh)
82
+ rpm_packages.each do |rpm|
83
+ printf "arch: %8s, location: %s\n", rpm.arch, rpm.location
84
+ end
85
+ end
86
+ ```
87
+
88
+ ##### Using the `parse_file` method
50
89
 
51
90
  ```ruby
52
- rpm_packages = RepomdParser::DeltainfoXmlParser.new('deltainfo.xml').parse
91
+ rpm_packages = RepomdParser::DeltainfoXmlParser.new.parse_file('deltainfo.xml')
53
92
  rpm_packages.each do |rpm|
54
93
  printf "arch: %8s, location: %s\n", rpm.arch, rpm.location
55
94
  end
56
95
  ```
57
96
 
97
+ #### Compressed file support
98
+
99
+ The gzip and Zstandard compression formats are supported. The `parse_file`
100
+ method automatically decompresses files based on the filename, e.g.:
101
+
102
+ ```ruby
103
+ rpm_packages = RepomdParser::PrimaryXmlParser.new.parse_file('primary.xml.gz')
104
+ rpm_packages.each do |rpm|
105
+ printf "arch: %8s, location: %s\n", rpm.arch, rpm.location
106
+ end
107
+ ```
108
+
109
+ The `RepomdParser.decompress_io` helper is provided to handle
110
+ decompression of IO objects for use with the `parse` method:
111
+
112
+ ```ruby
113
+ filename = 'primary.xml.gz'
114
+ io = RepomdParser.decompress_io(File.open(filename), filename)
115
+
116
+ rpm_packages = RepomdParser::PrimaryXmlParser.new.parse(io)
117
+ rpm_packages.each do |rpm|
118
+ printf "arch: %8s, location: %s\n", rpm.arch, rpm.location
119
+ end
120
+ ```
121
+
122
+
58
123
  #### RepomdParser::Reference
59
124
 
60
125
  Represents a file referenced in the metadata file. Has the following accessors:
@@ -75,11 +140,12 @@ RPM and DRPM files additionally have the following attributes:
75
140
 
76
141
  ## Caveats
77
142
 
78
- * Relies on the file name to determine if the file is compressed (automatically decompresses `.gz` files)
143
+ * File extension is used to determine file compression type (expected
144
+ extensions are `.gz` and `.zst` for gzip and Zstandard respectively)
79
145
 
80
146
  ## Development
81
147
 
82
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
148
+ After checking out the repo, run `bundle install` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
83
149
 
84
150
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
85
151
 
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
@@ -19,24 +19,20 @@ require 'nokogiri'
19
19
  require 'zlib'
20
20
 
21
21
  class RepomdParser::BaseParser < Nokogiri::XML::SAX::Document
22
-
23
- def initialize(filename)
24
- @referenced_files = []
25
- @filename = filename
22
+ def parse_file(filename)
23
+ io = RepomdParser.decompress_io(File.open(filename), filename)
24
+ parse(io)
25
+ ensure
26
+ io.close
26
27
  end
27
28
 
28
- def parse
29
- if (File.extname(@filename) == '.gz')
30
- Zlib::GzipReader.open(@filename) do |gz|
31
- Nokogiri::XML::SAX::Parser.new(self).parse(gz)
32
- end
33
- else
34
- File.open(@filename) do |fh|
35
- Nokogiri::XML::SAX::Parser.new(self).parse(fh)
36
- end
37
- end
29
+ def parse(io_object)
30
+ @referenced_files = []
31
+ Nokogiri::XML::SAX::Parser.new(self).parse(io_object)
32
+ ret_val = @referenced_files
33
+ @referenced_files = nil
38
34
 
39
- @referenced_files
35
+ ret_val
40
36
  end
41
37
 
42
38
  protected
@@ -44,5 +40,4 @@ class RepomdParser::BaseParser < Nokogiri::XML::SAX::Document
44
40
  def get_attribute(attributes, name)
45
41
  attributes.select { |e| e[0] == name }.first[1]
46
42
  end
47
-
48
43
  end
@@ -16,49 +16,45 @@
16
16
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
17
 
18
18
  class RepomdParser::DeltainfoXmlParser < RepomdParser::BaseParser
19
-
20
- def initialize(filename)
21
- super(filename)
22
- end
23
-
24
19
  def start_element(name, attrs = [])
25
20
  @current_node = name.to_sym
26
- if (name == 'newpackage')
21
+ case name
22
+ when 'newpackage'
27
23
  @package = {}
28
24
  @package[:version] = get_attribute(attrs, 'version')
29
25
  @package[:name] = get_attribute(attrs, 'name')
30
26
  @package[:arch] = get_attribute(attrs, 'arch')
31
- elsif (name == 'delta')
27
+ when 'delta'
32
28
  @delta = {}
33
- elsif (name == 'checksum')
29
+ when 'checksum'
34
30
  @delta[:checksum_type] = get_attribute(attrs, 'type')
35
31
  end
36
32
  end
37
33
 
38
34
  def characters(string)
39
- if (@current_node == :filename)
35
+ case @current_node
36
+ when :filename
40
37
  @delta[:location] ||= ''
41
38
  @delta[:location] += string.strip
42
- elsif (@current_node == :checksum)
39
+ when :checksum
43
40
  @delta[:checksum] ||= ''
44
41
  @delta[:checksum] += string.strip
45
- elsif (@current_node == :size)
42
+ when :size
46
43
  @delta[:size] ||= ''
47
44
  @delta[:size] += string.strip
48
45
  end
49
46
  end
50
47
 
51
48
  def end_element(name)
52
- if (name == 'delta')
53
- @referenced_files << RepomdParser::Reference.new(
54
- location: @delta[:location],
55
- checksum_type: @delta[:checksum_type],
56
- checksum: @delta[:checksum],
57
- type: :drpm,
58
- size: @delta[:size].to_i,
59
- arch: @package[:arch],
60
- )
61
- end
62
- end
49
+ return unless name == 'delta'
63
50
 
51
+ @referenced_files << RepomdParser::Reference.new(
52
+ location: @delta[:location],
53
+ checksum_type: @delta[:checksum_type],
54
+ checksum: @delta[:checksum],
55
+ type: :drpm,
56
+ size: @delta[:size].to_i,
57
+ arch: @package[:arch]
58
+ )
59
+ end
64
60
  end
@@ -16,54 +16,49 @@
16
16
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
17
 
18
18
  class RepomdParser::PrimaryXmlParser < RepomdParser::BaseParser
19
-
20
- def initialize(filename)
21
- super(filename)
22
- end
23
-
24
19
  def start_element(name, attrs = [])
25
20
  @current_node = name.to_sym
26
- if (name == 'package')
21
+ case name
22
+ when 'package'
27
23
  @package = {}
28
- elsif (name == 'version')
24
+ when 'version'
29
25
  @package[:version] = get_attribute(attrs, 'ver')
30
26
  @package[:release] = get_attribute(attrs, 'rel')
31
- elsif (name == 'location')
27
+ when 'location'
32
28
  @package[:location] = get_attribute(attrs, 'href')
33
- elsif (name == 'checksum')
29
+ when 'checksum'
34
30
  @package[:checksum_type] = get_attribute(attrs, 'type')
35
- elsif (name == 'size')
31
+ when 'size'
36
32
  @package[:size] = get_attribute(attrs, 'package').to_i
37
- elsif (name == 'time')
33
+ when 'time'
38
34
  @package[:build_time] = get_attribute(attrs, 'build')
39
35
  end
40
36
  end
41
37
 
42
38
  def characters(string)
43
- if (%i[name arch checksum summary description rpm:license].include? @current_node)
44
- @package[@current_node] ||= ''
45
- @package[@current_node] += string.strip
46
- end
39
+ return unless %i[name arch checksum summary description rpm:license].include? @current_node
40
+
41
+ @package[@current_node] ||= ''
42
+ @package[@current_node] += string.strip
47
43
  end
48
44
 
49
45
  def end_element(name)
50
- if (name == 'package')
51
- @referenced_files << RepomdParser::Reference.new(
52
- location: @package[:location],
53
- checksum_type: @package[:checksum_type],
54
- checksum: @package[:checksum],
55
- type: :rpm,
56
- size: @package[:size].to_i,
57
- arch: @package[:arch],
58
- version: @package[:version],
59
- release: @package[:release],
60
- name: @package[:name],
61
- summary: @package[:summary],
62
- description: @package[:description],
63
- license: @package[:"rpm:license"],
64
- build_time: Time.at(@package[:build_time].to_i).utc
65
- )
66
- end
67
- end
46
+ return unless name == 'package'
68
47
 
48
+ @referenced_files << RepomdParser::Reference.new(
49
+ location: @package[:location],
50
+ checksum_type: @package[:checksum_type],
51
+ checksum: @package[:checksum],
52
+ type: :rpm,
53
+ size: @package[:size].to_i,
54
+ arch: @package[:arch],
55
+ version: @package[:version],
56
+ release: @package[:release],
57
+ name: @package[:name],
58
+ summary: @package[:summary],
59
+ description: @package[:description],
60
+ license: @package[:'rpm:license'],
61
+ build_time: Time.at(@package[:build_time].to_i).utc
62
+ )
63
+ end
69
64
  end
@@ -45,15 +45,15 @@ class RepomdParser::Reference
45
45
  build_time: nil)
46
46
  local_variables.each do |local_var|
47
47
  method = "#{local_var}="
48
- send(method, binding.local_variable_get(local_var)) if (respond_to?(method))
48
+ send(method, binding.local_variable_get(local_var)) if respond_to?(method)
49
49
  end
50
50
  end
51
51
 
52
52
  # Overloaded comparator for specs
53
- def ==(obj)
53
+ def ==(other)
54
54
  result = true
55
55
  instance_variables.each do |instance_var|
56
- result &&= (instance_variable_get(instance_var) == obj.instance_variable_get(instance_var))
56
+ result &&= (instance_variable_get(instance_var) == other.instance_variable_get(instance_var))
57
57
  end
58
58
  result
59
59
  end
@@ -16,14 +16,15 @@
16
16
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
17
 
18
18
  class RepomdParser::RepomdXmlParser
19
-
20
- def initialize(filename)
21
- @filename = filename
19
+ def parse_file(filename)
20
+ File.open(filename) do |fh|
21
+ parse(fh)
22
+ end
22
23
  end
23
24
 
24
- def parse
25
+ def parse(io_object)
25
26
  files = []
26
- xml = Nokogiri::XML(File.open(@filename))
27
+ xml = Nokogiri::XML(io_object)
27
28
 
28
29
  xml.xpath('/xmlns:repomd/xmlns:data').each do |data_node|
29
30
  type = data_node.attr('type').to_sym
@@ -48,5 +49,4 @@ class RepomdParser::RepomdXmlParser
48
49
 
49
50
  files
50
51
  end
51
-
52
52
  end
@@ -16,5 +16,5 @@
16
16
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
17
 
18
18
  module RepomdParser
19
- VERSION = '0.1.5'
19
+ VERSION = '1.0.0'.freeze
20
20
  end
@@ -0,0 +1,44 @@
1
+ # repomd_parser -- Ruby gem to parse RPM repository metadata
2
+ # Copyright (C) 2024 Ivan Kapelyukhin
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License along
15
+ # with this program; if not, write to the Free Software Foundation, Inc.,
16
+ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
+
18
+ require 'zstd-ruby'
19
+
20
+ class RepomdParser::ZstdReader
21
+ def initialize(io_object)
22
+ @io = io_object
23
+ @stream = Zstd::StreamingDecompress.new
24
+ @buffer = ''
25
+ end
26
+
27
+ def read(len = nil, out = nil)
28
+ @buffer << @stream.decompress(@io.read(len)) while @buffer.size < len && !@io.eof
29
+
30
+ if @buffer.size > len
31
+ out = @buffer[0..len]
32
+ @buffer = @buffer[len..-1]
33
+ else
34
+ out = @buffer
35
+ @buffer = ''
36
+ end
37
+
38
+ out
39
+ end
40
+
41
+ def close
42
+ @io.close
43
+ end
44
+ end
data/lib/repomd_parser.rb CHANGED
@@ -15,12 +15,20 @@
15
15
  # with this program; if not, write to the Free Software Foundation, Inc.,
16
16
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
17
 
18
- module RepomdParser
19
- end
20
-
21
18
  require 'repomd_parser/version'
22
19
  require 'repomd_parser/reference'
23
20
  require 'repomd_parser/base_parser'
24
21
  require 'repomd_parser/repomd_xml_parser'
25
22
  require 'repomd_parser/deltainfo_xml_parser'
26
23
  require 'repomd_parser/primary_xml_parser'
24
+ require 'repomd_parser/zstd_reader'
25
+
26
+ module RepomdParser
27
+ def self.decompress_io(io_object, filename)
28
+ case File.extname(filename)
29
+ when '.gz' then Zlib::GzipReader.new(io_object)
30
+ when '.zst' then RepomdParser::ZstdReader.new(io_object)
31
+ else io_object
32
+ end
33
+ end
34
+ end
@@ -1,31 +1,38 @@
1
-
2
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "repomd_parser/version"
3
+ require 'repomd_parser/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "repomd_parser"
6
+ spec.name = 'repomd_parser'
8
7
  spec.version = RepomdParser::VERSION
9
- spec.authors = ["Ivan Kapelyukhin"]
10
- spec.email = ["ikapelyukhin@suse.com"]
8
+ spec.authors = ['Ivan Kapelyukhin']
9
+ spec.email = ['ikapelyukhin@opensuse.org']
11
10
 
12
- spec.summary = %q{RPM repository metadata (RepoMD) parser}
13
- spec.homepage = "https://github.com/ikapelyukhin/repomd-parser"
11
+ spec.summary = 'RPM repository metadata (RepoMD) parser'
12
+ spec.homepage = 'https://github.com/ikapelyukhin/repomd-parser'
14
13
  spec.license = 'GPL-2.0-or-later'
15
14
 
16
15
  # Specify which files should be added to the gem when it is released.
17
16
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
19
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }.reject { |f| f.match(%r{^\.}) }
17
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
18
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }.reject { |f| f.match(/^\./) }
20
19
  end
21
- spec.bindir = "exe"
20
+ spec.bindir = 'exe'
22
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
- spec.require_paths = ["lib"]
22
+ spec.require_paths = ['lib']
23
+ spec.required_ruby_version = '>= 2.5'
24
+
25
+ spec.metadata = { 'rubygems_mfa_required' => 'true' }
24
26
 
25
- spec.add_development_dependency "bundler", ">= 1.16"
26
- spec.add_development_dependency "rake", "~> 13.0"
27
- spec.add_development_dependency "rspec", "~> 3.0"
27
+ spec.add_development_dependency 'bundler', '>= 1.16'
28
+ spec.add_development_dependency 'rake', '~> 13.0'
29
+ spec.add_development_dependency 'rspec', '~> 3.0'
28
30
  spec.add_development_dependency 'simplecov', '~> 0.16.1'
29
31
 
32
+ # Locked because of Ruby >= 2.5 dependency
33
+ spec.add_development_dependency 'rubocop', '<= 1.25'
34
+ spec.add_development_dependency 'rubocop-ast', '<= 1.17.0'
35
+
30
36
  spec.add_dependency 'nokogiri', '~> 1.8'
37
+ spec.add_dependency 'zstd-ruby', '~> 1.3', '>= 1.3.5.0'
31
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: repomd_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Kapelyukhin
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-09 00:00:00.000000000 Z
11
+ date: 2024-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.16.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "<="
74
+ - !ruby/object:Gem::Version
75
+ version: '1.25'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "<="
81
+ - !ruby/object:Gem::Version
82
+ version: '1.25'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-ast
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "<="
88
+ - !ruby/object:Gem::Version
89
+ version: 1.17.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "<="
95
+ - !ruby/object:Gem::Version
96
+ version: 1.17.0
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: nokogiri
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -80,9 +108,29 @@ dependencies:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
110
  version: '1.8'
83
- description:
111
+ - !ruby/object:Gem::Dependency
112
+ name: zstd-ruby
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.3'
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: 1.3.5.0
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - "~>"
126
+ - !ruby/object:Gem::Version
127
+ version: '1.3'
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 1.3.5.0
131
+ description:
84
132
  email:
85
- - ikapelyukhin@suse.com
133
+ - ikapelyukhin@opensuse.org
86
134
  executables: []
87
135
  extensions: []
88
136
  extra_rdoc_files: []
@@ -91,7 +139,6 @@ files:
91
139
  - Gemfile
92
140
  - README.md
93
141
  - Rakefile
94
- - bin/setup
95
142
  - lib/repomd_parser.rb
96
143
  - lib/repomd_parser/base_parser.rb
97
144
  - lib/repomd_parser/deltainfo_xml_parser.rb
@@ -99,12 +146,14 @@ files:
99
146
  - lib/repomd_parser/reference.rb
100
147
  - lib/repomd_parser/repomd_xml_parser.rb
101
148
  - lib/repomd_parser/version.rb
149
+ - lib/repomd_parser/zstd_reader.rb
102
150
  - repomd_parser.gemspec
103
151
  homepage: https://github.com/ikapelyukhin/repomd-parser
104
152
  licenses:
105
153
  - GPL-2.0-or-later
106
- metadata: {}
107
- post_install_message:
154
+ metadata:
155
+ rubygems_mfa_required: 'true'
156
+ post_install_message:
108
157
  rdoc_options: []
109
158
  require_paths:
110
159
  - lib
@@ -112,16 +161,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
112
161
  requirements:
113
162
  - - ">="
114
163
  - !ruby/object:Gem::Version
115
- version: '0'
164
+ version: '2.5'
116
165
  required_rubygems_version: !ruby/object:Gem::Requirement
117
166
  requirements:
118
167
  - - ">="
119
168
  - !ruby/object:Gem::Version
120
169
  version: '0'
121
170
  requirements: []
122
- rubyforge_project:
123
- rubygems_version: 2.7.8
124
- signing_key:
171
+ rubygems_version: 3.3.15
172
+ signing_key:
125
173
  specification_version: 4
126
174
  summary: RPM repository metadata (RepoMD) parser
127
175
  test_files: []
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here