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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 981581db3c47348ed0b804ceb7af1068922afa7068f725cb92d825f5ae64bb50
4
- data.tar.gz: cb02f3c80a000e065e47166cca441f8c90878a3ab546230dbe627c4d4fdb9036
3
+ metadata.gz: b61fac1a46509a4bdfd77e35bbfd9b962e95ec047c5cc0bf4250ced2e20da99f
4
+ data.tar.gz: 32fa56a0e3be8becb705172cac48fb6d0c430a209129bc0b203fe4c223ab9396
5
5
  SHA512:
6
- metadata.gz: d53c316f21dd58b7fe9620be47e611269218356d0e5c774e7bccda40424c37c04eee908c55dd50e69366b1780ef05ac2b6c08a890cd3baa87e69fcb4d358cbc0
7
- data.tar.gz: 59f986a8d3c90da0b1c015fb89935945d270f299149dbfeed961c8e3fdd5ef9a55f5da9c7baadb15385bf3d281bccbe838f6877d2b35324403dd95a684d9842d
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
- def args = @__args__ ||= []
10
+ attr_reader :args, :values
10
11
 
11
- def values = @__values__ ||= OpenStruct.new
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
- add_args(args)
16
- values.update(keys)
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
@@ -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
- match => [name]
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
- match => [name]
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
@@ -2,7 +2,7 @@
2
2
 
3
3
  module ExAequo
4
4
  module Cli
5
- VERSION = '0.1.0'
5
+ VERSION = '0.1.2'
6
6
  end
7
7
  end
8
8
  # SPDX-License-Identifier: AGPL-3.0-or-later
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.0
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.10
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.10
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: