eco-helpers 2.7.8 → 2.7.10
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/CHANGELOG.md +20 -1
- data/eco-helpers.gemspec +2 -0
- data/lib/eco/api/organization/tag_tree.rb +6 -4
- data/lib/eco/api/session/config/tagtree.rb +15 -11
- data/lib/eco/api/session/config.rb +11 -4
- data/lib/eco/api/session.rb +10 -3
- data/lib/eco/api/usecases/graphql/helpers/location/command/diff/as_update.rb +3 -1
- data/lib/eco/api/usecases/graphql/samples/location/command/track_changed_ids.rb +5 -5
- data/lib/eco/data/locations/node_diff/accessors.rb +2 -2
- data/lib/eco/data/locations/node_diff/nodes_diff/selectors.rb +3 -2
- data/lib/eco/data/locations/node_diff/nodes_diff.rb +30 -0
- data/lib/eco/data/locations/node_diff.rb +9 -0
- data/lib/eco/version.rb +1 -1
- metadata +29 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e9c00a0ecc4c1fb42d808e2df03a8618c7017be7a27e6319859bd7974b3638a
|
4
|
+
data.tar.gz: f9e2452935fcfc3712e53b5e5731151f1ddf6a4f946f2e1c6f8c629f48e09e9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e4595657f37f057269bbd38671858700bdcc22e2755e3b365bbe69e48e017e11974a8583b5e93c09c1abf90cd4f09c0ed8ac4a853be8d471c51719fa1500e71
|
7
|
+
data.tar.gz: 0e3af7794e45e62fdbb2ba06340cc7b23ea88466670eb8b597c4e279556bb5cc59dfa5f8ff0f294f77d15dfd159819590cd2228d05fa19af8a2421d4b665fa72
|
data/CHANGELOG.md
CHANGED
@@ -1,12 +1,31 @@
|
|
1
1
|
# Change Log
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
-
## [2.7.
|
4
|
+
## [2.7.12] - 2024-05-xx
|
5
5
|
|
6
6
|
### Added
|
7
7
|
### Changed
|
8
8
|
### Fixed
|
9
9
|
|
10
|
+
## [2.7.11] - 2024-05-20
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
- Upgrade SFTP access
|
14
|
+
|
15
|
+
## [2.7.10] - 2024-05-16
|
16
|
+
|
17
|
+
### Changed
|
18
|
+
- Temporarily silent warnings on tracking id changes (apparently the tracking locations tree is not up to date with latest version and gives false warnings)
|
19
|
+
|
20
|
+
### Fixed
|
21
|
+
- Remove enviro from tagtree download
|
22
|
+
|
23
|
+
## [2.7.9] - 2024-05-16
|
24
|
+
|
25
|
+
### Fixed
|
26
|
+
- `Eco::Data::Locations::NodeDiff::NodesDiff#unarchive`
|
27
|
+
- It must include archived nodes that will receive new children
|
28
|
+
|
10
29
|
## [2.7.8] - 2024-05-16
|
11
30
|
|
12
31
|
### Added
|
data/eco-helpers.gemspec
CHANGED
@@ -33,6 +33,8 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.add_dependency 'ecoportal-api', '>= 0.9.8', '< 0.10'
|
34
34
|
spec.add_dependency 'ecoportal-api-v2', '>= 1.1.8', '< 1.2'
|
35
35
|
spec.add_dependency 'ecoportal-api-graphql', '>= 0.3.18', '< 0.4'
|
36
|
+
spec.add_dependency 'ed25519', '>= 1.2'
|
37
|
+
spec.add_dependency 'bcrypt_pbkdf', '>= 1.0'
|
36
38
|
spec.add_dependency 'aws-sdk-s3', '>= 1.142.0', '< 2'
|
37
39
|
spec.add_dependency 'aws-sdk-ses', '>= 1.58.0', '< 2'
|
38
40
|
spec.add_dependency 'dotenv', '>= 2.8.1', '< 3'
|
@@ -40,11 +40,13 @@ module Eco
|
|
40
40
|
# @param tagtree [String] representation of the tagtree in json.
|
41
41
|
def initialize(
|
42
42
|
tagtree = [],
|
43
|
-
name:
|
44
|
-
|
45
|
-
|
43
|
+
name: nil,
|
44
|
+
id: nil,
|
45
|
+
depth: -1,
|
46
|
+
path: [],
|
47
|
+
parent: nil,
|
48
|
+
_weight: nil # rubocop:disable Lint/UnderscorePrefixedVariableName
|
46
49
|
)
|
47
|
-
|
48
50
|
@source = parse_source_input(tagtree)
|
49
51
|
|
50
52
|
msg = "You are trying to initialize a TagTree with a null tagtree"
|
@@ -21,12 +21,16 @@ module Eco
|
|
21
21
|
# 1. If there's a file tagtree.json file, it uses it
|
22
22
|
# 2. If no file, retrieves `structure_id` (config)
|
23
23
|
# @param include_archived [Boolean] whether or not it should include archived nodes.
|
24
|
+
# @param [recache] used for re-caching
|
24
25
|
# @return [Eco::API::Organization::TagTree]
|
25
|
-
def scope_tree(
|
26
|
-
|
26
|
+
def scope_tree(
|
27
|
+
include_archived: true,
|
28
|
+
recache: false,
|
29
|
+
raise_on_missing: true # rubocop:disable Lint/UnusedMethodArgument
|
30
|
+
)
|
31
|
+
return @tagtree if instance_variable_defined?(:@tagtree) && !recache
|
27
32
|
|
28
33
|
kargs = {
|
29
|
-
enviro: enviro,
|
30
34
|
includeArchivedNodes: include_archived
|
31
35
|
}
|
32
36
|
|
@@ -48,16 +52,16 @@ module Eco
|
|
48
52
|
|
49
53
|
# Among all the locations structures it selects the one with more location nodes
|
50
54
|
# If `id` is provided, it only retrieves this locations structure.
|
51
|
-
# @param [
|
52
|
-
def live_tree(
|
55
|
+
# @param [recache] used for re-caching
|
56
|
+
def live_tree( # rubocop:disable Metrics/AbcSize
|
57
|
+
id: nil,
|
58
|
+
include_archived: false,
|
59
|
+
**kargs,
|
60
|
+
&block
|
61
|
+
)
|
53
62
|
existing_cache = !@live_tree.nil?
|
54
63
|
first_load = !existing_cache
|
55
|
-
|
56
|
-
target_change = existing_cache && id && @live_tree.id != id
|
57
|
-
enviro_change = existing_cache && enviro && @live_tree.enviro != enviro
|
58
|
-
|
59
|
-
switching_target = existing_cache && (target_change || enviro_change)
|
60
|
-
_refresh_cache = existing_cache && !switching_target
|
64
|
+
switching_target = existing_cache && id && @live_tree.id != id
|
61
65
|
|
62
66
|
kargs = {
|
63
67
|
includeArchivedNodes: include_archived
|
@@ -248,10 +248,17 @@ module Eco
|
|
248
248
|
# @note it does NOT include archived nodes by default.
|
249
249
|
# - This is for legacy (most usecases don't)
|
250
250
|
# @param include_archived [Boolean] whether or not it should include archived nodes.
|
251
|
+
# @param [recache] used for re-caching
|
251
252
|
# @return [Eco::API::Organization::TagTree]
|
252
|
-
def tagtree(
|
253
|
+
def tagtree(
|
254
|
+
include_archived: false,
|
255
|
+
recache: false,
|
256
|
+
raise_on_missing: true
|
257
|
+
)
|
253
258
|
kargs = {
|
254
|
-
|
259
|
+
recache: recache,
|
260
|
+
include_archived: include_archived,
|
261
|
+
raise_on_missing: raise_on_missing
|
255
262
|
}
|
256
263
|
@tagtree ||= tagtree_config.scope_tree(**kargs)
|
257
264
|
end
|
@@ -259,8 +266,8 @@ module Eco
|
|
259
266
|
# It obtains the first of the live tagtree in the org
|
260
267
|
# @note it requires graphql connection configuration parameters
|
261
268
|
# @return [Eco::API::Organization::TagTree]
|
262
|
-
def live_tree(id: nil,
|
263
|
-
tagtree_config.live_tree(id: id,
|
269
|
+
def live_tree(id: nil, **kargs, &block)
|
270
|
+
tagtree_config.live_tree(id: id, **kargs, &block)
|
264
271
|
end
|
265
272
|
|
266
273
|
# Retrieves all the location structures of the organisation
|
data/lib/eco/api/session.rb
CHANGED
@@ -58,19 +58,26 @@ module Eco
|
|
58
58
|
# @see Eco::API::Session::Config#tagtree
|
59
59
|
# @see Eco::API::Session#live_trees
|
60
60
|
# @return [Eco::API::Organization::TagTree]
|
61
|
-
def tagtree(
|
61
|
+
def tagtree(
|
62
|
+
live: false,
|
63
|
+
merge: false,
|
64
|
+
include_archived: false,
|
65
|
+
recache: false,
|
66
|
+
**kargs,
|
67
|
+
&block
|
68
|
+
)
|
62
69
|
if live && api?(version: :graphql)
|
63
70
|
return live_tree(include_archived: include_archived, **kargs, &block) unless merge
|
64
71
|
live_trees(include_archived: include_archived, **kargs, &block).inject(&:merge)
|
65
72
|
else
|
66
|
-
config.tagtree(
|
73
|
+
config.tagtree(recache: recache)
|
67
74
|
end
|
68
75
|
end
|
69
76
|
|
70
77
|
# @see Eco::API::Session::Config#live_tree
|
71
78
|
# @return [Eco::API::Organization::TagTree]
|
72
79
|
def live_tree(id: nil, include_archived: false, **kargs, &block)
|
73
|
-
config.live_tree(id: id, include_archived: include_archived,
|
80
|
+
config.live_tree(id: id, include_archived: include_archived, **kargs, &block)
|
74
81
|
end
|
75
82
|
|
76
83
|
# @see Eco::API::Session::Config#live_tree
|
@@ -35,8 +35,10 @@ class Eco::API::UseCases::GraphQL::Helpers::Location::Command::Diff
|
|
35
35
|
h['parentId'] = after_id_update ? parent_id : parent_id_prev
|
36
36
|
end
|
37
37
|
else
|
38
|
+
return h if marked_for_unarchive?
|
39
|
+
|
38
40
|
# Something is wrong (not expected to be any other category)
|
39
|
-
raise "
|
41
|
+
raise "Please review code base, unexpected condition for #{h.pretty_inspect}"
|
40
42
|
end
|
41
43
|
end
|
42
44
|
end
|
@@ -57,12 +57,12 @@ class Eco::API::UseCases::GraphQL::Samples::Location
|
|
57
57
|
|
58
58
|
tags_remap_table << [[prev_id], [new_id]]
|
59
59
|
|
60
|
-
next unless ref_tree.is_a?(Eco::API::Organization::TagTree)
|
61
|
-
next unless ref_tree.tag?(new_id)
|
60
|
+
# next unless ref_tree.is_a?(Eco::API::Organization::TagTree)
|
61
|
+
# next unless ref_tree.tag?(new_id)
|
62
62
|
|
63
|
-
msg = "Node '#{prev_id}' was updated to '#{new_id}', "
|
64
|
-
msg << "but in current structure '#{new_id}' is not present"
|
65
|
-
log(:warn) { msg }
|
63
|
+
# msg = "Node '#{prev_id}' was updated to '#{new_id}', "
|
64
|
+
# msg << "but in current structure '#{new_id}' is not present"
|
65
|
+
# log(:warn) { msg }
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -20,8 +20,8 @@ class Eco::Data::Locations::NodeDiff
|
|
20
20
|
def attr_expose(*attrs)
|
21
21
|
attrs.each do |attr|
|
22
22
|
meth = attr.to_sym
|
23
|
-
methp = "#{meth}_prev"
|
24
|
-
methq = "#{meth}?"
|
23
|
+
methp = :"#{meth}_prev"
|
24
|
+
methq = :"#{meth}?"
|
25
25
|
|
26
26
|
# current value
|
27
27
|
define_method meth do
|
@@ -5,8 +5,9 @@ class Eco::Data::Locations::NodeDiff::NodesDiff
|
|
5
5
|
# @note the selector method name with a question mark should exist in the `diff_result_class`
|
6
6
|
def selector(*attrs)
|
7
7
|
attrs.each do |attr|
|
8
|
-
meth
|
9
|
-
methq = "#{meth}?"
|
8
|
+
meth = attr.to_sym
|
9
|
+
methq = :"#{meth}?"
|
10
|
+
|
10
11
|
define_method meth do
|
11
12
|
diffs.select(&methq)
|
12
13
|
end
|
@@ -21,6 +21,7 @@ class Eco::Data::Locations::NodeDiff
|
|
21
21
|
def initialize(*args, original_tree:, **kargs, &block)
|
22
22
|
super(*args, **kargs, &block)
|
23
23
|
@original_tree = original_tree
|
24
|
+
mark_implicit_unarchive!
|
24
25
|
end
|
25
26
|
|
26
27
|
def diffs
|
@@ -95,6 +96,14 @@ class Eco::Data::Locations::NodeDiff
|
|
95
96
|
msg.compact.join("\n")
|
96
97
|
end
|
97
98
|
|
99
|
+
alias_method :unarchive_src, :unarchive
|
100
|
+
|
101
|
+
# @note we must unarchive destination parents that will get
|
102
|
+
# some children as well
|
103
|
+
def unarchive
|
104
|
+
unarchive_src | @implicit_unarchive
|
105
|
+
end
|
106
|
+
|
98
107
|
private
|
99
108
|
|
100
109
|
def when_present(list, default = nil)
|
@@ -103,5 +112,26 @@ class Eco::Data::Locations::NodeDiff
|
|
103
112
|
return yield(count) if count&.positive?
|
104
113
|
default
|
105
114
|
end
|
115
|
+
|
116
|
+
def mark_implicit_unarchive!
|
117
|
+
@implicit_unarchive = source_results.select do |result|
|
118
|
+
result.archived_prev && implicit_unarchive?(result)
|
119
|
+
end.tap do |results|
|
120
|
+
results.each(&:unarchive!)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def implicit_unarchive?(result)
|
125
|
+
[result.node_id, result.node_id_prev].compact.any? do |id|
|
126
|
+
target_parent_ids.include?(id)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def target_parent_ids
|
131
|
+
return @target_parent_ids if instance_variable_defined?(:@target_parent_ids)
|
132
|
+
|
133
|
+
@target_parent_ids = insert.map(&:parent_id).uniq
|
134
|
+
@target_parent_ids |= move.map(&:parent_id)
|
135
|
+
end
|
106
136
|
end
|
107
137
|
end
|
@@ -59,8 +59,17 @@ module Eco::Data::Locations
|
|
59
59
|
parent_id?
|
60
60
|
end
|
61
61
|
|
62
|
+
def unarchive!
|
63
|
+
@marked_for_unarchived = true
|
64
|
+
end
|
65
|
+
|
66
|
+
def marked_for_unarchive?
|
67
|
+
@marked_for_unarchived || false
|
68
|
+
end
|
69
|
+
|
62
70
|
# Has the `archived` property changed and it was `true`?
|
63
71
|
def unarchive?
|
72
|
+
return true if marked_for_unarchive?
|
64
73
|
return false if archived
|
65
74
|
return false unless update?
|
66
75
|
archived?
|
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: 2.7.
|
4
|
+
version: 2.7.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oscar Segura
|
@@ -170,6 +170,34 @@ dependencies:
|
|
170
170
|
- - "<"
|
171
171
|
- !ruby/object:Gem::Version
|
172
172
|
version: '0.4'
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: ed25519
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '1.2'
|
180
|
+
type: :runtime
|
181
|
+
prerelease: false
|
182
|
+
version_requirements: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '1.2'
|
187
|
+
- !ruby/object:Gem::Dependency
|
188
|
+
name: bcrypt_pbkdf
|
189
|
+
requirement: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - ">="
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '1.0'
|
194
|
+
type: :runtime
|
195
|
+
prerelease: false
|
196
|
+
version_requirements: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - ">="
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '1.0'
|
173
201
|
- !ruby/object:Gem::Dependency
|
174
202
|
name: aws-sdk-s3
|
175
203
|
requirement: !ruby/object:Gem::Requirement
|