options_by_example 1.3.0 → 2.0.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 +4 -4
- data/lib/options_by_example/parser.rb +5 -1
- data/lib/options_by_example/version.rb +7 -2
- data/lib/options_by_example.rb +35 -31
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb87e6b0c01a7f99d70d600c6adc142d96cae3fc18b122c2259c926504fb198b
|
4
|
+
data.tar.gz: e21e7dd4f0a4a77fb7e2a84b4edc77293023730388e0fcbf4abe2d0e5344d5c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e5b59dc4a4b9ad41edeaadaf98fa3ee23abe4f262cfbb9ba93752dba66ff5868b704024a3d534b43386977caefe6a4eecea4a5e80c22f5c351f679ec2488bc3
|
7
|
+
data.tar.gz: 7ecce96f859a83e3dc702740c3d5e72c957d44a42387dff4a70db249bc54fc1df45484bf5ff099e9bbd66d9dae06a548d179f107aa5f6cb87395a36a54551bc0
|
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
class OptionsByExample
|
5
|
+
|
6
|
+
class PrintUsageMessage < StandardError
|
7
|
+
end
|
8
|
+
|
5
9
|
class Parser
|
6
10
|
|
7
11
|
attr_reader :options
|
@@ -46,7 +50,7 @@ class OptionsByExample
|
|
46
50
|
@chunks.each do |option, *args|
|
47
51
|
case option
|
48
52
|
when '-h', '--help'
|
49
|
-
raise
|
53
|
+
raise PrintUsageMessage
|
50
54
|
end
|
51
55
|
end
|
52
56
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class OptionsByExample
|
4
|
-
VERSION = '
|
4
|
+
VERSION = '2.0.0'
|
5
5
|
end
|
6
6
|
|
7
7
|
|
@@ -11,9 +11,14 @@ __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
|
+
2.0.0
|
15
|
+
|
16
|
+
- Replaced dynamic methods with explicit methods for options and arguments
|
17
|
+
- Removed ability to call dynamic methods with undeclared names
|
18
|
+
|
14
19
|
1.3.0
|
15
20
|
|
16
|
-
-
|
21
|
+
- Extracted parsing functionality into class
|
17
22
|
- Better error messages
|
18
23
|
|
19
24
|
1.2.0
|
data/lib/options_by_example.rb
CHANGED
@@ -6,20 +6,14 @@ require 'options_by_example/parser'
|
|
6
6
|
|
7
7
|
class OptionsByExample
|
8
8
|
|
9
|
-
attr_reader :argument_names_optional
|
10
|
-
attr_reader :argument_names_required
|
11
|
-
attr_reader :option_names
|
12
|
-
|
13
9
|
attr_reader :arguments
|
14
10
|
attr_reader :options
|
15
11
|
|
16
|
-
|
17
12
|
def self.read(data)
|
18
13
|
return new data.read
|
19
14
|
end
|
20
15
|
|
21
16
|
def initialize(text)
|
22
|
-
@settings = {exit_on_error: true}
|
23
17
|
@usage_message = text.gsub('$0', File.basename($0)).gsub(/\n+\Z/, "\n\n")
|
24
18
|
|
25
19
|
# --- 1) Parse argument names -------------------------------------
|
@@ -50,15 +44,22 @@ class OptionsByExample
|
|
50
44
|
opts = $1.split(", ")
|
51
45
|
opts.each { |each| @option_names[each] = [opts.last.tr('-', ''), $4] }
|
52
46
|
end
|
53
|
-
end
|
54
47
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
return self
|
48
|
+
initialize_argument_accessors
|
49
|
+
initialize_option_accessors
|
59
50
|
end
|
60
51
|
|
61
52
|
def parse(argv)
|
53
|
+
parse_without_exit argv
|
54
|
+
rescue PrintUsageMessage
|
55
|
+
puts @usage_message
|
56
|
+
exit 0
|
57
|
+
rescue RuntimeError => err
|
58
|
+
puts "ERROR: #{err.message}"
|
59
|
+
exit 1
|
60
|
+
end
|
61
|
+
|
62
|
+
def parse_without_exit(argv)
|
62
63
|
parser = Parser.new(
|
63
64
|
@argument_names_required,
|
64
65
|
@argument_names_optional,
|
@@ -66,33 +67,36 @@ class OptionsByExample
|
|
66
67
|
)
|
67
68
|
|
68
69
|
parser.parse argv
|
69
|
-
|
70
|
-
@options = parser.options
|
71
70
|
@arguments = parser.arguments
|
71
|
+
@options = parser.options
|
72
72
|
|
73
73
|
return self
|
74
|
-
|
75
|
-
raise unless @settings[:exit_on_error]
|
74
|
+
end
|
76
75
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
76
|
+
private
|
77
|
+
|
78
|
+
def initialize_argument_accessors
|
79
|
+
[
|
80
|
+
*@argument_names_required,
|
81
|
+
*@argument_names_optional,
|
82
|
+
*@option_names.values.select(&:last).map(&:first),
|
83
|
+
].each do |argument_name|
|
84
|
+
instance_eval %{
|
85
|
+
def argument_#{argument_name}
|
86
|
+
val = @arguments["#{argument_name}"]
|
87
|
+
val && block_given? ? (yield val) : val
|
88
|
+
end
|
89
|
+
}
|
81
90
|
end
|
82
|
-
|
83
|
-
exit 1
|
84
91
|
end
|
85
92
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
@options[$1]
|
94
|
-
else
|
95
|
-
super
|
93
|
+
def initialize_option_accessors
|
94
|
+
@option_names.each_value do |option_name, _|
|
95
|
+
instance_eval %{
|
96
|
+
def include_#{option_name}?
|
97
|
+
@options.include? "#{option_name}"
|
98
|
+
end
|
99
|
+
}
|
96
100
|
end
|
97
101
|
end
|
98
102
|
end
|
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:
|
4
|
+
version: 2.0.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-04-
|
11
|
+
date: 2023-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -27,6 +27,7 @@ licenses:
|
|
27
27
|
metadata:
|
28
28
|
homepage_uri: https://github.com/akuhn/options_by_example
|
29
29
|
source_code_uri: https://github.com/akuhn/options_by_example
|
30
|
+
changelog_uri: https://github.com/akuhn/options_by_example/blob/master/lib/options_by_example/version.rb
|
30
31
|
post_install_message:
|
31
32
|
rdoc_options: []
|
32
33
|
require_paths:
|