eco-helpers 1.3.3 → 1.3.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/lib/eco/api/session/config/apis.rb +0 -1
- data/lib/eco/api/usecases/default_cases.rb +2 -0
- data/lib/eco/api/usecases/default_cases/transfer_account_case.rb +90 -0
- data/lib/eco/cli/config/default/usecases.rb +1 -0
- data/lib/eco/data/mapper.rb +23 -1
- data/lib/eco/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1fe8fa73efd298f498da1a2dd233cb40b3c4f3810a24762d6d60ca3d29f04786
|
4
|
+
data.tar.gz: e377424f7424d88548674f29c742250d75adadcd9c9b49d96d8f9593a6d90fd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c76d0d688292fcff201bea5e447c53a97939153c1a9a65c7d840ab9dede00e9b55cc08e9feb02f8e16744f6c051737624769d34ae59d1f476c50c5ed8e57782b
|
7
|
+
data.tar.gz: 6db7c8ccfacd19e2edf056b63cb6280aed96a70c26bdef4943e89e108927e2d1f8b8ffdecea7f93e493fccf8c04096e0549ef93554be313063b07e81dc11fcf0
|
@@ -26,6 +26,7 @@ module Eco
|
|
26
26
|
ReinviteCase.new(self).process
|
27
27
|
DeleteCase.new(self).process
|
28
28
|
RemoveAccountCase.new(self).process
|
29
|
+
TransferAccountCase.new(self).process
|
29
30
|
RecoverDBCase.new(self).process
|
30
31
|
RefreshPresets.new(self).process
|
31
32
|
Refresh.new(self).process
|
@@ -56,6 +57,7 @@ require_relative 'default_cases/create_details_with_supervisor_case'
|
|
56
57
|
require_relative 'default_cases/reinvite_case'
|
57
58
|
require_relative 'default_cases/delete_case'
|
58
59
|
require_relative 'default_cases/remove_account_case'
|
60
|
+
require_relative 'default_cases/transfer_account_case'
|
59
61
|
require_relative 'default_cases/refresh_case'
|
60
62
|
require_relative 'default_cases/refresh_presets_case'
|
61
63
|
require_relative 'default_cases/recover_db_case'
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class UseCases
|
4
|
+
class DefaultCases
|
5
|
+
class TransferAccountCase < DefaultCase
|
6
|
+
|
7
|
+
def process
|
8
|
+
@cases.define("transfer-account", type: :sync) do |entries, people, session, options, usecase|
|
9
|
+
remove_account = session.job_group("main").new("remove account", usecase: usecase, type: :update, sets: :account)
|
10
|
+
add_account = session.job_group("post").new("add account", usecase: usecase, type: :update, sets: :account)
|
11
|
+
|
12
|
+
strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict))
|
13
|
+
|
14
|
+
done = []; pending = []
|
15
|
+
pairs = entries.each_with_object([]) do |source|
|
16
|
+
entry_hash = source.internal_entry
|
17
|
+
unless entry_hash.key?("destination-id")
|
18
|
+
session.logger.error("You haven't defined a column 'destination-id' to whom the account should be transferred")
|
19
|
+
exit(1)
|
20
|
+
end
|
21
|
+
if peer_id = entry_hash["destination-id"]
|
22
|
+
if peer = entries.entry(id: peer_id, external_id: peer_id)
|
23
|
+
if done.include?(peer)
|
24
|
+
session.logger.error("You paired '#{peer_id}' twice. A person can only receive account from 1 user")
|
25
|
+
exit(1)
|
26
|
+
end
|
27
|
+
pending.delete(source)
|
28
|
+
pending.delete(peer)
|
29
|
+
done.push(source).push(pair)
|
30
|
+
[source, peer]
|
31
|
+
else
|
32
|
+
pending.push(source)
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
else
|
36
|
+
pending.push(source)
|
37
|
+
end
|
38
|
+
end.compact
|
39
|
+
|
40
|
+
# Data input integrity check
|
41
|
+
unless pending.empty?
|
42
|
+
msg = "You haven't defined a pair for the following ids:"
|
43
|
+
msg += pending.each_with_object("") do |entry, str|
|
44
|
+
str << "\n#{entry.id || entry.external_id}"
|
45
|
+
end
|
46
|
+
session.logger.error(msg)
|
47
|
+
exit(1)
|
48
|
+
end
|
49
|
+
|
50
|
+
pairs.each do |pair|
|
51
|
+
src_entry, dst_entry = pair
|
52
|
+
unless src_person = people.find(src_entry, strict: strict_search)
|
53
|
+
session.logger.error("Entry(#{i}) - this person does not exist: #{src_entry.to_s(:identify)}")
|
54
|
+
exit(1)
|
55
|
+
end
|
56
|
+
|
57
|
+
unless dst_person = people.find(dst_entry, strict: strict_search)
|
58
|
+
session.logger.error("Entry(#{i}) - this person does not exist: #{dst_person.to_s(:identify)}")
|
59
|
+
exit(1)
|
60
|
+
end
|
61
|
+
|
62
|
+
unless account_doc = src_person.account&.doc
|
63
|
+
session.logger.error("You are trying to move account from a person that doesn't have: #{src_person.id | src_person.external_id}")
|
64
|
+
exit(1)
|
65
|
+
end
|
66
|
+
|
67
|
+
if dst_person.email.to_s.strip.empty?
|
68
|
+
session.logger.error("A person you are trying to add account doesn't have email: #{dst_person.id | dst_person.external_id}")
|
69
|
+
exit(1)
|
70
|
+
end
|
71
|
+
|
72
|
+
src_person.account = nil
|
73
|
+
remove_account.add(src_person)
|
74
|
+
add_account.add(dst_person) do |person|
|
75
|
+
# only if we got to remove the account of the original person
|
76
|
+
if account_doc && src_person.as_update == {}
|
77
|
+
person.account = account_doc
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -66,6 +66,7 @@ ASSETS.cli.config do |cnf|
|
|
66
66
|
cases.add("-update-from", :sync, case_name: "update")
|
67
67
|
cases.add("-refresh", :transform, case_name: "refresh")
|
68
68
|
cases.add("-refresh-presets", :transform, case_name: "refresh-presets")
|
69
|
+
cases.add("-transfer-account-from", :sync, case_name: "transfer-account")
|
69
70
|
cases.add("-remove-account", :transform, case_name: "remove-account")
|
70
71
|
cases.add("-remove-account-from", :sync, case_name: "remove-account")
|
71
72
|
cases.add("-delete", :transform, case_name: "delete")
|
data/lib/eco/data/mapper.rb
CHANGED
@@ -4,7 +4,8 @@ module Eco
|
|
4
4
|
|
5
5
|
# it expects [[v1a, v1b], [v2a, v2b] ...]
|
6
6
|
def initialize (array_of_arrays = [], internal: :last)
|
7
|
-
@
|
7
|
+
@internal_order = internal
|
8
|
+
@source = array_of_arrays
|
8
9
|
|
9
10
|
if @source
|
10
11
|
# internal should be always last in @source
|
@@ -18,6 +19,27 @@ module Eco
|
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
22
|
+
def as_json(internal: @internal_order)
|
23
|
+
to_a(internal: internal)
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_json(internal: @internal_order)
|
27
|
+
content = as_json(internal: internal).map do |pair|
|
28
|
+
" " + pair.to_json
|
29
|
+
end.join(",\n")
|
30
|
+
"[\n#{content}\n]"
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_a(internal: @internal_order)
|
34
|
+
@by_internal.map do |int, ext|
|
35
|
+
internal == :last ? [ext, int] : [int, ext]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def +(array_of_arrays)
|
40
|
+
self.class.new(array_of_arrays + to_a, internal: @internal_order)
|
41
|
+
end
|
42
|
+
|
21
43
|
def list(type = :internal)
|
22
44
|
return [] if !@source
|
23
45
|
@source.map do |pair|
|
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.3.
|
4
|
+
version: 1.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oscar Segura
|
@@ -320,6 +320,7 @@ files:
|
|
320
320
|
- lib/eco/api/usecases/default_cases/switch_supervisor_case.rb
|
321
321
|
- lib/eco/api/usecases/default_cases/to_csv_case.rb
|
322
322
|
- lib/eco/api/usecases/default_cases/to_csv_detailed_case.rb
|
323
|
+
- lib/eco/api/usecases/default_cases/transfer_account_case.rb
|
323
324
|
- lib/eco/api/usecases/default_cases/update_case.rb
|
324
325
|
- lib/eco/api/usecases/default_cases/update_details_case.rb
|
325
326
|
- lib/eco/api/usecases/default_cases/upsert_case.rb
|