eco-helpers 0.8.3 → 0.8.4
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/eco-helpers.gemspec +0 -2
- data/lib/eco-helpers.rb +0 -1
- data/lib/eco/api/common/people/person_entry.rb +67 -30
- data/lib/eco/api/common/version_patches.rb +2 -1
- data/lib/eco/api/common/version_patches/base_model.rb +27 -0
- data/lib/eco/api/organization/people.rb +6 -0
- data/lib/eco/api/organization/tag_tree.rb +6 -0
- data/lib/eco/api/policies/policy.rb +2 -2
- data/lib/eco/api/session.rb +23 -30
- data/lib/eco/api/session/batch.rb +3 -2
- data/lib/eco/api/session/batch_job.rb +18 -10
- data/lib/eco/api/session/batch_status.rb +27 -11
- data/lib/eco/api/session/config.rb +20 -7
- data/lib/eco/api/usecases/default_cases/change_email_case.rb +2 -6
- data/lib/eco/api/usecases/default_cases/refresh_presets_case.rb +3 -2
- data/lib/eco/api/usecases/use_case.rb +6 -5
- data/lib/eco/api/usecases/use_case_chain.rb +3 -3
- data/lib/eco/api/usecases/use_case_io.rb +3 -3
- data/lib/eco/assets.rb +3 -1
- data/lib/eco/{common → assets}/language.rb +2 -2
- data/lib/eco/cli.rb +3 -4
- data/lib/eco/cli/config.rb +10 -0
- data/lib/eco/cli/config/options.rb +11 -0
- data/lib/eco/cli/scripting.rb +23 -0
- data/lib/eco/cli/scripting/args_helpers.rb +55 -0
- data/lib/eco/cli/scripting/argument.rb +31 -0
- data/lib/eco/cli/scripting/arguments.rb +70 -0
- data/lib/eco/common.rb +1 -3
- data/lib/eco/data/crypto/encryption.rb +2 -2
- data/lib/eco/language/models/collection.rb +1 -1
- data/lib/eco/version.rb +1 -1
- metadata +9 -62
- data/lib/eco/cli/api.rb +0 -14
- data/lib/eco/cli/root.rb +0 -9
- data/lib/eco/cli/session.rb +0 -9
- data/lib/eco/cli/session/batch.rb +0 -9
- data/lib/eco/common/base_cli.rb +0 -23
- data/lib/eco/common/base_cli_backup.rb +0 -120
- data/lib/eco/common/meta_thor.rb +0 -111
- data/lib/eco/common/meta_thor/command_group.rb +0 -36
- data/lib/eco/common/meta_thor/command_unit.rb +0 -48
- data/lib/eco/common/meta_thor/input_backup.rb +0 -111
- data/lib/eco/common/meta_thor/input_multi_backup.rb +0 -139
- data/lib/eco/common/meta_thor/pipe.rb +0 -85
- data/lib/eco/common/meta_thor/thor.rb +0 -1
- data/lib/eco/common/meta_thor/thor/command.rb +0 -36
- data/lib/eco/common/meta_thor/value.rb +0 -54
- data/lib/eco/scripting.rb +0 -32
- data/lib/eco/scripting/README.md +0 -11
- data/lib/eco/scripting/args_helpers.rb +0 -53
- data/lib/eco/scripting/argument.rb +0 -29
- data/lib/eco/scripting/arguments.rb +0 -68
data/lib/eco/common/meta_thor.rb
DELETED
@@ -1,111 +0,0 @@
|
|
1
|
-
require 'thor'
|
2
|
-
|
3
|
-
module Eco
|
4
|
-
module Common
|
5
|
-
class MetaThor < Thor
|
6
|
-
INPUT_OPTION = "input"
|
7
|
-
INPUT_SYM = :input
|
8
|
-
INPUT_KEY = "json"
|
9
|
-
CUSTOM_HELP_MAPPINGS = ["?", "help"]
|
10
|
-
ALL_HELP_MAPPINGS = ::Thor::HELP_MAPPINGS + CUSTOM_HELP_MAPPINGS
|
11
|
-
|
12
|
-
class_option :input, type: :hash, default: {json: nil}, required: false, desc: "--input=json:STRING"
|
13
|
-
class_option :pipe, type: :boolean, default: false, required: false, desc: "--pipe subcommand"
|
14
|
-
|
15
|
-
class << self
|
16
|
-
def start(given_args = ARGV, config = {})
|
17
|
-
config[:shell] ||= Thor::Base.shell.new
|
18
|
-
CommandGroup.new(given_args).map do |unit|
|
19
|
-
args = unit.args {|args| parse_custom_help(args)}
|
20
|
-
input = unit.input&.as_option
|
21
|
-
result = dispatch(nil, args.dup, input, config)
|
22
|
-
exit if help?(args)
|
23
|
-
unit.output = Value.new(result)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# @note: it allows to use `help` at the end (alias: `?`)
|
28
|
-
# If there is custom help at the end of the current command,
|
29
|
-
# normalize custom help to native `help` and switch last
|
30
|
-
# and second last arguments
|
31
|
-
def parse_custom_help(args)
|
32
|
-
return args unless custom_help?(args&.last)
|
33
|
-
# move from custom to native help
|
34
|
-
if args.length > 1
|
35
|
-
# switch args last and second last position
|
36
|
-
args.insert(args.length - 2, "help").pop
|
37
|
-
else
|
38
|
-
args[0] = "help"
|
39
|
-
end
|
40
|
-
args
|
41
|
-
end
|
42
|
-
|
43
|
-
def custom_help?(value)
|
44
|
-
CUSTOM_HELP_MAPPINGS.include?(value)
|
45
|
-
end
|
46
|
-
|
47
|
-
def help?(value)
|
48
|
-
case value
|
49
|
-
when String
|
50
|
-
ALL_HELP_MAPPINGS.include?(value)
|
51
|
-
when Symbol
|
52
|
-
help?(value.to_s)
|
53
|
-
when Array
|
54
|
-
value.any? { |v| help?(v) }
|
55
|
-
when Hash
|
56
|
-
value.keys.any? { |k| help?(v) }
|
57
|
-
else
|
58
|
-
"what? #{value}"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
protected
|
65
|
-
|
66
|
-
no_commands do
|
67
|
-
def input?(options)
|
68
|
-
options &&
|
69
|
-
(options.key?(INPUT_OPTION) || options.key?(INPUT_KEY) ||
|
70
|
-
options.key?(Value::KEY_OPTION) )
|
71
|
-
end
|
72
|
-
|
73
|
-
def input(value)
|
74
|
-
|
75
|
-
case
|
76
|
-
when value.is_a?(Value)
|
77
|
-
value.value
|
78
|
-
when value.is_a?(String)
|
79
|
-
input(JSON.parse(value))
|
80
|
-
when value.is_a?(Hash)
|
81
|
-
case
|
82
|
-
when value.key?(Value::KEY_OPTION)
|
83
|
-
Value.to_value(value)
|
84
|
-
when value.key?(INPUT_OPTION)
|
85
|
-
input(value[INPUT_OPTION])
|
86
|
-
when value.key?(INPUT_SYM)
|
87
|
-
input(value[INPUT_SYM])
|
88
|
-
when value.key?(INPUT_KEY)
|
89
|
-
val = value[INPUT_KEY]
|
90
|
-
JSON.parse(val) unless val.is_a?(Hash)
|
91
|
-
else
|
92
|
-
value
|
93
|
-
end
|
94
|
-
else
|
95
|
-
value
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
require_relative 'meta_thor/pipe'
|
106
|
-
require_relative 'meta_thor/command_unit'
|
107
|
-
require_relative 'meta_thor/command_group'
|
108
|
-
require_relative 'meta_thor/value'
|
109
|
-
require_relative 'meta_thor/thor'
|
110
|
-
#require_relative 'metha_thor/input'
|
111
|
-
#require_relative 'metha_thor/input_multi'
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module Eco
|
2
|
-
module Common
|
3
|
-
class MetaThor
|
4
|
-
class CommandGroup
|
5
|
-
|
6
|
-
attr_reader :units
|
7
|
-
|
8
|
-
def initialize(args)
|
9
|
-
args = (args && [args].flatten) || []
|
10
|
-
#pp "CommandGroup split args: #{Pipe.split(args)}"
|
11
|
-
@units = Pipe.split(args).each_with_index.map do |arguments, i|
|
12
|
-
CommandUnit.new(args: arguments, group: self, index: i)
|
13
|
-
end
|
14
|
-
@units = units
|
15
|
-
end
|
16
|
-
|
17
|
-
def print
|
18
|
-
@units.map do |command|
|
19
|
-
pp command.args
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def [](value)
|
24
|
-
@units[value]
|
25
|
-
end
|
26
|
-
|
27
|
-
def map
|
28
|
-
@units.map do |unit|
|
29
|
-
yield(unit)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
module Eco
|
2
|
-
module Common
|
3
|
-
class MetaThor
|
4
|
-
class CommandUnit
|
5
|
-
class << self
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
attr_reader :group, :index
|
10
|
-
attr_reader :pipe
|
11
|
-
attr_reader :args, :source_args
|
12
|
-
attr_accessor :output
|
13
|
-
|
14
|
-
def initialize(args:, group:, index:)
|
15
|
-
@source_args = args.dup || []
|
16
|
-
@args = @source_args
|
17
|
-
@args = @args.slice(1..-1) if Pipe.piped?(@source_args)
|
18
|
-
@pipe = Pipe.new(command: self) if Pipe.piped?(@source_args)
|
19
|
-
|
20
|
-
@group = group
|
21
|
-
@index = index
|
22
|
-
end
|
23
|
-
|
24
|
-
def piped?
|
25
|
-
!!@pipe
|
26
|
-
end
|
27
|
-
|
28
|
-
def input
|
29
|
-
pipe&.input
|
30
|
-
end
|
31
|
-
|
32
|
-
def args
|
33
|
-
arguments = @args.dup
|
34
|
-
arguments = yield(arguments) if block_given?
|
35
|
-
arguments
|
36
|
-
end
|
37
|
-
|
38
|
-
def piped_args
|
39
|
-
args.tap do |arguments|
|
40
|
-
arguments = yield(arguments) if block_given?
|
41
|
-
arguments.push(pipe.input.as_input_option) if piped?
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,111 +0,0 @@
|
|
1
|
-
module Eco
|
2
|
-
module Common
|
3
|
-
class MethaThor
|
4
|
-
class Input
|
5
|
-
MODES = [:both, :json, :value]
|
6
|
-
|
7
|
-
attr_reader :mode
|
8
|
-
|
9
|
-
def initialize(value, mode = :both)
|
10
|
-
@mode = mode
|
11
|
-
@mode = :both unless MODES.include?(mode)
|
12
|
-
|
13
|
-
@doc = {}
|
14
|
-
@doc['value'] = {} if self.value?
|
15
|
-
@doc['json'] = {} if self.json?
|
16
|
-
|
17
|
-
self.value = value
|
18
|
-
end
|
19
|
-
|
20
|
-
def to_h
|
21
|
-
@doc
|
22
|
-
end
|
23
|
-
|
24
|
-
def json?
|
25
|
-
@mode == :json || @mode = :both
|
26
|
-
end
|
27
|
-
|
28
|
-
def value?
|
29
|
-
@mode == :value || @mode = :both
|
30
|
-
end
|
31
|
-
|
32
|
-
def json
|
33
|
-
@doc['json'] if self.json?
|
34
|
-
end
|
35
|
-
|
36
|
-
def parse
|
37
|
-
JSON.parse(self.json) if self.json?
|
38
|
-
end
|
39
|
-
|
40
|
-
def json=(value)
|
41
|
-
@doc['value'] = value if self.value?
|
42
|
-
@doc['json'] = to_json(value) if self.json?
|
43
|
-
end
|
44
|
-
|
45
|
-
def value
|
46
|
-
return @doc['value'] if self.value?
|
47
|
-
self.parse
|
48
|
-
end
|
49
|
-
|
50
|
-
def value=(value)
|
51
|
-
@doc['value'] = value if self.value?
|
52
|
-
@doc['json'] = to_json(value) if self.json?
|
53
|
-
end
|
54
|
-
|
55
|
-
def present?(key)
|
56
|
-
self[key]&.present?
|
57
|
-
end
|
58
|
-
|
59
|
-
def empty?
|
60
|
-
return @doc['value'].keys.length == 0 if self.value?
|
61
|
-
@doc['json'].keys.length == 0
|
62
|
-
end
|
63
|
-
|
64
|
-
# merging implies that @mode is equalized to the lesser
|
65
|
-
# => :both.merge(:json) == :json ; :value.merge(:both) == :value mode
|
66
|
-
# => :json.merge(:value) will raise an exception
|
67
|
-
def merge(value)
|
68
|
-
merge_hash(hash(value))
|
69
|
-
self
|
70
|
-
end
|
71
|
-
|
72
|
-
private
|
73
|
-
|
74
|
-
def to_json(value)
|
75
|
-
if value.respond_to?(:as_json)
|
76
|
-
input.as_json
|
77
|
-
elsif value.respond_to?(:to_json)
|
78
|
-
value.to_json
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def doc_mode(doc)
|
83
|
-
case doc
|
84
|
-
when String
|
85
|
-
doc = JSON.parse(doc)
|
86
|
-
return nil unless doc.is_a?(Hash)
|
87
|
-
doc_mode(doc)
|
88
|
-
when CliInput
|
89
|
-
doc.mode
|
90
|
-
when Hash
|
91
|
-
mod_json = doc.key?('json')
|
92
|
-
mod_value = doc.key?('value')
|
93
|
-
mod_json ? (mod_value ? :both : :json) : (mod_value ? :value : nil)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def hash(value)
|
98
|
-
case value
|
99
|
-
when String
|
100
|
-
JSON.parse(value)
|
101
|
-
when CliInput
|
102
|
-
value.to_h
|
103
|
-
when Hash
|
104
|
-
value
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
@@ -1,139 +0,0 @@
|
|
1
|
-
module Eco
|
2
|
-
module Common
|
3
|
-
class MethaThor
|
4
|
-
class MultiInput
|
5
|
-
MODES = [:both, :json, :value]
|
6
|
-
|
7
|
-
attr_reader :mode
|
8
|
-
|
9
|
-
def initialize(doc = {}, mode = :both)
|
10
|
-
@mode = doc_mode(doc) || mode
|
11
|
-
@mode = :both unless MODES.include?(@mode)
|
12
|
-
|
13
|
-
@doc = {}
|
14
|
-
@doc['value'] = {} if self.value?
|
15
|
-
@doc['json'] = {} if self.json?
|
16
|
-
|
17
|
-
self.merge(doc) unless doc.empty?
|
18
|
-
end
|
19
|
-
|
20
|
-
def to_h
|
21
|
-
@doc
|
22
|
-
end
|
23
|
-
|
24
|
-
def json?
|
25
|
-
@mode == :json || @mode = :both
|
26
|
-
end
|
27
|
-
|
28
|
-
def value?
|
29
|
-
@mode == :value || @mode = :both
|
30
|
-
end
|
31
|
-
|
32
|
-
def json(key)
|
33
|
-
@doc.dig('json', key)
|
34
|
-
end
|
35
|
-
|
36
|
-
def [](key)
|
37
|
-
return @doc.dig('value', key) if self.value?
|
38
|
-
JSON.parse(@doc.dig('json', key))
|
39
|
-
end
|
40
|
-
|
41
|
-
def []=(key, value)
|
42
|
-
@doc['value'][key] = value if self.value?
|
43
|
-
@doc['json'][key] = to_json(value) if self.json?
|
44
|
-
end
|
45
|
-
|
46
|
-
def delete(key)
|
47
|
-
if self.key?(key)
|
48
|
-
value = @doc['value'].delete(key) if self.value?
|
49
|
-
value2 = JSON.parse(@doc['json'].delete(key)) if self.json?
|
50
|
-
return value if self.value?
|
51
|
-
value2
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def key?(key)
|
56
|
-
return @doc['value'].key?(key) if self.value?
|
57
|
-
@doc['json'].key?(key)
|
58
|
-
end
|
59
|
-
|
60
|
-
def present?(key)
|
61
|
-
self[key]&.present?
|
62
|
-
end
|
63
|
-
|
64
|
-
def empty?
|
65
|
-
return @doc['value'].keys.length == 0 if self.value?
|
66
|
-
@doc['json'].keys.length == 0
|
67
|
-
end
|
68
|
-
|
69
|
-
# merging implies that @mode is equalized to the lesser
|
70
|
-
# => :both.merge(:json) == :json ; :value.merge(:both) == :value mode
|
71
|
-
# => :json.merge(:value) will raise an exception
|
72
|
-
def merge(value)
|
73
|
-
merge_hash(hash(value))
|
74
|
-
self
|
75
|
-
end
|
76
|
-
|
77
|
-
private
|
78
|
-
|
79
|
-
def to_json(value)
|
80
|
-
if value.respond_to?(:as_json)
|
81
|
-
input.as_json
|
82
|
-
elsif value.respond_to?(:to_json)
|
83
|
-
value.to_json
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def doc_mode(doc)
|
88
|
-
case doc
|
89
|
-
when String
|
90
|
-
doc = JSON.parse(doc)
|
91
|
-
return nil unless doc.is_a?(Hash)
|
92
|
-
doc_mode(doc)
|
93
|
-
when CliInput
|
94
|
-
doc.mode
|
95
|
-
when Hash
|
96
|
-
mod_json = doc.key?('json')
|
97
|
-
mod_value = doc.key?('value')
|
98
|
-
mod_json ? (mod_value ? :both : :json) : (mod_value ? :value : nil)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def hash(value)
|
103
|
-
case value
|
104
|
-
when String
|
105
|
-
JSON.parse(value)
|
106
|
-
when CliInput
|
107
|
-
value.to_h
|
108
|
-
when Hash
|
109
|
-
value
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def merge_hash(value)
|
114
|
-
err_input = "Error: merge requires a correct Hashable value or a #{self.class.name} instance."
|
115
|
-
err_incompatible = "Error: can't merge value mode with json mode."
|
116
|
-
raise err_input unless value.is_a?(Hash)
|
117
|
-
return unless !value.empty?
|
118
|
-
|
119
|
-
raise err_input if ! (mode = doc_mode(value))
|
120
|
-
raise err_incompatible if ! (new_mode = resolve_mode(mode))
|
121
|
-
@mode = new_mode
|
122
|
-
|
123
|
-
@doc.delete('json') unless self.json?
|
124
|
-
@doc.delete('value') unless self.value?
|
125
|
-
|
126
|
-
@doc['json'].merge(value['json']) if self.json?
|
127
|
-
@doc['value'].merge(value['value']) if self.value?
|
128
|
-
end
|
129
|
-
|
130
|
-
def resolve_mode(mode)
|
131
|
-
return mode if @mode == :both
|
132
|
-
return @mode if mode == :both
|
133
|
-
return mode if @mode == mode
|
134
|
-
end
|
135
|
-
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|