ex_aequo_cli 0.1.0 → 0.1.2
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/ex_aequo/cli/args/flag_description.rb +2 -1
- data/lib/ex_aequo/cli/args/result.rb +24 -4
- data/lib/ex_aequo/cli/args/view.rb +20 -0
- data/lib/ex_aequo/cli/args.rb +40 -6
- data/lib/ex_aequo/cli/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b61fac1a46509a4bdfd77e35bbfd9b962e95ec047c5cc0bf4250ced2e20da99f
|
4
|
+
data.tar.gz: 32fa56a0e3be8becb705172cac48fb6d0c430a209129bc0b203fe4c223ab9396
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 001c6d3e0fabed6a3cb2a8893756f6754ef991e5648806575b24805d30e266bcb6ae2ab5d856f046a8a2b5fb24031b605654f1307435eb31ef5e0342d6920910
|
7
|
+
data.tar.gz: 396e0c524a930cce9936d76445a77fb76dccdf177851604d95bbd825185e0ff24d2daf89aa94ea38020f8ace26906bffb6fe1942c7aee780d85b489f2363a9b1
|
@@ -10,7 +10,7 @@ module ExAequo
|
|
10
10
|
BooleanFlagRgx = %r{\A : (.*) \z}x
|
11
11
|
OtherFlagRgx = %r{\A (.*?) : (.*) \z}x
|
12
12
|
|
13
|
-
attr_reader :default, :description, :name, :short, :type
|
13
|
+
attr_reader :alias, :default, :description, :name, :short, :type
|
14
14
|
|
15
15
|
def cast_value(value)
|
16
16
|
value = default if value.nil?
|
@@ -36,6 +36,7 @@ module ExAequo
|
|
36
36
|
check_and_set_type(flag.fetch(:type, :str))
|
37
37
|
@default = flag.fetch(:default, nil)
|
38
38
|
@description = flag.fetch(:description, :nil)
|
39
|
+
@alias = flag.fetch(:alias, :nil)
|
39
40
|
end
|
40
41
|
|
41
42
|
# def check_args!(flag, long:, type:, default:)
|
@@ -1,19 +1,39 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'ostruct'
|
4
|
+
require_relative 'view'
|
4
5
|
module ExAequo
|
5
6
|
module Cli
|
6
7
|
class Args
|
7
8
|
class Result
|
8
9
|
|
9
|
-
|
10
|
+
attr_reader :args, :values
|
10
11
|
|
11
|
-
def
|
12
|
+
def post_process(post_processors)
|
13
|
+
post_processors.each { apply_post_processor it }
|
14
|
+
self
|
15
|
+
end
|
12
16
|
|
13
17
|
private
|
14
18
|
def initialize(*args, **keys)
|
15
|
-
|
16
|
-
values.
|
19
|
+
@args = args
|
20
|
+
@values = OpenStruct.new(keys)
|
21
|
+
end
|
22
|
+
|
23
|
+
def apply_post_processor(postpr)
|
24
|
+
view = View.new(args, values.to_h)
|
25
|
+
result = view.instance_exec(&postpr)
|
26
|
+
case result
|
27
|
+
in [nil, values0]
|
28
|
+
@values = OpenStruct.new(values0)
|
29
|
+
in [args0, nil]
|
30
|
+
@args = args0
|
31
|
+
in [args1, values1]
|
32
|
+
@args = args1
|
33
|
+
@values = OpenStruct.new(values1)
|
34
|
+
else
|
35
|
+
raise "Format of #{result.inspect} not (yet) supported"
|
36
|
+
end
|
17
37
|
end
|
18
38
|
|
19
39
|
def add_args(argums) = argums.flatten.each { args << it }
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'casters'
|
4
|
+
module ExAequo
|
5
|
+
module Cli
|
6
|
+
class Args
|
7
|
+
class View
|
8
|
+
include Casters
|
9
|
+
attr_reader :args, :values
|
10
|
+
|
11
|
+
private
|
12
|
+
def initialize(args, values)
|
13
|
+
@args = args.dup
|
14
|
+
@values = values.dup
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
data/lib/ex_aequo/cli/args.rb
CHANGED
@@ -34,12 +34,33 @@ module ExAequo
|
|
34
34
|
@result = strict ? compute_result(strict:) : Result.new(*@args, **@values)
|
35
35
|
|
36
36
|
check!
|
37
|
-
|
38
37
|
@result
|
39
38
|
end
|
40
39
|
|
40
|
+
def post_process(&blk)
|
41
|
+
raise ArgumentError, 'post_process method needs a block' unless blk
|
42
|
+
|
43
|
+
post_processors << blk
|
44
|
+
self
|
45
|
+
end
|
46
|
+
|
47
|
+
def post_process_args(&blk)
|
48
|
+
raise ArgumentError, 'post_process_args method needs a block' unless blk
|
49
|
+
|
50
|
+
post_processors << -> { [instance_exec(&blk), nil] }
|
51
|
+
self
|
52
|
+
end
|
53
|
+
|
54
|
+
def post_process_values(&blk)
|
55
|
+
raise ArgumentError, 'post_process_values method needs a block' unless blk
|
56
|
+
|
57
|
+
post_processors << -> { [nil, instance_exec(&blk)] }
|
58
|
+
self
|
59
|
+
end
|
60
|
+
|
41
61
|
private
|
42
62
|
def initialize(*args, &blk)
|
63
|
+
@aliases = {}
|
43
64
|
|
44
65
|
@flags = {}
|
45
66
|
args.each { define_flag it }
|
@@ -54,6 +75,7 @@ module ExAequo
|
|
54
75
|
checkers << Checker.new(name: 'default constraint', &blk) if blk
|
55
76
|
end
|
56
77
|
|
78
|
+
|
57
79
|
def check! = checkers.each { it.check!(@result) }
|
58
80
|
|
59
81
|
def check_for_spurious!(strict:)
|
@@ -70,12 +92,22 @@ module ExAequo
|
|
70
92
|
flags = @flags.inject @values do |res, (name, flag_desc)|
|
71
93
|
res.merge(name => flag_desc.cast_value(res[name]))
|
72
94
|
end
|
73
|
-
Result.new(*@args, **flags)
|
95
|
+
@result = Result.new(*@args, **flags)
|
96
|
+
run_post_processors
|
74
97
|
end
|
75
98
|
|
76
99
|
def define_flag(flag)
|
77
100
|
desc = FlagDescription.new(flag)
|
78
101
|
@flags[desc.name] = desc
|
102
|
+
|
103
|
+
return unless ali = desc.alias
|
104
|
+
@aliases[ali] = desc.name
|
105
|
+
end
|
106
|
+
|
107
|
+
def get_real_name(match)
|
108
|
+
match => [name]
|
109
|
+
name = name.gsub('-','_').to_sym
|
110
|
+
@aliases.fetch(name, name)
|
79
111
|
end
|
80
112
|
|
81
113
|
def parse_arg
|
@@ -106,15 +138,17 @@ module ExAequo
|
|
106
138
|
end
|
107
139
|
|
108
140
|
def parse_flag(match)
|
109
|
-
|
110
|
-
name = name.gsub('-','_').to_sym
|
141
|
+
name = get_real_name(match)
|
111
142
|
@values[name] = true
|
112
143
|
@args.shift
|
113
144
|
end
|
114
145
|
|
146
|
+
def post_processors = @__post_processors__ ||= []
|
147
|
+
|
148
|
+
def run_post_processors = @result.post_process(post_processors)
|
149
|
+
|
115
150
|
def set_value(match)
|
116
|
-
|
117
|
-
name = name.gsub('-','_').to_sym
|
151
|
+
name = get_real_name(match)
|
118
152
|
@current_value_name = name
|
119
153
|
@args.shift
|
120
154
|
end
|
data/lib/ex_aequo/cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ex_aequo_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Dober
|
@@ -15,14 +15,14 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 0.1.
|
18
|
+
version: 0.1.11
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - "~>"
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: 0.1.
|
25
|
+
version: 0.1.11
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rspec
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- lib/ex_aequo/cli/args/errors.rb
|
54
54
|
- lib/ex_aequo/cli/args/flag_description.rb
|
55
55
|
- lib/ex_aequo/cli/args/result.rb
|
56
|
+
- lib/ex_aequo/cli/args/view.rb
|
56
57
|
- lib/ex_aequo/cli/version.rb
|
57
58
|
homepage: https://codeberg.org/lab419/rb_ex_aequo_cli
|
58
59
|
licenses:
|