semver_dialects 3.4.4 → 3.5.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: 155e773f43becb03ca24d66e5aef3db7c52a997e2ecbfe6e7d8c8405724fb8c8
4
- data.tar.gz: 8bdd87a9dcfc0ba226c6e9730ad736613088ffd502ae77a17ca98cc9cd5a7e2d
3
+ metadata.gz: dc2af1e2174290f8a8cd2fb277a61afa45dbd9302ec691660abf70299a5cb3ea
4
+ data.tar.gz: e116f449ba71422cedd8bf653f36d4fff5962970c4047e55b28dcbb02998cea2
5
5
  SHA512:
6
- metadata.gz: d228adf7320bdfb6a418dfa8750305ab984c3abc2bbd992e2e027f942d16e983b2ba822d7504671be82ce0f5fe7ad8c51613233370965606b4b36b6d1d288971
7
- data.tar.gz: cae052e840d2763415d9d725edc30f03437e71778aed69e3659b9e632ed9ba0b8826f9aab0fdf72a9f610778dbd648845a0a90ebbb6377180b2ad9e92d18c763
6
+ metadata.gz: ee252fb5020e0800d152ff1f9739548c4a05f1a5f346060fe3a98b169ac9502e15be0831ed0a0d72efb911bfc96f0ba2c3871946963a7f86c07edc76fa94e835
7
+ data.tar.gz: f116913441d75cfedd96112a034b75a320e47356cd03f87eaeeafa8829c81db625509494e1ea92097530e3bf9e9e88d25d6fe31be639adc9ef57554c73b956ef
@@ -30,5 +30,20 @@ module SemverDialects
30
30
  exit(ecode)
31
31
  end
32
32
  end
33
+
34
+ desc 'sort TYPE VERSIONS...', 'Sort a list of versions according to the specified package type'
35
+ method_option :help, aliases: '-h', type: :boolean,
36
+ desc: 'Display usage information'
37
+ method_option :json, type: :boolean,
38
+ desc: 'Output results in JSON format'
39
+ def sort(type, *versions)
40
+ if options[:help]
41
+ invoke :help, ['sort']
42
+ else
43
+ require_relative 'commands/sort_versions'
44
+ ecode = SemverDialects::Commands::SortVersions.new(type, versions, options).execute
45
+ exit(ecode)
46
+ end
47
+ end
33
48
  end
34
49
  end
@@ -12,12 +12,10 @@ module SemverDialects
12
12
  @version = version
13
13
  @constraint = constraint
14
14
  @options = options
15
- @avail_types = %w[gem npm ruby pypi php maven go]
16
15
  end
17
16
 
18
17
  def execute(_input: $stdin, output: $stdout)
19
18
  typ = @type.downcase
20
- raise SemverDialects::Error, 'wrong package type' unless @avail_types.include?(typ)
21
19
 
22
20
  if SemverDialects.version_satisfies?(typ, @version, @constraint)
23
21
  output.puts "#{@version} matches #{@constraint} for #{@type}"
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../command'
4
+ require_relative '../../semver_dialects'
5
+ require 'json'
6
+
7
+ module SemverDialects
8
+ module Commands
9
+ # The sort command implementation
10
+ class SortVersions < SemverDialects::Command
11
+ def initialize(type, versions, options) # rubocop:disable Lint/MissingSuper
12
+ @type = type.downcase
13
+ @versions = versions
14
+ @options = options
15
+ end
16
+
17
+ def execute(_input: $stdin, output: $stdout)
18
+ sorted_versions = []
19
+ invalid_versions = []
20
+
21
+ @versions.each do |version|
22
+ parsed_version = SemverDialects.parse_version(@type, version)
23
+ sorted_versions << parsed_version
24
+ rescue SemverDialects::InvalidVersionError, SemverDialects::UnsupportedVersionError => e
25
+ invalid_versions << { version: version, error: e.message }
26
+ end
27
+
28
+ sorted_versions.sort!
29
+
30
+ if @options[:json]
31
+ result = {
32
+ versions: sorted_versions.map(&:to_s),
33
+ invalid: invalid_versions.map { |v| v[:version] }
34
+ }
35
+ output.puts JSON.generate(result)
36
+ else
37
+ invalid_versions.each do |invalid|
38
+ output.puts "Warning: Invalid version '#{invalid[:version]}' - #{invalid[:error]}"
39
+ end
40
+ output.puts "Sorted versions: #{sorted_versions.map(&:to_s).join(', ')}"
41
+ end
42
+
43
+ 0
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SemverDialects
4
- VERSION = '3.4.4'
4
+ VERSION = '3.5.0'
5
5
  end
@@ -26,7 +26,8 @@ module SemverDialects # rubocop:todo Style/Documentation
26
26
  end
27
27
 
28
28
  def message
29
- "unsupported package type '#{@pkg_type}'"
29
+ supported_types = SemverDialects.supported_package_types.join(', ')
30
+ "unsupported package type '#{@pkg_type}'. Supported types are: #{supported_types}"
30
31
  end
31
32
  end
32
33
 
@@ -113,6 +114,11 @@ module SemverDialects # rubocop:todo Style/Documentation
113
114
  v1 < v2
114
115
  end
115
116
 
117
+ # Returns array of supported package types
118
+ def self.supported_package_types
119
+ %w[maven npm go pypi nuget gem packagist conan cargo apk deb rpm]
120
+ end
121
+
116
122
  # Parse a version according to the syntax type.
117
123
  def self.parse_version(typ, raw_ver)
118
124
  # for efficiency most popular package types come first
@@ -122,7 +128,7 @@ module SemverDialects # rubocop:todo Style/Documentation
122
128
 
123
129
  when 'npm'
124
130
  # npm follows Semver 2.0.0.
125
- Semver2::VersionParser.parse(raw_ver)
131
+ Semver2::VersionParser.parse(cleanup(raw_ver))
126
132
 
127
133
  when 'go'
128
134
  # Go follows Semver 2.0.0.
@@ -228,4 +234,9 @@ module SemverDialects # rubocop:todo Style/Documentation
228
234
  # Gem::Version.new raises an ArgumentError for invalid versions.
229
235
  raise InvalidVersionError, raw_ver
230
236
  end
237
+
238
+ # cleanup loose npm versions
239
+ def self.cleanup(raw_ver)
240
+ raw_ver.strip.gsub(/^[=v]/, '')
241
+ end
231
242
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semver_dialects
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.4
4
+ version: 3.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Thome
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2024-10-30 00:00:00.000000000 Z
13
+ date: 2025-01-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: pastel
@@ -197,6 +197,7 @@ files:
197
197
  - lib/semver_dialects/cli.rb
198
198
  - lib/semver_dialects/command.rb
199
199
  - lib/semver_dialects/commands/check_version.rb
200
+ - lib/semver_dialects/commands/sort_versions.rb
200
201
  - lib/semver_dialects/interval.rb
201
202
  - lib/semver_dialects/interval_parser.rb
202
203
  - lib/semver_dialects/interval_set.rb