samovar 2.2.0 → 2.3.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: 5439e3891e6619b96a1c07a1e47da8566e670c21fc5d8cbb083cc256c302cbb3
4
- data.tar.gz: e6a3830369c9f274e1e968205e2b172bbfefec4c1c9780637e2bdd9d8e22a252
3
+ metadata.gz: 6e30e7064ff47b5ddb9d3461d291513e310fe7000d96abf00c473447d76c4f17
4
+ data.tar.gz: 3ec1e17b743863c3df573f959450922c9aec4fcedbf4fe8a690657effcc643f6
5
5
  SHA512:
6
- metadata.gz: 3555993209a03ec7ed58c015391675a5ba4b04552b2a5e82116590431afffd435f77bf64155cfff5ca5cb177c4f6ea744f85e11a93647fc379cc51b131fbf155
7
- data.tar.gz: ca79ebbc4254117b212ff5274a6d5bcd685ee599f4125f031dffdbbec81d5122fe2b1e0b63cb586580d4c429a5c4513104fd55a9ecbdf3ffd2c76165f7bd565c
6
+ metadata.gz: 16adeb378b0451726310d57f76b7223c37a51a43fbf21d1348c3d309b94ae1b99fb943736362c3c66f0b1c651630982f9a5eba5b32bfb8202c0704370e67a6cc
7
+ data.tar.gz: b9bbcfbdc77d330992c47eebfdb10c612d57f140ef0b6e8f97204e3d67d2ccf2f020313cdf54c816122cebb279c82a315db40820d60ef74f41de118c7f5d4873
checksums.yaml.gz.sig CHANGED
Binary file
@@ -46,6 +46,11 @@ module Samovar
46
46
  end
47
47
 
48
48
  def self.append(row)
49
+ if method_defined?(row.key, false)
50
+ warning "Method for key #{row.key} is already defined!", caller
51
+ # raise ArgumentError, "Method for key #{row.key} is already defined!"
52
+ end
53
+
49
54
  attr_accessor(row.key) if row.respond_to?(:key)
50
55
 
51
56
  self.table << row
data/lib/samovar/flags.rb CHANGED
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2016-2023, by Samuel Williams.
4
+ # Copyright, 2016-2024, by Samuel Williams.
5
5
 
6
6
  module Samovar
7
7
  class Flags
8
8
  def initialize(text)
9
9
  @text = text
10
10
 
11
- @ordered = text.split(/\s+\|\s+/).map{|part| Flag.new(part)}
11
+ @ordered = text.split(/\s+\|\s+/).map{|part| Flag.parse(part)}
12
12
  end
13
13
 
14
14
  def each(&block)
@@ -21,7 +21,7 @@ module Samovar
21
21
 
22
22
  # Whether or not this flag should have a true/false value if not specified otherwise.
23
23
  def boolean?
24
- @ordered.count == 1 and @ordered.first.value.nil?
24
+ @ordered.count == 1 and @ordered.first.boolean?
25
25
  end
26
26
 
27
27
  def count
@@ -29,12 +29,13 @@ module Samovar
29
29
  end
30
30
 
31
31
  def to_s
32
- '[' + @ordered.join(' | ') + ']'
32
+ "[#{@ordered.join(' | ')}]"
33
33
  end
34
34
 
35
35
  def parse(input)
36
36
  @ordered.each do |flag|
37
- if result = flag.parse(input)
37
+ result = flag.parse(input)
38
+ if result != nil
38
39
  return result
39
40
  end
40
41
  end
@@ -44,45 +45,93 @@ module Samovar
44
45
  end
45
46
 
46
47
  class Flag
47
- def initialize(text)
48
- @text = text
49
-
48
+ def self.parse(text)
50
49
  if text =~ /(.*?)\s(\<.*?\>)/
51
- @prefix = $1
52
- @value = $2
50
+ ValueFlag.new(text, $1, $2)
51
+ elsif text =~ /--\[no\]-(.*?)$/
52
+ BooleanFlag.new(text, "--#{$1}")
53
53
  else
54
- @prefix = @text
55
- @value = nil
54
+ ValueFlag.new(text, text, nil)
56
55
  end
57
-
58
- *@alternatives, @prefix = @prefix.split('/')
56
+ end
57
+
58
+ def initialize(text, prefix, alternatives = nil)
59
+ @text = text
60
+ @prefix = prefix
61
+ @alternatives = alternatives
59
62
  end
60
63
 
61
64
  attr :text
62
65
  attr :prefix
63
66
  attr :alternatives
64
- attr :value
65
67
 
66
68
  def to_s
67
69
  @text
68
70
  end
69
71
 
70
- def prefix?(token)
71
- @prefix == token or @alternatives.include?(token)
72
- end
73
-
74
72
  def key
75
73
  @key ||= @prefix.sub(/^-*/, '').gsub('-', '_').to_sym
76
74
  end
77
75
 
76
+ def boolean?
77
+ false
78
+ end
79
+ end
80
+
81
+ class ValueFlag < Flag
82
+ def initialize(text, prefix, value)
83
+ super(text, prefix)
84
+
85
+ @value = value
86
+
87
+ *@alternatives, @prefix = @prefix.split('/')
88
+ end
89
+
90
+ attr :alternatives
91
+ attr :value
92
+
93
+ def boolean?
94
+ @value.nil?
95
+ end
96
+
97
+ def prefix?(token)
98
+ @prefix == token or @alternatives.include?(token)
99
+ end
100
+
78
101
  def parse(input)
79
102
  if prefix?(input.first)
80
103
  if @value
81
- input.shift(2).last
104
+ return input.shift(2).last
82
105
  else
83
- input.shift; key
106
+ input.shift
107
+ return key
84
108
  end
85
109
  end
86
110
  end
87
111
  end
112
+
113
+ class BooleanFlag < Flag
114
+ def initialize(text, prefix, value = nil)
115
+ super(text, prefix)
116
+
117
+ @value = value
118
+
119
+ @negated = @prefix.sub(/^--/, '--no-')
120
+ @alternatives = [@negated]
121
+ end
122
+
123
+ def prefix?(token)
124
+ @prefix == token or @negated == token
125
+ end
126
+
127
+ def parse(input)
128
+ if input.first == @prefix
129
+ input.shift
130
+ return true
131
+ elsif input.first == @negated
132
+ input.shift
133
+ return false
134
+ end
135
+ end
136
+ end
88
137
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2023, by Samuel Williams.
4
+ # Copyright, 2019-2024, by Samuel Williams.
5
5
 
6
6
  require_relative 'flags'
7
7
 
@@ -66,7 +66,8 @@ module Samovar
66
66
  end
67
67
 
68
68
  def parse(input, parent = nil, default = nil)
69
- if result = @flags.parse(input)
69
+ result = @flags.parse(input)
70
+ if result != nil
70
71
  @value.nil? ? coerce(result) : @value
71
72
  elsif default ||= @default
72
73
  return default
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2016-2023, by Samuel Williams.
4
+ # Copyright, 2016-2024, by Samuel Williams.
5
5
 
6
6
  require_relative 'option'
7
7
 
@@ -90,7 +90,9 @@ module Samovar
90
90
  values = (default || @defaults).dup
91
91
 
92
92
  while option = @keyed[input.first]
93
- if result = option.parse(input)
93
+ prefix = input.first
94
+ result = option.parse(input)
95
+ if result != nil
94
96
  values[option.key] = result
95
97
  end
96
98
  end
data/lib/samovar/table.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2016-2023, by Samuel Williams.
4
+ # Copyright, 2016-2024, by Samuel Williams.
5
5
 
6
6
  module Samovar
7
7
  class Table
@@ -76,8 +76,9 @@ module Samovar
76
76
 
77
77
  current = parent.send(key)
78
78
 
79
- if result = row.parse(input, parent, current)
80
- parent.send("#{row.key}=", result)
79
+ result = row.parse(input, parent, current)
80
+ if result != nil
81
+ parent.public_send("#{row.key}=", result)
81
82
  end
82
83
  end
83
84
  end
@@ -5,5 +5,5 @@
5
5
  # Copyright, 2018, by Gabriel Mazetto.
6
6
 
7
7
  module Samovar
8
- VERSION = "2.2.0"
8
+ VERSION = "2.3.0"
9
9
  end
data/license.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MIT License
2
2
 
3
- Copyright, 2016-2023, by Samuel Williams.
3
+ Copyright, 2016-2024, by Samuel Williams.
4
4
  Copyright, 2018, by Gabriel Mazetto.
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
data/readme.md CHANGED
@@ -188,7 +188,7 @@ This project uses the [Developer Certificate of Origin](https://developercertifi
188
188
 
189
189
  ### Contributor Covenant
190
190
 
191
- This project is governed by [Contributor Covenant](https://www.contributor-covenant.org/). All contributors and participants agree to abide by its terms.
191
+ This project is governed by the [Contributor Covenant](https://www.contributor-covenant.org/). All contributors and participants agree to abide by its terms.
192
192
 
193
193
  ## Future Work
194
194
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: samovar
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -38,7 +38,7 @@ cert_chain:
38
38
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
39
39
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
40
40
  -----END CERTIFICATE-----
41
- date: 2023-06-29 00:00:00.000000000 Z
41
+ date: 2024-03-28 00:00:00.000000000 Z
42
42
  dependencies:
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: console
@@ -68,48 +68,6 @@ dependencies:
68
68
  - - "~>"
69
69
  - !ruby/object:Gem::Version
70
70
  version: '1.0'
71
- - !ruby/object:Gem::Dependency
72
- name: bundler
73
- requirement: !ruby/object:Gem::Requirement
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- type: :development
79
- prerelease: false
80
- version_requirements: !ruby/object:Gem::Requirement
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- version: '0'
85
- - !ruby/object:Gem::Dependency
86
- name: covered
87
- requirement: !ruby/object:Gem::Requirement
88
- requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- version: '0'
92
- type: :development
93
- prerelease: false
94
- version_requirements: !ruby/object:Gem::Requirement
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- version: '0'
99
- - !ruby/object:Gem::Dependency
100
- name: sus
101
- requirement: !ruby/object:Gem::Requirement
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- version: '0'
106
- type: :development
107
- prerelease: false
108
- version_requirements: !ruby/object:Gem::Requirement
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- version: '0'
113
71
  description:
114
72
  email:
115
73
  executables: []
@@ -150,14 +108,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
150
108
  requirements:
151
109
  - - ">="
152
110
  - !ruby/object:Gem::Version
153
- version: '0'
111
+ version: '3.0'
154
112
  required_rubygems_version: !ruby/object:Gem::Requirement
155
113
  requirements:
156
114
  - - ">="
157
115
  - !ruby/object:Gem::Version
158
116
  version: '0'
159
117
  requirements: []
160
- rubygems_version: 3.4.7
118
+ rubygems_version: 3.5.3
161
119
  signing_key:
162
120
  specification_version: 4
163
121
  summary: Samovar is a flexible option parser excellent support for sub-commands and
metadata.gz.sig CHANGED
Binary file