eco-helpers 0.8.3 → 0.8.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|