usage_by_example 0.0.0 → 1.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/.rspec +1 -0
- data/Gemfile +4 -3
- data/Gemfile.lock +22 -3
- data/lib/usage_by_example/version.rb +22 -1
- data/lib/usage_by_example.rb +21 -8
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 573271b147430fa57fbc9033ba649e3f06781682e84c5fcc9a6c0f3a298384cc
|
4
|
+
data.tar.gz: eb7d882376968b14dbeff1e751aa41ac8ca4fbb9c45e990e291664b62b105554
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea9e30bf8524063648804609da775df4f608908748cfcd46f580d77c7cbcd3a753681857e42b6328496dd5d5914a4f711a6b9b946cd68d0a06fe10357dc2622e
|
7
|
+
data.tar.gz: cce5f456d605e05c2d09938baa14c71ac0320df8a69de179920ab60a365c09d2caabbbe00f352a85d0245c34dd7e9e8ad3184c0472afe4a6b7833eb15f3c03a0
|
data/.rspec
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,18 +1,37 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
usage_by_example (0.0.
|
4
|
+
usage_by_example (1.0.0.beta)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
|
9
|
+
coderay (1.1.3)
|
10
|
+
diff-lcs (1.5.0)
|
11
|
+
method_source (1.0.0)
|
12
|
+
pry (0.14.2)
|
13
|
+
coderay (~> 1.1)
|
14
|
+
method_source (~> 1.0)
|
15
|
+
rspec (3.12.0)
|
16
|
+
rspec-core (~> 3.12.0)
|
17
|
+
rspec-expectations (~> 3.12.0)
|
18
|
+
rspec-mocks (~> 3.12.0)
|
19
|
+
rspec-core (3.12.2)
|
20
|
+
rspec-support (~> 3.12.0)
|
21
|
+
rspec-expectations (3.12.3)
|
22
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
23
|
+
rspec-support (~> 3.12.0)
|
24
|
+
rspec-mocks (3.12.5)
|
25
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
26
|
+
rspec-support (~> 3.12.0)
|
27
|
+
rspec-support (3.12.0)
|
10
28
|
|
11
29
|
PLATFORMS
|
12
30
|
x86_64-darwin-19
|
13
31
|
|
14
32
|
DEPENDENCIES
|
15
|
-
|
33
|
+
pry
|
34
|
+
rspec
|
16
35
|
usage_by_example!
|
17
36
|
|
18
37
|
BUNDLED WITH
|
@@ -1,5 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class UsageByExample
|
4
|
-
VERSION =
|
4
|
+
VERSION = '1.0.0'
|
5
5
|
end
|
6
|
+
|
7
|
+
|
8
|
+
__END__
|
9
|
+
|
10
|
+
# Major version bump when breaking changes or new features
|
11
|
+
# Minor version bump when backward-compatible changes or enhancements
|
12
|
+
# Patch version bump when backward-compatible bug fixes, security updates etc
|
13
|
+
|
14
|
+
1.0.0
|
15
|
+
|
16
|
+
- Extract optional and required argument names from a usage text
|
17
|
+
- Extract option names and associated argument names (if any) from a usage text
|
18
|
+
- Include help option by default
|
19
|
+
- Parse options and arguments from command-line arguments aka ARGV
|
20
|
+
- Exit gracefully or raise exceptions, depending on the exit_on_error parameter
|
21
|
+
- Implement dynamic methods for checking options and getting arguments
|
22
|
+
- Ensure correct git tag and all changes committed when building gem
|
23
|
+
|
24
|
+
0.0.0
|
25
|
+
|
26
|
+
- Prehistory starts here...
|
data/lib/usage_by_example.rb
CHANGED
@@ -5,6 +5,14 @@ require_relative "usage_by_example/version"
|
|
5
5
|
|
6
6
|
class UsageByExample
|
7
7
|
|
8
|
+
attr_reader :argument_names_optional
|
9
|
+
attr_reader :argument_names_required
|
10
|
+
attr_reader :option_names
|
11
|
+
|
12
|
+
attr_reader :arguments
|
13
|
+
attr_reader :options
|
14
|
+
|
15
|
+
|
8
16
|
def self.read(data)
|
9
17
|
return new data.read
|
10
18
|
end
|
@@ -46,7 +54,7 @@ class UsageByExample
|
|
46
54
|
@option_names.update("-h" => :help, "--help" => :help)
|
47
55
|
end
|
48
56
|
|
49
|
-
def parse(argv)
|
57
|
+
def parse(argv, exit_on_error: true)
|
50
58
|
array = argv.dup
|
51
59
|
@arguments = {}
|
52
60
|
@options = {}
|
@@ -73,6 +81,9 @@ class UsageByExample
|
|
73
81
|
|
74
82
|
# --- 2) Parse optional arguments ---------------------------------
|
75
83
|
|
84
|
+
# Check any start with --, ie excess options
|
85
|
+
# Check min_length - max_length here
|
86
|
+
|
76
87
|
stash = array.pop(@argument_names_required.length)
|
77
88
|
@argument_names_optional.each do |argument_name|
|
78
89
|
break if array.empty?
|
@@ -95,25 +106,27 @@ class UsageByExample
|
|
95
106
|
if not array.empty?
|
96
107
|
# Custom error message if most recent option did not require argument
|
97
108
|
raise "Got unexpected argument for option #{most_recent_option}" if most_recent_option
|
98
|
-
min_length = @argument_names.length
|
99
|
-
max_length = @argument_names.length + @argument_names_optional.length
|
100
109
|
raise "Expected #{min_length}#{"-#{max_length}" if max_length > min_length} arguments, got more"
|
101
110
|
end
|
102
111
|
|
103
112
|
return self
|
104
113
|
|
105
114
|
rescue RuntimeError => err
|
106
|
-
|
107
|
-
|
108
|
-
|
115
|
+
if exit_on_error
|
116
|
+
puts "ERROR: #{err.message}\n\n" unless err.message.empty?
|
117
|
+
puts @usage
|
118
|
+
exit
|
119
|
+
else
|
120
|
+
raise # Reraise the same exception
|
121
|
+
end
|
109
122
|
end
|
110
123
|
|
111
124
|
def method_missing(sym, *args, &block)
|
112
125
|
case sym
|
113
|
-
when /^argument_(
|
126
|
+
when /^argument_(\w+)$/
|
114
127
|
val = @arguments[$1]
|
115
128
|
block && val ? block.call(val) : val
|
116
|
-
when /^include_(
|
129
|
+
when /^include_(\w+)\?$/
|
117
130
|
@options[$1]
|
118
131
|
else
|
119
132
|
super
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: usage_by_example
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adrian Kuhn
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|