options_by_example 3.0.0 → 3.1.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: 98c16609314706667d2b776fa71de92ca874b2fcc803ea8f80387fe4f0245d9a
4
- data.tar.gz: 8cc7023f98016edaa5521d6184985fb4133135e902f0380f81e233b6f52bfb97
3
+ metadata.gz: f90dee5b19415bddb809efe80e4fc2c6f39daf7b82259a0c247caa789d21ff23
4
+ data.tar.gz: b74ece7699aee6f785e9a2fa5149f2a2ee6f2c7f5a4365a429e958d676e9aaf1
5
5
  SHA512:
6
- metadata.gz: a4e54eeb9f5beef88733ac4c70055570eeff930ccacd287f88b80905bd1760b6b1ec3513c5ea144d1c7cdc259af7d4991f81c5be82249cecb2f939d291d29032
7
- data.tar.gz: 9126c11cba93c504fd41939dfa24c62578889b8546b9f472091a9463eed4cc6e3f409ff7e40a8219ce9a70913ae63872486745629431290e8f87dec6edf351be
6
+ metadata.gz: c4e235ad68624c57e3efe1915a31c006128351f6c870fa5aefa8f6b2856ec0bab33c24107c1d99b308d9b5fa54cabdff901d3669413e4021c839d7778ecb9cb7
7
+ data.tar.gz: a5c7213462bc16e1b88411b92c28c9be5b71cf9838bcad217316586b28318398441e1cc69acf56e223812c7c0fb51dcf381403158a35283f58ea2b0ce6f777bc
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class OptionsByExample
4
- VERSION = '3.0.0'
4
+ VERSION = '3.1.0'
5
5
  end
6
6
 
7
7
 
@@ -11,12 +11,19 @@ __END__
11
11
  # Minor version bump when backward-compatible changes or enhancements
12
12
  # Patch version bump when backward-compatible bug fixes, security updates etc
13
13
 
14
+ 3.1.0
15
+
16
+ - Support dash in argument and option names
17
+ - Method #if_present passes argument to block if present
18
+ - Method #include? return true if option is present
19
+
14
20
  3.0.0
15
21
 
16
22
  - Support options with default values
17
23
  - Improved support for one-line usage messages
18
24
  - Expand combined shorthand options into their separate components
19
25
  - Shorthand options must be single letter only
26
+ - Support options with typed arguments
20
27
 
21
28
  2.0.0
22
29
 
@@ -25,8 +25,8 @@ class OptionsByExample
25
25
 
26
26
  text =~ /Usage: (\$0|\w+)(?: \[options\])?((?: \[\w+\])*)((?: \w+)*)/
27
27
  raise RuntimeError, "Expected usage string, got none" unless $1
28
- @argument_names_optional = $2.to_s.split.map { |match| match.tr('[]', '').downcase }
29
- @argument_names_required = $3.to_s.split.map(&:downcase)
28
+ @argument_names_optional = $2.to_s.split.map { |match| sanitize match.tr('[]', '') }
29
+ @argument_names_required = $3.to_s.split.map { |match| sanitize match }
30
30
 
31
31
  # --- 2) Parse option names ---------------------------------------
32
32
  #
@@ -41,10 +41,10 @@ class OptionsByExample
41
41
 
42
42
  @option_names = {}
43
43
  @default_values = {}
44
- text.scan(/(?:(-\w), ?)?(--(\w+))(?: (\w+))?(?:.*\(default:? (\w+)\))?/) do
44
+ text.scan(/(?:(-\w), ?)?(--([\w-]+))(?: (\w+))?(?:.*\(default:? (\w+)\))?/) do
45
45
  flags = [$1, $2].compact
46
- flags.each { |each| @option_names[each] = [$3, $4] }
47
- @default_values[$3] = $5 if $5
46
+ flags.each { |each| @option_names[each] = [(sanitize $3), $4] }
47
+ @default_values[sanitize $3] = $5 if $5
48
48
  end
49
49
 
50
50
  initialize_argument_accessors
@@ -76,6 +76,17 @@ class OptionsByExample
76
76
  return self
77
77
  end
78
78
 
79
+ def if_present(name)
80
+ raise ArgumentError, 'block missing' unless block_given?
81
+
82
+ value = @arguments[name]
83
+ value.nil? ? value : (yield value)
84
+ end
85
+
86
+ def include?(name)
87
+ @options.include?(name)
88
+ end
89
+
79
90
  private
80
91
 
81
92
  def initialize_argument_accessors
@@ -86,7 +97,7 @@ class OptionsByExample
86
97
  ].each do |argument_name|
87
98
  instance_eval %{
88
99
  def argument_#{argument_name}
89
- val = @arguments["#{argument_name}"]
100
+ val = @arguments[:#{argument_name}]
90
101
  val && block_given? ? (yield val) : val
91
102
  end
92
103
  }
@@ -97,10 +108,14 @@ class OptionsByExample
97
108
  @option_names.each_value do |option_name, _|
98
109
  instance_eval %{
99
110
  def include_#{option_name}?
100
- @options.include? "#{option_name}"
111
+ @options.include? :#{option_name}
101
112
  end
102
113
  }
103
114
  end
104
115
  end
116
+
117
+ def sanitize(string)
118
+ string.tr('^a-zA-Z0-9', '_').downcase.to_sym
119
+ end
105
120
  end
106
121
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: options_by_example
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Kuhn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-17 00:00:00.000000000 Z
11
+ date: 2023-05-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: