semver_dialects 3.4.4 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
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