semver_dialects 3.4.5 → 3.6.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: f8bdc291086fe3045ad20dbcd66689632e3ade434df5083612deac04d9c70734
4
- data.tar.gz: a0ad9e2453d852fb21302255ebd6396720c2a83e276a19e1732511bf09b67886
3
+ metadata.gz: fe0a320a210aa3cf18ef447c32c3d2d461bba51c185df2dbd842b6ce5ce7815a
4
+ data.tar.gz: 38f73e2943f151051181bc4a60e2df97dfcf341f6fad9404a25b344dd9d4b08a
5
5
  SHA512:
6
- metadata.gz: 2dc9a8c36935d003363114d308f4a2e62f32723e122c8c6259658f5ef1bd78baa4793930b716be4823e4e1567f01b10deebc33327a0f37451d376b2ba9b4155d
7
- data.tar.gz: 4af84b590cbf953e99ad9ffb04e3e0cff6abcc1d4b32ed0be05b3b2e23cdd4f21116888156047c2aac6ffb992dba41ba451db3c8063cd0c69c47ca399952a73e
6
+ metadata.gz: 35ca22a972575add479fec3ef5442f5fea5d652e896285183da75738207d7a65e2bf84abe66a2f6af27e1578b6272b6dc5ceb6f91bd731b45a49abb8031f23f4
7
+ data.tar.gz: 7e481a673228c2c843cf61f2d179ebe3a52e3b37a99f5da83ad5f95edcb6a56ec758fe2b96d9aeff1d209375626c335af6c5135bfa44daddf571ea185fb2c72a
@@ -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
@@ -160,6 +160,10 @@ module SemverDialects
160
160
  get_canoncial_s
161
161
  end
162
162
 
163
+ def to_swift_s
164
+ get_canoncial_s
165
+ end
166
+
163
167
  def empty?
164
168
  instance_of?(EmptyInterval)
165
169
  end
@@ -69,6 +69,10 @@ module SemverDialects
69
69
  to_npm_s
70
70
  end
71
71
 
72
+ def to_swift_s
73
+ to_npm_s
74
+ end
75
+
72
76
  def to_version_s(package_type)
73
77
  case package_type
74
78
  when 'npm'
@@ -34,6 +34,8 @@ module SemverDialects
34
34
  translate_packagist(interval_set_string)
35
35
  when 'cargo'
36
36
  translate_cargo(interval_set_string)
37
+ when 'swift'
38
+ translate_swift(interval_set_string)
37
39
  else
38
40
  raise UnsupportedPackageTypeError, typ
39
41
  end
@@ -81,6 +83,10 @@ module SemverDialects
81
83
  translate_npm(interval_set_string)
82
84
  end
83
85
 
86
+ def self.translate_swift(interval_set_string)
87
+ translate_npm(interval_set_string)
88
+ end
89
+
84
90
  def self.add_missing_operator(interval_set_string)
85
91
  starts_with_operator?(interval_set_string) ? interval_set_string : "=#{interval_set_string}"
86
92
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SemverDialects
4
- VERSION = '3.4.5'
4
+ VERSION = '3.6.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 swift]
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
@@ -215,6 +221,10 @@ module SemverDialects # rubocop:todo Style/Documentation
215
221
  # cargo follows Semver 2.0.0.
216
222
  Semver2::VersionParser.parse(raw_ver)
217
223
 
224
+ when 'swift'
225
+ # swift follows Semver 2.0.0.
226
+ Semver2::VersionParser.parse(raw_ver)
227
+
218
228
  when 'apk'
219
229
  Apk::VersionParser.parse(raw_ver)
220
230
  when 'deb'
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.5
4
+ version: 3.6.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-12-10 00:00:00.000000000 Z
13
+ date: 2025-02-07 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