samovar 2.2.0 → 2.3.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: 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