eco-helpers 1.1.8 → 1.2.1
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/eco/api/common.rb +1 -0
- data/lib/eco/api/common/class_helpers.rb +32 -0
- data/lib/eco/api/common/class_hierarchy.rb +48 -0
- data/lib/eco/api/organization/presets_reference.json +42 -0
- data/lib/eco/api/session/batch/base_policy.rb +5 -59
- data/lib/eco/api/session/config/workflow.rb +21 -34
- data/lib/eco/cli/config.rb +1 -1
- data/lib/eco/cli/config/default/options.rb +12 -1
- data/lib/eco/cli/config/default/workflow.rb +24 -2
- data/lib/eco/cli/config/options_set.rb +1 -1
- data/lib/eco/cli/config/use_cases.rb +60 -41
- data/lib/eco/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7f4931954cedd399ca4fc599e4e8b1e1d3f1b4502123f06063160aed254d70c
|
4
|
+
data.tar.gz: 1fc36250ebe32d93d03e59d06773a55995e831e55317b3e71ed7fc3193d3565a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1519bd960047cba719b9ff5556374b4653fde6f96c666a9369b874bf1eaaa24f8737e69ed05f70c770932432e8832c3a69c9042a63e3c9add6ffc35b2c97584
|
7
|
+
data.tar.gz: 52a15098f25c0ebe4ce696356110d33fd79244a1bf9f2edbcf67a29fe5998a87a95f444adbe5e8a8c403907b8b2e9e08ef12d9bf6aa80ecb7b8cac61984c8e8f
|
data/lib/eco/api/common.rb
CHANGED
@@ -27,6 +27,38 @@ module Eco
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
# Helper to normalize `key` into a correct `ruby` **constant name**
|
31
|
+
# @param key [String, Symbol] to be normalized
|
32
|
+
# @return [String] a correct constant name
|
33
|
+
def to_constant(key)
|
34
|
+
str_name = key.to_s.strip.split(/[\-\_ ]/i).compact.map do |str|
|
35
|
+
str.slice(0).upcase + str.slice(1..-1).downcase
|
36
|
+
end.join("")
|
37
|
+
end
|
38
|
+
|
39
|
+
# If the class for `name` exists, it returns it. Otherwise it generates it.
|
40
|
+
# @param name [String, Symbol] the name of the new class
|
41
|
+
# @param inherits [Class] the parent class to _inherit_ from
|
42
|
+
# @param parent_space [String] parent namespace of the generated class, if not given: `self`
|
43
|
+
# @yield [child_class] configure the new class
|
44
|
+
# @yieldparam child_class [Class] the new class
|
45
|
+
# @return [Class] the new generated class
|
46
|
+
def new_class(name, inherits:, parent_space: nil)
|
47
|
+
name = name.to_sym.freeze
|
48
|
+
class_name = to_constant(name)
|
49
|
+
parent_space = parent_space ? resolve_class(parent_space) : self
|
50
|
+
full_class_name = "#{parent_space}::#{class_name}"
|
51
|
+
|
52
|
+
unless target_class = resolve_class(full_class_name, exception: false)
|
53
|
+
target_class = Class.new(inherits)
|
54
|
+
parent_space.const_set class_name, target_class
|
55
|
+
end
|
56
|
+
|
57
|
+
target_class.tap do |klass|
|
58
|
+
yield(klass) if block_given?
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
30
62
|
end
|
31
63
|
end
|
32
64
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
module Common
|
4
|
+
# Helpers for dynammic generation of classes based on a hierarchical model
|
5
|
+
# @attr_reader model [Hash, nil] the `model` of the current `class`
|
6
|
+
module ClassHierarchy
|
7
|
+
include Eco::API::Common::ClassHelpers
|
8
|
+
|
9
|
+
attr_reader :model
|
10
|
+
|
11
|
+
# @param value [Hash, Enumerable, String, Symbol, nil] unparsed model to be assigned to the `class`
|
12
|
+
def model=(value)
|
13
|
+
@model = parse_model(value)
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Array<String>] the `keys` of the current class' `model`
|
17
|
+
def model_attrs
|
18
|
+
(model && model.keys) || []
|
19
|
+
end
|
20
|
+
|
21
|
+
# Thanks to this step the format on the declaration of the model is flexible
|
22
|
+
# @param value [Hash, Enumerable, String, Symbol, nil]
|
23
|
+
# @return [Hash, nil] where keys are `Symbol` s
|
24
|
+
def parse_model(model)
|
25
|
+
case model
|
26
|
+
when String
|
27
|
+
return parse_model(model.to_sym)
|
28
|
+
when Symbol
|
29
|
+
return {model => nil}
|
30
|
+
when Hash
|
31
|
+
return model.each_with_object({}) do |(k,v), hash|
|
32
|
+
hash[k.to_sym] = v
|
33
|
+
end
|
34
|
+
when Enumerable
|
35
|
+
return model.each_with_object({}) do |sub, hash|
|
36
|
+
hash.merge!(parse_model(sub))
|
37
|
+
end
|
38
|
+
when NilClass
|
39
|
+
return nil
|
40
|
+
else
|
41
|
+
raise "Incorrect model declaration, allowed String, Symbol, Hash and Enumerable. Given: #{model.class}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
{
|
2
|
+
"read_only" : {
|
3
|
+
"files": "browse",
|
4
|
+
"data": "view",
|
5
|
+
"reports": "view",
|
6
|
+
"organization": null,
|
7
|
+
"people": null,
|
8
|
+
"pages": "view",
|
9
|
+
"page_editor": null,
|
10
|
+
"registers": "view"
|
11
|
+
},
|
12
|
+
"forms" : {
|
13
|
+
"files": "browse",
|
14
|
+
"data": "view",
|
15
|
+
"reports": "view",
|
16
|
+
"organization": null,
|
17
|
+
"people": "attach",
|
18
|
+
"pages": "create",
|
19
|
+
"page_editor": "basic",
|
20
|
+
"registers": "view"
|
21
|
+
},
|
22
|
+
"editor" : {
|
23
|
+
"files": "browse",
|
24
|
+
"data": "update",
|
25
|
+
"reports": "edit",
|
26
|
+
"organization": "view",
|
27
|
+
"people": "view",
|
28
|
+
"pages": "create",
|
29
|
+
"page_editor": "intermediate",
|
30
|
+
"registers": "view"
|
31
|
+
},
|
32
|
+
"administrator" : {
|
33
|
+
"files": "administrate",
|
34
|
+
"data": "administrate",
|
35
|
+
"reports": "administrate",
|
36
|
+
"organization": "administrate",
|
37
|
+
"people": "edit",
|
38
|
+
"pages": "administrate",
|
39
|
+
"page_editor": "advanced",
|
40
|
+
"registers": "dashboard"
|
41
|
+
}
|
42
|
+
}
|
@@ -19,73 +19,20 @@ module Eco
|
|
19
19
|
# @attr_reader max [Integer] `max` **allowed** number of occurrences of the property
|
20
20
|
# @attr_reader min [Integer] `min` **required** number of occurrences of the property
|
21
21
|
class BasePolicy
|
22
|
-
extend Eco::API::Common::
|
22
|
+
extend Eco::API::Common::ClassHierarchy
|
23
23
|
|
24
|
-
# @attr_reader model [Hash, nil] the `model` of the current `class`
|
25
24
|
class << self
|
26
|
-
attr_reader :model
|
27
|
-
|
28
|
-
# @param value [Hash, Enumerable, String, Symbol, nil] unparsed model to be assigned to the `class`
|
29
|
-
def model=(value)
|
30
|
-
@model = parse_model(value)
|
31
|
-
end
|
32
|
-
|
33
|
-
# @return [Array<String>] the `keys` of the current class' `model`
|
34
|
-
def model_attrs
|
35
|
-
(model && model.keys) || []
|
36
|
-
end
|
37
|
-
|
38
|
-
# Helper to normalize `key` into a correct `ruby` **constant name**
|
39
|
-
# @param key [String, Symbol] to be normalized
|
40
|
-
# @return [String] a correct constant name
|
41
|
-
def titleize(key)
|
42
|
-
str_name = key.to_s.strip.split(/[\-\_ ]/i).compact.map do |str|
|
43
|
-
str.slice(0).upcase + str.slice(1..-1).downcase
|
44
|
-
end.join("")
|
45
|
-
end
|
46
25
|
|
47
26
|
# If the class for `key` exists, it returns it. Otherwise it generates it.
|
48
27
|
# @note for this to work, `key` should be one of the submodels of the current class' `model`
|
49
28
|
# @return [Eco::API::Session::Batch::BasePolicy] or subclass thereof
|
50
29
|
def policy_class(key)
|
51
30
|
key = key.to_sym.freeze
|
52
|
-
class_name =
|
53
|
-
full_class_name = "#{self}::#{class_name}"
|
54
|
-
|
55
|
-
unless target_class = resolve_class(full_class_name, exception: false)
|
56
|
-
submodel = model[key]
|
57
|
-
target_class = Class.new(self) do |klass|
|
58
|
-
klass.model = submodel
|
59
|
-
policy_attrs *klass.model_attrs
|
60
|
-
end
|
31
|
+
class_name = to_constant(key)
|
61
32
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
target_class
|
66
|
-
end
|
67
|
-
|
68
|
-
# Thanks to this step the format on the declaration of the model is flexible
|
69
|
-
# @param value [Hash, Enumerable, String, Symbol, nil]
|
70
|
-
# @return [Hash, nil] where keys are `Symbol` s
|
71
|
-
def parse_model(model)
|
72
|
-
case model
|
73
|
-
when String
|
74
|
-
return parse_model(model.to_sym)
|
75
|
-
when Symbol
|
76
|
-
return {model => nil}
|
77
|
-
when Hash
|
78
|
-
return model.each_with_object({}) do |(k,v), hash|
|
79
|
-
hash[k.to_sym] = v
|
80
|
-
end
|
81
|
-
when Enumerable
|
82
|
-
return model.each_with_object({}) do |sub, hash|
|
83
|
-
hash.merge!(parse_model(sub))
|
84
|
-
end
|
85
|
-
when NilClass
|
86
|
-
return nil
|
87
|
-
else
|
88
|
-
raise "Incorrect model declaration, allowed String, Symbol, Hash and Enumerable. Given: #{model.class}"
|
33
|
+
new_class(class_name, inherits: Eco::API::Session::Batch::BasePolicy) do |klass|
|
34
|
+
klass.model = model[key]
|
35
|
+
klass.policy_attrs *klass.model_attrs
|
89
36
|
end
|
90
37
|
end
|
91
38
|
|
@@ -99,7 +46,6 @@ module Eco
|
|
99
46
|
var = "@#{method}".freeze
|
100
47
|
|
101
48
|
define_method(method) do |&block|
|
102
|
-
|
103
49
|
unless policy = self[attr]
|
104
50
|
klass = self.class.policy_class(attr)
|
105
51
|
policy = self[attr] = klass.new(attr, _parent: self)
|
@@ -3,54 +3,40 @@ module Eco
|
|
3
3
|
class Session
|
4
4
|
class Config
|
5
5
|
class Workflow
|
6
|
-
extend Eco::API::Common::
|
7
|
-
|
8
|
-
|
9
|
-
options
|
10
|
-
load:
|
11
|
-
usecases:
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
close: nil
|
16
|
-
}
|
6
|
+
extend Eco::API::Common::ClassHierarchy
|
7
|
+
|
8
|
+
WORKFLOW_MODEL = [
|
9
|
+
:options,
|
10
|
+
{load: [:input, {people: [:get, :filter]}, :filter]},
|
11
|
+
:usecases, :launch_jobs,
|
12
|
+
{post_launch: [:usecases, :launch_jobs]},
|
13
|
+
:end, :close
|
14
|
+
]
|
17
15
|
|
18
16
|
class << self
|
19
17
|
def stages
|
20
|
-
|
18
|
+
model_attrs
|
21
19
|
end
|
22
20
|
|
23
|
-
def
|
24
|
-
|
21
|
+
def model
|
22
|
+
super || {}
|
25
23
|
end
|
26
24
|
|
27
|
-
def
|
28
|
-
|
29
|
-
str.slice(0).upcase + str.slice(1..-1).downcase
|
30
|
-
end.join("")
|
25
|
+
def validate_stage(stage)
|
26
|
+
"Unknown Workflow stage '#{stage}'. Should be any of #{stages}" unless stages.include?(stage)
|
31
27
|
end
|
32
28
|
|
33
|
-
def
|
34
|
-
|
35
|
-
workflow = @workflow[key]
|
36
|
-
raise "Expected Hash. Given #{model.class}" unless !workflow || workflow.is_a?(Hash)
|
37
|
-
|
38
|
-
class_name = titleize(key.to_s)
|
39
|
-
full_class_name = "#{self}::#{class_name}"
|
29
|
+
def workflow_class(key)
|
30
|
+
class_name = to_constant(key.to_s)
|
40
31
|
|
41
|
-
|
42
|
-
|
43
|
-
target_class = Class.new(Eco::API::Session::Config::Workflow) do
|
44
|
-
@workflow = workflow
|
45
|
-
end
|
46
|
-
self.const_set class_name, target_class
|
32
|
+
new_class(class_name, inherits: Eco::API::Session::Config::Workflow) do |klass|
|
33
|
+
klass.model = model[key]
|
47
34
|
end
|
48
|
-
|
49
|
-
target_class
|
50
35
|
end
|
51
36
|
|
52
37
|
end
|
53
38
|
|
39
|
+
self.model = WORKFLOW_MODEL
|
54
40
|
attr_reader :config
|
55
41
|
attr_reader :name
|
56
42
|
|
@@ -201,6 +187,7 @@ module Eco
|
|
201
187
|
# @param key [Symbol, nil] cases:
|
202
188
|
# - if `key` is not provided, it targets the _current stage_
|
203
189
|
# - if `key` is provided, it targets the specific _sub-stage_
|
190
|
+
# @param io [Eco::API::UseCases::BaseIO] the input/output object
|
204
191
|
# @yield [stage_workflow, io] if a `block` is provided, see `note`
|
205
192
|
# @yieldparam stage_workflow [Eco::API::Session::Config::Workflow] the _target stage_ referred by `key`
|
206
193
|
# @yieldparam io [Eco::API::UseCases::BaseIO] the input/output object carried througout all the _workflow_
|
@@ -273,7 +260,7 @@ module Eco
|
|
273
260
|
|
274
261
|
def stage(key)
|
275
262
|
self.class.validate_stage(key)
|
276
|
-
@stages[key] ||= self.class.
|
263
|
+
@stages[key] ||= self.class.workflow_class(key).new(key, _parent: self, config: config)
|
277
264
|
end
|
278
265
|
|
279
266
|
end
|
data/lib/eco/cli/config.rb
CHANGED
@@ -1,9 +1,20 @@
|
|
1
1
|
ASSETS.cli.config do |cnf|
|
2
2
|
cnf.options_set do |options_set, options|
|
3
3
|
|
4
|
-
options_set.add(
|
4
|
+
options_set.add("-entries-from") do |options, session|
|
5
|
+
options.deep_merge!(input: {entries_from: true})
|
6
|
+
end
|
7
|
+
|
8
|
+
options_set.add("-get-people") do |options, session|
|
9
|
+
options.deep_merge!(people: {
|
10
|
+
get: {from: :remote, type: :full}
|
11
|
+
})
|
12
|
+
end
|
13
|
+
|
14
|
+
options_set.add(["-dry-run", "-simulate"]) do |options, session|
|
5
15
|
options[:dry_run] = true
|
6
16
|
options[:simulate] = true
|
17
|
+
session.config.dry_run!
|
7
18
|
end
|
8
19
|
|
9
20
|
options_set.add("-skip-batch-policy") do |options|
|
@@ -4,7 +4,7 @@ ASSETS.cli.config do |config|
|
|
4
4
|
io = nil
|
5
5
|
# default rescue
|
6
6
|
wf.rescue do |exception, io|
|
7
|
-
|
7
|
+
io.session.logger.error(exception.patch_full_message)
|
8
8
|
wf.run(:close, io: io)
|
9
9
|
io
|
10
10
|
end
|
@@ -14,15 +14,37 @@ ASSETS.cli.config do |config|
|
|
14
14
|
end
|
15
15
|
|
16
16
|
wf.for(:load) do |wf_load|
|
17
|
+
active_cases = nil
|
18
|
+
|
17
19
|
wf_load.on(:input) do |wf_input, io|
|
18
|
-
|
20
|
+
active_cases = config.usecases.active(io: io)
|
21
|
+
|
22
|
+
cases_with_input = active_cases.select do |usecase, data|
|
23
|
+
io.class.input_required?(usecase.type)
|
24
|
+
end
|
25
|
+
|
26
|
+
next io unless (!io.input || io.input.empty?) && !cases_with_input.empty?
|
27
|
+
|
28
|
+
if io.options.dig(:input, :entries_from)
|
29
|
+
io = io.new(input: config.input.get(io: io))
|
30
|
+
else
|
31
|
+
opt_case = cases_with_input.values.first[:option]
|
32
|
+
io = io.new(input: config.input.get(io: io, option: opt_case))
|
33
|
+
end
|
34
|
+
io
|
19
35
|
end
|
20
36
|
|
21
37
|
wf_load.on(:people) do |wf_people, io|
|
38
|
+
cases_with_people = active_cases.select do |usecase, data|
|
39
|
+
io.class.people_required?(usecase.type)
|
40
|
+
end
|
41
|
+
get_people = io.options.dig(:people, :get, :from) == :remote
|
42
|
+
next io unless !cases_with_people.empty? || get_people
|
22
43
|
io = io.new(people: config.people(io: io))
|
23
44
|
end
|
24
45
|
|
25
46
|
wf_load.on(:filter) do |wf_filter, io|
|
47
|
+
next io unless io.people && !io.people.empty?
|
26
48
|
io = io.new(people: config.people_filters.process(io: io))
|
27
49
|
end
|
28
50
|
end
|
@@ -7,9 +7,13 @@ module Eco
|
|
7
7
|
|
8
8
|
def initialize(core_config:)
|
9
9
|
@core_config = core_config
|
10
|
-
@
|
10
|
+
@linked_opt_cases = {}
|
11
11
|
end
|
12
12
|
|
13
|
+
# Integrates a usecase to the command line
|
14
|
+
# @param option_case [String] the command line option to invoke the usecase
|
15
|
+
# @param type [Symbol] the type of usecase
|
16
|
+
# @param case_name [String, nil] the name of the usecase as defined
|
13
17
|
def add(option_case, type, case_name: nil)
|
14
18
|
Eco::API::UseCases::UseCase.validate_type(type)
|
15
19
|
unless callback = block_given?? Proc.new : nil
|
@@ -17,68 +21,83 @@ module Eco
|
|
17
21
|
raise "'case_name' expected to be a String. Given: #{case_name.class}" unless case_name.is_a?(String)
|
18
22
|
end
|
19
23
|
|
20
|
-
@
|
24
|
+
@linked_opt_cases[option_case] = {
|
21
25
|
type => {
|
22
26
|
casename: case_name,
|
23
27
|
callback: callback
|
24
28
|
}
|
25
29
|
}
|
30
|
+
|
26
31
|
self
|
27
32
|
end
|
28
33
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
34
|
+
# Scopes/identifies which usecases are being invoked from the command line
|
35
|
+
# @param io [Eco::API::UseCases::BaseIO] the input/output object
|
36
|
+
# @return [Hash] where keys are cases and values a `Hash` with `option` String and `callback`
|
37
|
+
def active(io:)
|
38
|
+
return @active_cases unless !@active_cases
|
39
|
+
@active_cases = {}.tap do |opt_cases|
|
40
|
+
@linked_opt_cases.each do |option_case, types|
|
41
|
+
types.each do |type, data|
|
42
|
+
if SCR.get_arg(option_case)
|
43
|
+
usecase = nil
|
44
|
+
if case_name = data[:casename]
|
45
|
+
usecase = io.session.usecases.case(case_name, type: type)
|
46
|
+
end
|
33
47
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
48
|
+
if callback = data[:callback]
|
49
|
+
unless usecase
|
50
|
+
# identify usecase
|
51
|
+
usecase = callback.call(*io.params)
|
52
|
+
unless usecase.is_a?(Eco::API::UseCases::UseCase)
|
53
|
+
msg = "When adding a usecase, without specifying 'case_name:', "
|
54
|
+
msg += "the block that integrates usecase for cli option '#{option_case}'"
|
55
|
+
msg += " must return an Eco::API::UseCases::UseCase object. It returns #{usecase.class}"
|
56
|
+
raise msg
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
45
60
|
|
46
|
-
if callback = data[:callback]
|
47
61
|
if usecase
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
msg = "When adding a usecase, without specifying 'case_name:', "
|
53
|
-
msg += "the block that integrates usecase for cli option '#{option}'"
|
54
|
-
msg += " must return an Eco::API::UseCases::UseCase object. It returns #{usecase.class}"
|
55
|
-
raise msg
|
56
|
-
end
|
62
|
+
opt_cases[usecase] = {
|
63
|
+
option: option_case,
|
64
|
+
callback: data[:callback]
|
65
|
+
}
|
57
66
|
end
|
58
|
-
end
|
59
67
|
|
60
|
-
|
68
|
+
end
|
61
69
|
end
|
62
70
|
end
|
71
|
+
|
63
72
|
end
|
64
|
-
processed
|
65
73
|
end
|
66
74
|
|
67
|
-
|
75
|
+
def process(io:)
|
76
|
+
unless io && io.is_a?(Eco::API::UseCases::BaseIO)
|
77
|
+
raise "You need to provide Eco::API::UseCases::BaseIO object. Given: #{io.class}"
|
78
|
+
end
|
68
79
|
|
69
|
-
|
70
|
-
|
80
|
+
processed = false
|
81
|
+
active(io: io).each do |usecase, data|
|
82
|
+
raise "Something went wrong when scoping active cases" unless data
|
71
83
|
|
72
|
-
|
73
|
-
params.merge!(people: core_config.people(io: io))
|
74
|
-
end
|
84
|
+
processed = true
|
75
85
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
86
|
+
params = io.params(keyed: true).merge(type: usecase.type)
|
87
|
+
|
88
|
+
#if (!io.people || io.people.empty?) && io.class.people_required?(type)
|
89
|
+
# params.merge!(people: core_config.people(io: io))
|
90
|
+
#end
|
80
91
|
|
81
|
-
|
92
|
+
io.new(**params)
|
93
|
+
|
94
|
+
if callback = data[:callback]
|
95
|
+
callback.call(*io.params)
|
96
|
+
end
|
97
|
+
|
98
|
+
usecase.launch(io: io)
|
99
|
+
end
|
100
|
+
processed
|
82
101
|
end
|
83
102
|
|
84
103
|
end
|
data/lib/eco/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eco-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oscar Segura
|
@@ -216,6 +216,7 @@ files:
|
|
216
216
|
- lib/eco/api.rb
|
217
217
|
- lib/eco/api/common.rb
|
218
218
|
- lib/eco/api/common/class_helpers.rb
|
219
|
+
- lib/eco/api/common/class_hierarchy.rb
|
219
220
|
- lib/eco/api/common/people.rb
|
220
221
|
- lib/eco/api/common/people/base_parser.rb
|
221
222
|
- lib/eco/api/common/people/default_parsers.rb
|
@@ -262,6 +263,7 @@ files:
|
|
262
263
|
- lib/eco/api/organization/preferences.rb
|
263
264
|
- lib/eco/api/organization/preferences_reference.json
|
264
265
|
- lib/eco/api/organization/presets_factory.rb
|
266
|
+
- lib/eco/api/organization/presets_reference.json
|
265
267
|
- lib/eco/api/organization/presets_values.json
|
266
268
|
- lib/eco/api/organization/tag_tree.rb
|
267
269
|
- lib/eco/api/policies.rb
|
@@ -381,7 +383,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
381
383
|
- !ruby/object:Gem::Version
|
382
384
|
version: '0'
|
383
385
|
requirements: []
|
384
|
-
rubygems_version: 3.0.
|
386
|
+
rubygems_version: 3.0.3
|
385
387
|
signing_key:
|
386
388
|
specification_version: 4
|
387
389
|
summary: eco-helpers to manage people api cases
|