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
@@ -1,85 +0,0 @@
|
|
1
|
-
module Eco
|
2
|
-
module Common
|
3
|
-
class MetaThor
|
4
|
-
class Pipe
|
5
|
-
SYM = "!"
|
6
|
-
SYMS = [SYM]
|
7
|
-
|
8
|
-
class << self
|
9
|
-
#def rex_pipes
|
10
|
-
# alternatives = Regex.escape(SYMS).join("|")
|
11
|
-
# /(#{alternatives})/g
|
12
|
-
#end
|
13
|
-
|
14
|
-
def type(str)
|
15
|
-
case str
|
16
|
-
when SYM
|
17
|
-
:standard
|
18
|
-
else
|
19
|
-
:unkown
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def pipe?(str)
|
24
|
-
SYMS.include?(str)
|
25
|
-
end
|
26
|
-
|
27
|
-
def piped?(args)
|
28
|
-
args.any? do |arg|
|
29
|
-
pipe?(arg)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def split(args, pipe_to_sym: false)
|
34
|
-
args = (args && [args].flatten) || []
|
35
|
-
if piped?(args)
|
36
|
-
args.reduce([[]]) do |groups,arg|
|
37
|
-
cg = []
|
38
|
-
cg = pipe?(arg) ? cg : groups.last
|
39
|
-
cg.push(arg) if arg
|
40
|
-
|
41
|
-
groups.push(cg) if pipe?(arg)
|
42
|
-
groups
|
43
|
-
end
|
44
|
-
else
|
45
|
-
[].push(args)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
attr_reader :type, :command
|
51
|
-
|
52
|
-
def initialize(command:)
|
53
|
-
@command = command
|
54
|
-
args = @command.source_args
|
55
|
-
@type = self.class.type(args.shift)
|
56
|
-
end
|
57
|
-
|
58
|
-
def standard?
|
59
|
-
@type == :standard
|
60
|
-
end
|
61
|
-
|
62
|
-
def command_group
|
63
|
-
command.group
|
64
|
-
end
|
65
|
-
|
66
|
-
def index
|
67
|
-
command.index
|
68
|
-
end
|
69
|
-
|
70
|
-
def input_index
|
71
|
-
return nil unless index > 0
|
72
|
-
case type
|
73
|
-
when :standard
|
74
|
-
index - 1
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def input
|
79
|
-
command_group[input_index].output if input_index
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
require_relative 'thor/command'
|
@@ -1,36 +0,0 @@
|
|
1
|
-
class Thor
|
2
|
-
class Command
|
3
|
-
|
4
|
-
# By default, a command invokes a method in the thor class. You can change this
|
5
|
-
# implementation to create custom commands.
|
6
|
-
# Source: https://github.com/erikhuda/thor/blob/master/lib/thor/command.rb
|
7
|
-
# Trace:
|
8
|
-
# 1. Base_Class.start
|
9
|
-
# 2. Thor_Class.dispatch
|
10
|
-
# - (new) Base.initialize -> with options
|
11
|
-
# 3. Base_Instance.invoke_command (invocation.rb)
|
12
|
-
# 4. Command_Instance.run
|
13
|
-
# @note: modified so it integrates input/output for custom Pipe
|
14
|
-
def run(instance, args = [])
|
15
|
-
arity = nil
|
16
|
-
|
17
|
-
if private_method?(instance)
|
18
|
-
result = instance.class.handle_no_command_error(name)
|
19
|
-
elsif public_method?(instance)
|
20
|
-
arity = instance.method(name).arity
|
21
|
-
result = instance.__send__(name, *args)
|
22
|
-
elsif local_method?(instance, :method_missing)
|
23
|
-
result = instance.__send__(:method_missing, name.to_sym, *args)
|
24
|
-
else
|
25
|
-
result = instance.class.handle_no_command_error(name)
|
26
|
-
end
|
27
|
-
|
28
|
-
result
|
29
|
-
rescue ArgumentError => e
|
30
|
-
handle_argument_error?(instance, e, caller) ? instance.class.handle_argument_error(self, e, args, arity) : (raise e)
|
31
|
-
rescue NoMethodError => e
|
32
|
-
handle_no_method_error?(instance, e, caller) ? instance.class.handle_no_command_error(name) : (raise e)
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
module Eco
|
2
|
-
module Common
|
3
|
-
class MetaThor
|
4
|
-
class Value
|
5
|
-
KEY = "MetaThorValue"
|
6
|
-
KEY_OPTION = "MetaThorJSON"
|
7
|
-
|
8
|
-
class << self
|
9
|
-
def to_value(doc)
|
10
|
-
case
|
11
|
-
when doc.is_a?(Hash)
|
12
|
-
case
|
13
|
-
when doc.key?(KEY_OPTION)
|
14
|
-
to_value(doc[KEY_OPTION])
|
15
|
-
when doc.key?(KEY)
|
16
|
-
doc[KEY]
|
17
|
-
else
|
18
|
-
doc
|
19
|
-
end
|
20
|
-
when doc.is_a?(String)
|
21
|
-
to_value(JSON.parse(doc))
|
22
|
-
when doc.is_a?(Value)
|
23
|
-
value.value
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def key?(object)
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
attr_reader :value
|
33
|
-
|
34
|
-
def initialize(value)
|
35
|
-
@doc = {"#{KEY}" => value}
|
36
|
-
end
|
37
|
-
|
38
|
-
def value
|
39
|
-
@doc[KEY]
|
40
|
-
end
|
41
|
-
|
42
|
-
def as_input_option
|
43
|
-
"--#{INPUT_OPTION}=#{KEY_OPTION}:#{@doc.to_json}"
|
44
|
-
end
|
45
|
-
|
46
|
-
def as_option
|
47
|
-
{"#{INPUT_SYM}" => self}
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
data/lib/eco/scripting.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require_relative 'scripting/args_helpers'
|
2
|
-
require_relative 'scripting/argument'
|
3
|
-
require_relative 'scripting/arguments'
|
4
|
-
|
5
|
-
module Eco
|
6
|
-
#TODO integrate Thor to build the CLI from bottom to top on load
|
7
|
-
class Scripting
|
8
|
-
include Scripting::ArgsHelpers
|
9
|
-
|
10
|
-
def args_contain?(*values)
|
11
|
-
match?(ARGV, patterns, [:any, :or, :insensitive, :pattern])
|
12
|
-
end
|
13
|
-
|
14
|
-
def modifiers(*values)
|
15
|
-
values.select { |arg| is_modifier?(arg) }
|
16
|
-
end
|
17
|
-
|
18
|
-
def args_filter_match(*values)
|
19
|
-
modifier = Eco::Language::MatchModifier.new.any.or.insensitive
|
20
|
-
patterns = modifier.to_regex(values)
|
21
|
-
params = modifiers(*ARGV)
|
22
|
-
patterns.each_with_index.reduce([]) { |done, (pat, i) |
|
23
|
-
done.push(values[i]) if Handy.match?(params, pat, modifier)
|
24
|
-
done
|
25
|
-
}
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
SCR = Eco::Scripting.new
|
data/lib/eco/scripting/README.md
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
# API Helpers Command Line Interface
|
2
|
-
|
3
|
-
The idea is to use **[Thor](http://whatisthor.com/)**
|
4
|
-
|
5
|
-
`TODO`:
|
6
|
-
|
7
|
-
* check if the unique point access can be feed by the current loading architecture, and make it fit with *Thor*
|
8
|
-
* analyze if **subcommands** can do the trick there and how
|
9
|
-
* check of **modifiers / flags** support (is it all *via subcommands*)
|
10
|
-
* implement the architecture to easily expose specific logics of the helpers
|
11
|
-
* check if the cli pipe can be used to **thor** between commands
|
@@ -1,53 +0,0 @@
|
|
1
|
-
module Eco
|
2
|
-
class Scripting
|
3
|
-
module ArgsHelpers
|
4
|
-
|
5
|
-
def is_modifier?(value)
|
6
|
-
value&.start_with?("-")
|
7
|
-
end
|
8
|
-
|
9
|
-
def arguments
|
10
|
-
@arguments ||= Arguments.new
|
11
|
-
end
|
12
|
-
|
13
|
-
def stop_on_unknown!(exclude: [])
|
14
|
-
if arguments.any_unkown?(exclude: exclude)
|
15
|
-
raise "There are unknown options in your command line arguments: #{arguments.unknown(exclude: exclude)}"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def get_arg(key, with_param: false, valid: true)
|
20
|
-
# track what a known option looks like
|
21
|
-
arguments.add(key, with_param: with_param)
|
22
|
-
return nil if !ARGV.include?(key)
|
23
|
-
value = true
|
24
|
-
if with_param
|
25
|
-
next_i = ARGV.index(key) + 1
|
26
|
-
value = ARGV[next_i]
|
27
|
-
#puts "modifier argument: #{value}"
|
28
|
-
value = nil if valid && is_modifier?(value)
|
29
|
-
end
|
30
|
-
return value
|
31
|
-
end
|
32
|
-
|
33
|
-
def get_file(key, required: false, should_exist: true)
|
34
|
-
filename = get_arg(key, with_param: true)
|
35
|
-
if !filename
|
36
|
-
if required
|
37
|
-
puts "you need to specify a file '#{key} file'"
|
38
|
-
exit
|
39
|
-
end
|
40
|
-
elsif !(File.exists?(filename) || File.exists?(File.expand_path(filename)))
|
41
|
-
if should_exist && required
|
42
|
-
puts "file doesn't exist #{filename}"
|
43
|
-
exit
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
filename = File.expand_path(filename) if filename && should_exist
|
48
|
-
filename
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module Eco
|
2
|
-
class Scripting
|
3
|
-
class Argument
|
4
|
-
|
5
|
-
attr_reader :key
|
6
|
-
|
7
|
-
def initialize(key, with_param: false)
|
8
|
-
@key = key
|
9
|
-
@with_param = !!with_param
|
10
|
-
end
|
11
|
-
|
12
|
-
def args_slice(*args)
|
13
|
-
#pp "known arg '#{key}' => included? #{args.include?(key)}"
|
14
|
-
return args unless args.include?(key)
|
15
|
-
i = args.index(key)
|
16
|
-
j = with_param?? i+1 : i
|
17
|
-
args - args.slice(i..j)
|
18
|
-
end
|
19
|
-
|
20
|
-
def with_param!
|
21
|
-
@with_param = true
|
22
|
-
end
|
23
|
-
|
24
|
-
def with_param?
|
25
|
-
@with_param
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
module Eco
|
2
|
-
class Scripting
|
3
|
-
class Arguments
|
4
|
-
include Enumerable
|
5
|
-
|
6
|
-
attr_reader :args
|
7
|
-
|
8
|
-
def initialize(args = ARGV)
|
9
|
-
@args = args
|
10
|
-
@known = {}
|
11
|
-
end
|
12
|
-
|
13
|
-
def each(params: {}, &block)
|
14
|
-
return to_enum(:each) unless block
|
15
|
-
@known.values.each(&block)
|
16
|
-
end
|
17
|
-
|
18
|
-
def add(key, with_param: false)
|
19
|
-
self << Argument.new(key, with_param: with_param)
|
20
|
-
end
|
21
|
-
|
22
|
-
def <<(arg)
|
23
|
-
raise "Expected Argument. Given #{arg.class}" unless arg.is_a?(Argument)
|
24
|
-
if karg = @known[arg.key]
|
25
|
-
#puts "Found already existent option #{arg.key} (with_param: arg.with_param?)"
|
26
|
-
karg.with_param! if arg.with_param?
|
27
|
-
else
|
28
|
-
#puts "Adding unexistent option #{arg.key}"
|
29
|
-
@known[arg.key] = arg
|
30
|
-
end
|
31
|
-
self
|
32
|
-
end
|
33
|
-
|
34
|
-
def known?(value)
|
35
|
-
@known.key?(to_key(value))
|
36
|
-
end
|
37
|
-
|
38
|
-
def keys
|
39
|
-
@known.keys
|
40
|
-
end
|
41
|
-
|
42
|
-
def unknown(exclude: [])
|
43
|
-
reduce(args.dup - exclude) do |not_known, arg|
|
44
|
-
arg.args_slice(*not_known)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def any_unkown?(exclude: [])
|
49
|
-
unknown(exclude: exclude).length > 0
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
def to_key(value)
|
55
|
-
case value
|
56
|
-
when String
|
57
|
-
value
|
58
|
-
when Argument
|
59
|
-
value.key
|
60
|
-
else
|
61
|
-
"Missuse: only able to transform to key a String or an Argument. Given #{value.class}"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|