eco-helpers 1.3.14 → 1.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 01ec2727fdeee5bc360e417faefdafdb8bf69078cecc17ead881047e8df17cd2
4
- data.tar.gz: 67e46501f166224248d6d92e6607cddcbce3806dbd05f41e485d0ca2139f1105
3
+ metadata.gz: 28d9f5ad6037a8160ea1d39873a0b1c6769be63865267d159dd6fa71ae329d60
4
+ data.tar.gz: ba968ce7525e5fb289ff5b210f3c79692b05dfc74ae6af6cf8c729640bb1cf4a
5
5
  SHA512:
6
- metadata.gz: cd26851249e2c8557f9da3399f72292cb46a2c12db530f12e3da2a88120dc08a6e0a6ee053527b91685cd60e532d2bbd76e156f1fc803dc6bf2c1246a21fac27
7
- data.tar.gz: 4f199963c86259bb5a210dca09aa1af2b83c9489308afd200986d6d5c13f32d3479fb2eeaad19c397882359dd3ef16892dc7449860879e2a71fdbf8f73e34943
6
+ metadata.gz: 2a7bda8f0a427b7a93d42230c32226c578b4ae4aab9b2974bf1095d1f77d368faa8c409e41375cf5d378ed4a915b359ce12e74559c7f963a2a9d791a165f3232
7
+ data.tar.gz: ba9adb7220623345536d5080e658a524daebd914f3c64d94f83652e3d42fbdb240da9a08367ee42dde196adfc2152553b4133bd330d3a007052bba42b156aed5
@@ -1,6 +1,51 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [1.4.0] - 2020-07-xx
5
+
6
+ ### Added
7
+ ### Changed
8
+ - change abilities to align with ecoPortal release `1.5.0`
9
+ - remove some patches on `ecoportal-api`
10
+ - removed patch method `Ecoportal::API::V1::Person#sync`
11
+ ### Fixed
12
+ - `Eco::CSV#parse` and `Eco::CSV#read` should use the proper `:encoding` when it's `bom`
13
+
14
+ ## [1.3.18] - 2020-07-08
15
+
16
+ ### Added
17
+ ### Changed
18
+ ### Fixed
19
+ - the `update` case was missing the code to use the `default_usergroup`
20
+
21
+
22
+ ## [1.3.17] - 2020-07-06
23
+
24
+ ### Added
25
+ ### Changed
26
+ - the `hris` case should not only include as `leavers` those that have account, but anyone that leaves
27
+ * as we could have active people with no account
28
+ ### Fixed
29
+ - `Eco::API::Session::Batch::Errors#errors`: fix error for empty `body` on response
30
+
31
+ ## [1.3.16] - 2020-06-26
32
+
33
+ ### Added
34
+ - `Eco::API::Common::People::Entries`, `#entry` & `#find` should allow for `strict` search (added parameter)
35
+ ### Changed
36
+ - upgraded `ecoportal-api` gem dependency to minimum version `0.5.7`
37
+ - this includes the removal of some patches
38
+ - some gems update
39
+ ### Fixed
40
+ - patched preferences (`kiosk` preferences should default to `nil`)
41
+
42
+ ## [1.3.15] - 2020-06-11
43
+
44
+ ### Added
45
+ - default usecase to export to `csv` (`-detailed`) now includes `"Supervisor Name"` column
46
+ ### Changed
47
+ ### Fixed
48
+
4
49
  ## [1.3.14] - 2020-06-10
5
50
 
6
51
  ### Added
@@ -22,16 +22,16 @@ Gem::Specification.new do |s|
22
22
  #s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
23
  s.require_paths = ["lib"]
24
24
 
25
- s.add_development_dependency "bundler", "~> 2.0.1"
26
- s.add_development_dependency "rspec", "~> 3", ">= 3.8"
25
+ s.add_development_dependency "bundler", "~> 2.1", ">= 2.1.3"
26
+ s.add_development_dependency "rspec", "~> 3", ">= 3.9"
27
27
  s.add_development_dependency "rake", "~> 12.3.0"
28
28
  s.add_development_dependency "yard", "~> 0.9", ">= 0.9.18"
29
29
  s.add_development_dependency "redcarpet", "~> 3.5", ">= 3.5.0"
30
30
 
31
- s.add_dependency 'ecoportal-api', '~> 0.5', '>= 0.5.6'
32
- s.add_dependency 'aws-sdk-s3', '~> 1.30', '>= 1.30.1'
33
- s.add_dependency 'aws-sdk-ses', '~> 1.14', '>= 1.14.0'
34
- s.add_dependency 'dotenv', '~> 2.6', '>= 2.6.0'
31
+ s.add_dependency 'ecoportal-api', '~> 0.5', '>= 0.5.9'
32
+ s.add_dependency 'aws-sdk-s3', '~> 1', '>= 1.64.0'
33
+ s.add_dependency 'aws-sdk-ses', '~> 1', '>= 1.29.0'
34
+ s.add_dependency 'dotenv', '~> 2.7', '>= 2.7.0'
35
35
  s.add_dependency 'net-sftp', '~> 2.1', '>= 2.1.2'
36
36
 
37
37
  end
@@ -50,23 +50,28 @@ module Eco
50
50
  end
51
51
 
52
52
  # Search function to find an `entry` based on one of different options
53
- def entry(id: nil, external_id: nil, email: nil)
53
+ def entry(id: nil, external_id: nil, email: nil, strict: false)
54
54
  init_caches
55
55
  pers = nil
56
56
  pers = @by_id[id]&.first if id
57
57
  pers = @by_external_id[external_id&.strip]&.first if !pers && !external_id.to_s.strip.empty?
58
- pers = @by_email[email&.downcase.strip]&.first if !pers && !email.to_s.strip.empty?
59
- pers = @by_external_id[email&.downcase.strip]&.first if !pers && !email.to_s.strip.empty?
58
+
59
+ # strict prevents taking existing user for searched person with same email
60
+ # specially useful if the organisation ensures all have external id (no need for email search)
61
+ if !pers && (!strict || external_id.to_s.strip.empty?)
62
+ pers = @by_email[email&.downcase.strip]&.first if !pers && !email.to_s.strip.empty?
63
+ pers = @by_external_id[email&.downcase.strip]&.first if !pers && !email.to_s.strip.empty?
64
+ end
60
65
  pers
61
66
  end
62
67
 
63
68
  # Search function to find an `entry` based on one of different options
64
69
  # see Eco::API::Common::People::Entries#entry
65
- def find(object)
70
+ def find(object, strict: false)
66
71
  id = object.respond_to?("id")? object.send("id") : nil
67
72
  external_id = object.respond_to?("external_id")? object.send("external_id") : nil
68
73
  email = object.respond_to?("email")? object.send("email") : nil
69
- entry(id: id, external_id: external_id, email: email)
74
+ entry(id: id, external_id: external_id, email: email, strict: strict)
70
75
  end
71
76
 
72
77
  def exclude(object)
@@ -1,6 +1,2 @@
1
- require 'ecoportal/api'
2
- require_relative 'ecoportal_api/base_model'
3
- require_relative 'ecoportal_api/external_people'
4
1
  require_relative 'ecoportal_api/external_person'
5
2
  require_relative 'ecoportal_api/internal_person'
6
- require_relative 'ecoportal_api/account_preferences'
@@ -3,10 +3,6 @@ module Ecoportal
3
3
  class V1
4
4
  class Person
5
5
 
6
- def sync
7
- consolidate!
8
- end
9
-
10
6
  def reset_details!
11
7
  doc["details"] = JSON.parse(original_doc["details"])
12
8
  end
@@ -5,6 +5,9 @@
5
5
  "reports": "view",
6
6
  "organization": null,
7
7
  "people": null,
8
+ "person_core": null,
9
+ "person_account": null,
10
+ "person_details": null,
8
11
  "pages": "view",
9
12
  "page_editor": null,
10
13
  "registers": "view"
@@ -14,7 +17,9 @@
14
17
  "data": "view",
15
18
  "reports": "view",
16
19
  "organization": null,
17
- "people": "attach",
20
+ "person_core": "attach",
21
+ "person_account": null,
22
+ "person_details": "view",
18
23
  "pages": "create",
19
24
  "page_editor": "basic",
20
25
  "registers": "view"
@@ -24,7 +29,9 @@
24
29
  "data": "update",
25
30
  "reports": "edit",
26
31
  "organization": "view",
27
- "people": "view",
32
+ "person_core": "view_people_manager",
33
+ "person_account": "view",
34
+ "person_details": "view",
28
35
  "pages": "create",
29
36
  "page_editor": "intermediate",
30
37
  "registers": "view"
@@ -34,7 +41,9 @@
34
41
  "data": "administrate",
35
42
  "reports": "administrate",
36
43
  "organization": "administrate",
37
- "people": "edit",
44
+ "person_core": "edit",
45
+ "person_account": "edit",
46
+ "person_details": "edit_private",
38
47
  "pages": "administrate",
39
48
  "page_editor": "advanced",
40
49
  "registers": "dashboard"
@@ -3,7 +3,9 @@
3
3
  "data": [null, "view", "update", "administrate", "implement"],
4
4
  "reports": [null, "view", "edit", "administrate"],
5
5
  "organization": [null, "view", "administrate", "implement"],
6
- "people": [null, "attach", "view", "view_private", "edit", "dashboard"],
6
+ "person_core": [null, "attach", "view_people_manager", "create", "edit", "dashboard"],
7
+ "person_account": [null, "view", "create", "edit"],
8
+ "person_details": [null, "view", "edit_public", "view_private", "edit_private"],
7
9
  "pages": [null, "view", "update", "create", "administrate"],
8
10
  "page_editor": [null, "basic", "intermediate", "advanced", "implement"],
9
11
  "registers": [null, "view", "dashboard", "administrate", "implement"]
@@ -69,13 +69,15 @@ module Eco
69
69
 
70
70
  def errors
71
71
  entries.each_with_object([]) do |entry, arr|
72
- if errs = status[entry].body["errors"]
73
- errs.each do |msg|
74
- arr.push({
75
- type: klass = Eco::API::Error.get_type(msg),
76
- err: klass.new(err_msg: msg, entry: entry, session: session),
77
- entry: entry
78
- })
72
+ if body = status[entry].body
73
+ if errs = body["errors"]
74
+ errs.each do |msg|
75
+ arr.push({
76
+ type: klass = Eco::API::Error.get_type(msg),
77
+ err: klass.new(err_msg: msg, entry: entry, session: session),
78
+ entry: entry
79
+ })
80
+ end
79
81
  end
80
82
  end
81
83
  end
@@ -69,7 +69,7 @@ module Eco
69
69
  if session.tagtree
70
70
  person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
71
71
  else
72
- tags = person.filter_tags
72
+ tags = person.filter_tags || []
73
73
  person.account.default_tag = tags.first unless tags.length > 1
74
74
  end
75
75
  end
@@ -11,17 +11,18 @@ module Eco
11
11
  supers = session.job_group("post").new("supers", usecase: usecase, type: :update, sets: :core)
12
12
  leavers = session.job_group("post").new("leavers", usecase: usecase, type: :update, sets: :account)
13
13
 
14
- people.users.each_with_index do |person, i|
15
- if !entries.find(person)
14
+ strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict))
15
+ pgs = session.policy_groups
16
+
17
+ people.each_with_index do |person, i|
18
+ if !entries.find(person, strict: strict_search)
16
19
  leavers.add(person) do |person|
17
20
  person.supervisor_id = nil
18
- person.account = nil
21
+ person.account = nil if person.account
19
22
  end
20
23
  end
21
24
  end
22
25
 
23
- strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict))
24
- pgs = session.policy_groups
25
26
 
26
27
  if session.config.people.default_usergroup?
27
28
  def_id = pgs.to_id(session.config.people.default_usergroup)
@@ -84,7 +85,7 @@ module Eco
84
85
  if session.tagtree
85
86
  person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
86
87
  else
87
- tags = person.filter_tags
88
+ tags = person.filter_tags || []
88
89
  person.account.default_tag = tags.first unless tags.length > 1
89
90
  end
90
91
  end
@@ -30,8 +30,12 @@ module Eco
30
30
  update = session.job_group("main").new("update", usecase: usecase, type: :update, sets: :account)
31
31
 
32
32
  people.each_with_index do |person, i|
33
- #next unless person.id == "5c527ba63f7690001243f5b2"
34
- person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
33
+ if session.tagtree
34
+ person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
35
+ else
36
+ tags = person.filter_tags || []
37
+ person.account.default_tag = tags.first unless tags.length > 1
38
+ end
35
39
  update.add(person)
36
40
  end
37
41
 
@@ -42,7 +42,7 @@ module Eco
42
42
  csv << session.new_entry(person, dependencies: deps).to_hash.values
43
43
  end
44
44
  end
45
- true
45
+ exit(0)
46
46
  end
47
47
  end
48
48
 
@@ -24,21 +24,31 @@ module Eco
24
24
  CSV.open(file, "w") do |csv|
25
25
  deps = {"supervisor_id" => {people: people}}
26
26
  header = session.new_entry(people.first, dependencies: deps).to_hash.keys
27
+ header += ["Subordinates"]
28
+ header += ["Supervisor Name"]
27
29
  header += abilities
28
30
  header += ["Login Methods"] if login_providers.any_optional?
29
- header += ["Subordinates"]
30
31
  header += ["Landing Page"]
31
32
 
32
33
  csv << header
33
34
  people.each do |person|
34
35
  data = session.new_entry(person, dependencies: deps).to_hash.values
36
+
37
+ data.push(person.subordinates)
38
+ super_id = person.supervisor_id
39
+ if supervisor = people.person(id: super_id, external_id: super_id)
40
+ data.push(supervisor.name)
41
+ else
42
+ data.push("")
43
+ end
44
+
35
45
  person_abilities = (person.account && person.account.permissions_custom) || {}
36
46
  data += abilities.map {|key| person_abilities[key] || "no access"}
47
+
37
48
  if login_providers.any_optional?
38
49
  logins = (person.account && person.account.login_provider_ids) || []
39
50
  data.push(login_providers.to_name(logins).join("|"))
40
51
  end
41
- data.push(person.subordinates)
42
52
 
43
53
  if person.account && landing_id = person.account.landing_page_id
44
54
  data.push(landing_id)
@@ -47,7 +57,7 @@ module Eco
47
57
  csv << data
48
58
  end
49
59
  end
50
- true
60
+ exit(0)
51
61
  end
52
62
  end
53
63
 
@@ -12,6 +12,10 @@ module Eco
12
12
  strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict))
13
13
  pgs = session.policy_groups
14
14
 
15
+ if session.config.people.default_usergroup?
16
+ def_id = pgs.to_id(session.config.people.default_usergroup)
17
+ end
18
+
15
19
  entries.each.with_index do |entry, i|
16
20
  if person = people.find(entry, strict: strict_search)
17
21
 
@@ -37,6 +41,7 @@ module Eco
37
41
  entry.set_details(person) unless options.dig(:exclude, :details)
38
42
 
39
43
  unless options.dig(:exclude, :account)
44
+ add_account = !person.account
40
45
  ini_pg_ids = person.account&.policy_group_ids || []
41
46
 
42
47
  account_excluded = []
@@ -68,7 +73,7 @@ module Eco
68
73
  if session.tagtree
69
74
  person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
70
75
  else
71
- tags = person.filter_tags
76
+ tags = person.filter_tags || []
72
77
  person.account.default_tag = tags.first unless tags.length > 1
73
78
  end
74
79
  end
@@ -77,7 +77,7 @@ module Eco
77
77
  if session.tagtree
78
78
  person.account.default_tag = session.tagtree.default_tag(*person.filter_tags)
79
79
  else
80
- tags = person.filter_tags
80
+ tags = person.filter_tags || []
81
81
  person.account.default_tag = tags.first unless tags.length > 1
82
82
  end
83
83
  end
@@ -71,7 +71,7 @@ module Eco
71
71
  end
72
72
 
73
73
  def encoding(path)
74
- has_bom?(path) ? "bom|utf-8" : "utf-8"
74
+ has_bom?(path) ? "bom" : "utf-8"
75
75
  end
76
76
 
77
77
  def script_subfolder
@@ -1,3 +1,3 @@
1
1
  module Eco
2
- VERSION = "1.3.14"
2
+ VERSION = "1.4.0"
3
3
  end
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.14
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Segura
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.1
19
+ version: '2.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.1.3
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: 2.0.1
29
+ version: '2.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.1.3
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rspec
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -33,7 +39,7 @@ dependencies:
33
39
  version: '3'
34
40
  - - ">="
35
41
  - !ruby/object:Gem::Version
36
- version: '3.8'
42
+ version: '3.9'
37
43
  type: :development
38
44
  prerelease: false
39
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,7 +49,7 @@ dependencies:
43
49
  version: '3'
44
50
  - - ">="
45
51
  - !ruby/object:Gem::Version
46
- version: '3.8'
52
+ version: '3.9'
47
53
  - !ruby/object:Gem::Dependency
48
54
  name: rake
49
55
  requirement: !ruby/object:Gem::Requirement
@@ -107,7 +113,7 @@ dependencies:
107
113
  version: '0.5'
108
114
  - - ">="
109
115
  - !ruby/object:Gem::Version
110
- version: 0.5.6
116
+ version: 0.5.9
111
117
  type: :runtime
112
118
  prerelease: false
113
119
  version_requirements: !ruby/object:Gem::Requirement
@@ -117,67 +123,67 @@ dependencies:
117
123
  version: '0.5'
118
124
  - - ">="
119
125
  - !ruby/object:Gem::Version
120
- version: 0.5.6
126
+ version: 0.5.9
121
127
  - !ruby/object:Gem::Dependency
122
128
  name: aws-sdk-s3
123
129
  requirement: !ruby/object:Gem::Requirement
124
130
  requirements:
125
131
  - - "~>"
126
132
  - !ruby/object:Gem::Version
127
- version: '1.30'
133
+ version: '1'
128
134
  - - ">="
129
135
  - !ruby/object:Gem::Version
130
- version: 1.30.1
136
+ version: 1.64.0
131
137
  type: :runtime
132
138
  prerelease: false
133
139
  version_requirements: !ruby/object:Gem::Requirement
134
140
  requirements:
135
141
  - - "~>"
136
142
  - !ruby/object:Gem::Version
137
- version: '1.30'
143
+ version: '1'
138
144
  - - ">="
139
145
  - !ruby/object:Gem::Version
140
- version: 1.30.1
146
+ version: 1.64.0
141
147
  - !ruby/object:Gem::Dependency
142
148
  name: aws-sdk-ses
143
149
  requirement: !ruby/object:Gem::Requirement
144
150
  requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- version: 1.14.0
148
151
  - - "~>"
149
152
  - !ruby/object:Gem::Version
150
- version: '1.14'
153
+ version: '1'
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: 1.29.0
151
157
  type: :runtime
152
158
  prerelease: false
153
159
  version_requirements: !ruby/object:Gem::Requirement
154
160
  requirements:
155
- - - ">="
156
- - !ruby/object:Gem::Version
157
- version: 1.14.0
158
161
  - - "~>"
159
162
  - !ruby/object:Gem::Version
160
- version: '1.14'
163
+ version: '1'
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: 1.29.0
161
167
  - !ruby/object:Gem::Dependency
162
168
  name: dotenv
163
169
  requirement: !ruby/object:Gem::Requirement
164
170
  requirements:
165
171
  - - ">="
166
172
  - !ruby/object:Gem::Version
167
- version: 2.6.0
173
+ version: 2.7.0
168
174
  - - "~>"
169
175
  - !ruby/object:Gem::Version
170
- version: '2.6'
176
+ version: '2.7'
171
177
  type: :runtime
172
178
  prerelease: false
173
179
  version_requirements: !ruby/object:Gem::Requirement
174
180
  requirements:
175
181
  - - ">="
176
182
  - !ruby/object:Gem::Version
177
- version: 2.6.0
183
+ version: 2.7.0
178
184
  - - "~>"
179
185
  - !ruby/object:Gem::Version
180
- version: '2.6'
186
+ version: '2.7'
181
187
  - !ruby/object:Gem::Dependency
182
188
  name: net-sftp
183
189
  requirement: !ruby/object:Gem::Requirement
@@ -247,9 +253,6 @@ files:
247
253
  - lib/eco/api/common/session/sftp.rb
248
254
  - lib/eco/api/common/version_patches.rb
249
255
  - lib/eco/api/common/version_patches/ecoportal_api.rb
250
- - lib/eco/api/common/version_patches/ecoportal_api/account_preferences.rb
251
- - lib/eco/api/common/version_patches/ecoportal_api/base_model.rb
252
- - lib/eco/api/common/version_patches/ecoportal_api/external_people.rb
253
256
  - lib/eco/api/common/version_patches/ecoportal_api/external_person.rb
254
257
  - lib/eco/api/common/version_patches/ecoportal_api/internal_person.rb
255
258
  - lib/eco/api/common/version_patches/exception.rb
@@ -1,51 +0,0 @@
1
- module Ecoportal
2
- module API
3
- class Internal
4
- class Preferences
5
- [
6
- :show_sidebar,
7
- :show_shortcuts,
8
- :show_coming_soon,
9
- :show_recently_visited_forms,
10
- :show_tasks,
11
- ].each do |field|
12
- key = field.to_s
13
- define_method(field) do
14
- if doc.key?(key)
15
- doc[key]
16
- else
17
- true
18
- end
19
- end
20
- define_method("#{field}=") do |value|
21
- doc[key] = !!value
22
- end
23
- end
24
-
25
- [
26
- :kiosk_enabled,
27
- :kiosk_workflow_message,
28
- :kiosk_create_button_label,
29
- :kiosk_create_button_help,
30
- :kiosk_return_button_label,
31
- :kiosk_return_button_help,
32
- :kiosk_dashboard_button_label,
33
- :kiosk_dashboard_button_help
34
- ].each do |field|
35
- key = field.to_s
36
- define_method(field) do
37
- if doc.key?(key)
38
- doc[key]
39
- else
40
- nil
41
- end
42
- end
43
- define_method("#{field}=") do |value|
44
- doc[key] = !!value
45
- end
46
- end
47
-
48
- end
49
- end
50
- end
51
- end
@@ -1,27 +0,0 @@
1
- module Ecoportal
2
- module API
3
- module Common
4
- class BaseModel
5
-
6
- attr_reader :initial_doc
7
-
8
- def initialize(doc = {}, parent: self, key: nil)
9
- @_parent = parent
10
- @_key = key
11
- if !_parent || !_key
12
- @doc = doc
13
- @original_doc = JSON.parse(@doc.to_json)
14
- @initial_doc = JSON.parse(@doc.to_json)
15
- end
16
- end
17
-
18
- def initial_doc
19
- raise UnlinkedModel.new unless linked?
20
- return @initial_doc if is_root?
21
- _parent.initial_doc.dig(*[_key].flatten)
22
- end
23
-
24
- end
25
- end
26
- end
27
- end
@@ -1,38 +0,0 @@
1
- module Ecoportal
2
- module API
3
- class V1
4
- class People
5
-
6
- def job
7
- operation = Common::BatchOperation.new("/people", person_class, logger: client.logger)
8
- yield operation
9
- # The batch operation is responsible for logging the output
10
- job_id = create_job(operation)
11
- status = wait_for_job_completion(job_id)
12
-
13
- if status&.complete?
14
- operation.process_response job_result(job_id, operation)
15
- else
16
- raise "Job `#{job_id}` not complete. Probably timeout after #{JOB_TIMEOUT + 120} seconds. Current status: #{status}"
17
- end
18
- end
19
-
20
- private
21
-
22
- def wait_for_job_completion(job_id)
23
- # timeout library is evil. So we make poor-man timeout.
24
- # https://jvns.ca/blog/2015/11/27/why-rubys-timeout-is-dangerous-and-thread-dot-raise-is-terrifying/
25
- before = Time.now
26
- while true
27
- status = job_status(job_id)
28
- break status if status.complete?
29
- break status if Time.now >= before + (JOB_TIMEOUT + 120)
30
- sleep(DELAY_STATUS_CHECK)
31
- status
32
- end
33
- end
34
-
35
- end
36
- end
37
- end
38
- end