eco-helpers 1.5.0 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +45 -2
- data/eco-helpers.gemspec +11 -10
- data/lib/eco/api.rb +1 -0
- data/lib/eco/api/common.rb +1 -1
- data/lib/eco/api/common/people/default_parsers.rb +4 -0
- data/lib/eco/api/common/people/default_parsers/freemium_parser.rb +30 -0
- data/lib/eco/api/common/people/default_parsers/policy_groups_parser.rb +42 -0
- data/lib/eco/api/common/people/default_parsers/send_invites_parser.rb +2 -1
- data/lib/eco/api/common/people/entry_factory.rb +8 -7
- data/lib/eco/api/common/people/person_entry_attribute_mapper.rb +2 -0
- data/lib/eco/api/common/people/person_parser.rb +1 -1
- data/lib/eco/api/common/session/base_session.rb +3 -6
- data/lib/eco/api/common/session/environment.rb +2 -23
- data/lib/eco/api/common/version_patches/ecoportal_api/internal_person.rb +9 -1
- data/lib/eco/api/microcases.rb +31 -0
- data/lib/eco/api/microcases/core_excluded.rb +20 -0
- data/lib/eco/api/microcases/fix_filter_tags.rb +22 -0
- data/lib/eco/api/microcases/set_account.rb +32 -0
- data/lib/eco/api/microcases/set_core.rb +18 -0
- data/lib/eco/api/microcases/set_default_group.rb +33 -0
- data/lib/eco/api/microcases/set_default_tag.rb +23 -0
- data/lib/eco/api/microcases/set_supervisor.rb +26 -0
- data/lib/eco/api/microcases/strict_search.rb +14 -0
- data/lib/eco/api/organization/presets_values.json +1 -0
- data/lib/eco/api/session.rb +9 -6
- data/lib/eco/api/session/batch.rb +1 -44
- data/lib/eco/api/session/config.rb +2 -2
- data/lib/eco/api/session/config/api.rb +121 -7
- data/lib/eco/api/session/config/apis.rb +24 -25
- data/lib/eco/api/usecases/default_cases/recover_db_case.rb +1 -0
- data/lib/eco/api/usecases/microed_cases/hris_case.rb +53 -0
- data/lib/eco/api/usecases/microed_cases/update_case.rb +33 -0
- data/lib/eco/api/usecases/microed_cases/update_details_case.rb +30 -0
- data/lib/eco/api/usecases/microed_cases/upsert_case.rb +36 -0
- data/lib/eco/version.rb +1 -1
- metadata +94 -53
@@ -40,6 +40,7 @@ module Eco
|
|
40
40
|
person.email = entry.email unless options.dig(:exclude, :email)
|
41
41
|
person.supervisor_id = entry.supervisor_id unless options.dig(:exclude, :supervisor)
|
42
42
|
person.filter_tags = entry.filter_tags || [] unless options.dig(:exclude, :filter_tags)
|
43
|
+
person.freemium = entry.freemium
|
43
44
|
end
|
44
45
|
|
45
46
|
unless options.dig(:exclude, :account)
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class UseCases
|
4
|
+
class DefaultCases
|
5
|
+
class HrisCase < DefaultCase
|
6
|
+
|
7
|
+
def process
|
8
|
+
@cases.define("hris", type: :sync) do |entries, people, session, options, usecase|
|
9
|
+
micro = session.microcases
|
10
|
+
|
11
|
+
creation = session.new_job("main", "create", :create, usecase)
|
12
|
+
update = session.new_job("main", "update", :update, usecase)
|
13
|
+
supers = session.new_job("post", "supers", :update, usecase, :core)
|
14
|
+
leavers = session.new_job("post", "leavers", :update, usecase, :account)
|
15
|
+
|
16
|
+
micro.with_leavers(entries, people, options, leavers) do |person|
|
17
|
+
person.supervisor_id = nil
|
18
|
+
person.account = nil if person.account
|
19
|
+
end
|
20
|
+
|
21
|
+
people.each_with_index do |person, i|
|
22
|
+
if person = people.find(entry, strict: micro.strict_search(options))
|
23
|
+
if !entries.find(person, strict: strict: micro.strict_search(options))
|
24
|
+
leavers.add(person) do |person|
|
25
|
+
person.supervisor_id = nil
|
26
|
+
person.account = nil if person.account
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
entries.each_with_index do |entry, i|
|
32
|
+
if person = people.find(entry, strict: micro.strict_search(options))
|
33
|
+
update.add(person)
|
34
|
+
else
|
35
|
+
person = session.new_person
|
36
|
+
creation.add(person)
|
37
|
+
end
|
38
|
+
|
39
|
+
micro.set_core(entry, person, options, people, supers)
|
40
|
+
entry.set_details(person) unless options.dig(:exclude, :details)
|
41
|
+
micro.set_account(entry, person, options)
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class UseCases
|
4
|
+
class DefaultCases
|
5
|
+
class UpdateCase < DefaultCase
|
6
|
+
|
7
|
+
def process
|
8
|
+
@cases.define("update", type: :sync) do |entries, people, session, options, usecase|
|
9
|
+
micro = session.microcases
|
10
|
+
|
11
|
+
update = session.new_job("main", "update", :update, usecase)
|
12
|
+
supers = session.new_job("post", "supers", :update, usecase, :core)
|
13
|
+
|
14
|
+
entries.each.with_index do |entry, i|
|
15
|
+
if person = people.find(entry, strict: micro.strict_search(**params))
|
16
|
+
micro.set_core(entry, person, options, people, supers)
|
17
|
+
entry.set_details(person) unless options.dig(:exclude, :details)
|
18
|
+
micro.set_account(entry, person, options)
|
19
|
+
|
20
|
+
update.add(person)
|
21
|
+
else
|
22
|
+
session.logger.error("Entry(#{i}) - this person does not exist: #{entry.to_s(:identify)}")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class UseCases
|
4
|
+
class DefaultCases
|
5
|
+
class UpdateDetailsCase < DefaultCase
|
6
|
+
|
7
|
+
def process
|
8
|
+
@cases.define("update-details", type: :sync) do |entries, people, session, options, usecase|
|
9
|
+
micro = session.microcases
|
10
|
+
|
11
|
+
update = session.new_job("main", "update", :update, usecase)
|
12
|
+
supers = session.new_job("post", "supers", :update, usecase, :core)
|
13
|
+
|
14
|
+
entries.each.with_index do |entry, i|
|
15
|
+
if person = people.find(entry, strict: micro.strict_search(options))
|
16
|
+
micro.set_core(entry, person, options, people, supers)
|
17
|
+
entry.set_details(person) unless options.dig(:exclude, :details)
|
18
|
+
update.add(person)
|
19
|
+
else
|
20
|
+
session.logger.error("Entry(#{i}) - this person does not exist: #{entry.to_s(:identify)}")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Eco
|
2
|
+
module API
|
3
|
+
class UseCases
|
4
|
+
class DefaultCases
|
5
|
+
class UpsertCase < DefaultCase
|
6
|
+
|
7
|
+
def process
|
8
|
+
@cases.define("upsert", type: :sync) do |entries, people, session, options, usecase|
|
9
|
+
micro = session.microcases
|
10
|
+
|
11
|
+
creation = session.new_job("main", "create", :create, usecase)
|
12
|
+
update = session.new_job("main", "update", :update, usecase)
|
13
|
+
supers = session.new_job("post", "supers", :update, usecase, :core)
|
14
|
+
|
15
|
+
entries.each_with_index do |entry, i|
|
16
|
+
params = [entry, person, session, options]
|
17
|
+
|
18
|
+
if person = people.find(entry, strict: micro.strict_search(options))
|
19
|
+
update.add(person)
|
20
|
+
else
|
21
|
+
person = session.new_person
|
22
|
+
creation.add(person)
|
23
|
+
end
|
24
|
+
|
25
|
+
micro.set_core(entry, person, options, people, supers)
|
26
|
+
entry.set_details(person) unless options.dig(:exclude, :details)
|
27
|
+
micro.set_account(entry, person, options)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
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.5.
|
4
|
+
version: 1.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oscar Segura
|
@@ -14,76 +14,82 @@ dependencies:
|
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '2.1'
|
20
17
|
- - ">="
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: 2.1.3
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '2.2'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '2.1'
|
30
27
|
- - ">="
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: 2.1.3
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '2.2'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rspec
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '3'
|
40
37
|
- - ">="
|
41
38
|
- !ruby/object:Gem::Version
|
42
39
|
version: '3.9'
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '4'
|
43
43
|
type: :development
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '3'
|
50
47
|
- - ">="
|
51
48
|
- !ruby/object:Gem::Version
|
52
49
|
version: '3.9'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '4'
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: rake
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
|
-
- - "
|
57
|
+
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
59
|
version: 12.3.0
|
60
|
+
- - "<"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '13'
|
60
63
|
type: :development
|
61
64
|
prerelease: false
|
62
65
|
version_requirements: !ruby/object:Gem::Requirement
|
63
66
|
requirements:
|
64
|
-
- - "
|
67
|
+
- - ">="
|
65
68
|
- !ruby/object:Gem::Version
|
66
69
|
version: 12.3.0
|
70
|
+
- - "<"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '13'
|
67
73
|
- !ruby/object:Gem::Dependency
|
68
74
|
name: yard
|
69
75
|
requirement: !ruby/object:Gem::Requirement
|
70
76
|
requirements:
|
71
|
-
- - "~>"
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '0.9'
|
74
77
|
- - ">="
|
75
78
|
- !ruby/object:Gem::Version
|
76
79
|
version: 0.9.18
|
80
|
+
- - "<"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.10'
|
77
83
|
type: :development
|
78
84
|
prerelease: false
|
79
85
|
version_requirements: !ruby/object:Gem::Requirement
|
80
86
|
requirements:
|
81
|
-
- - "~>"
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '0.9'
|
84
87
|
- - ">="
|
85
88
|
- !ruby/object:Gem::Version
|
86
89
|
version: 0.9.18
|
90
|
+
- - "<"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0.10'
|
87
93
|
- !ruby/object:Gem::Dependency
|
88
94
|
name: redcarpet
|
89
95
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,9 +97,9 @@ dependencies:
|
|
91
97
|
- - ">="
|
92
98
|
- !ruby/object:Gem::Version
|
93
99
|
version: 3.5.0
|
94
|
-
- - "
|
100
|
+
- - "<"
|
95
101
|
- !ruby/object:Gem::Version
|
96
|
-
version: '3.
|
102
|
+
version: '3.6'
|
97
103
|
type: :development
|
98
104
|
prerelease: false
|
99
105
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -101,69 +107,89 @@ dependencies:
|
|
101
107
|
- - ">="
|
102
108
|
- !ruby/object:Gem::Version
|
103
109
|
version: 3.5.0
|
104
|
-
- - "
|
110
|
+
- - "<"
|
105
111
|
- !ruby/object:Gem::Version
|
106
|
-
version: '3.
|
112
|
+
version: '3.6'
|
107
113
|
- !ruby/object:Gem::Dependency
|
108
114
|
name: ecoportal-api
|
109
115
|
requirement: !ruby/object:Gem::Requirement
|
110
116
|
requirements:
|
111
117
|
- - ">="
|
112
118
|
- !ruby/object:Gem::Version
|
113
|
-
version: 0.7.
|
114
|
-
- - "
|
119
|
+
version: 0.7.1
|
120
|
+
- - "<"
|
115
121
|
- !ruby/object:Gem::Version
|
116
|
-
version: '0.
|
122
|
+
version: '0.8'
|
117
123
|
type: :runtime
|
118
124
|
prerelease: false
|
119
125
|
version_requirements: !ruby/object:Gem::Requirement
|
120
126
|
requirements:
|
121
127
|
- - ">="
|
122
128
|
- !ruby/object:Gem::Version
|
123
|
-
version: 0.7.
|
124
|
-
- - "
|
129
|
+
version: 0.7.1
|
130
|
+
- - "<"
|
125
131
|
- !ruby/object:Gem::Version
|
126
|
-
version: '0.
|
132
|
+
version: '0.8'
|
127
133
|
- !ruby/object:Gem::Dependency
|
128
|
-
name:
|
134
|
+
name: ecoportal-api-oozes
|
129
135
|
requirement: !ruby/object:Gem::Requirement
|
130
136
|
requirements:
|
131
|
-
- - "
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 0.7.2
|
140
|
+
- - "<"
|
132
141
|
- !ruby/object:Gem::Version
|
133
|
-
version: '
|
142
|
+
version: '0.8'
|
143
|
+
type: :runtime
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 0.7.2
|
150
|
+
- - "<"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.8'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: aws-sdk-s3
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
134
157
|
- - ">="
|
135
158
|
- !ruby/object:Gem::Version
|
136
159
|
version: 1.64.0
|
160
|
+
- - "<"
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '2'
|
137
163
|
type: :runtime
|
138
164
|
prerelease: false
|
139
165
|
version_requirements: !ruby/object:Gem::Requirement
|
140
166
|
requirements:
|
141
|
-
- - "~>"
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
version: '1'
|
144
167
|
- - ">="
|
145
168
|
- !ruby/object:Gem::Version
|
146
169
|
version: 1.64.0
|
170
|
+
- - "<"
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '2'
|
147
173
|
- !ruby/object:Gem::Dependency
|
148
174
|
name: aws-sdk-ses
|
149
175
|
requirement: !ruby/object:Gem::Requirement
|
150
176
|
requirements:
|
151
|
-
- - "~>"
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
version: '1'
|
154
177
|
- - ">="
|
155
178
|
- !ruby/object:Gem::Version
|
156
179
|
version: 1.29.0
|
180
|
+
- - "<"
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: '2'
|
157
183
|
type: :runtime
|
158
184
|
prerelease: false
|
159
185
|
version_requirements: !ruby/object:Gem::Requirement
|
160
186
|
requirements:
|
161
|
-
- - "~>"
|
162
|
-
- !ruby/object:Gem::Version
|
163
|
-
version: '1'
|
164
187
|
- - ">="
|
165
188
|
- !ruby/object:Gem::Version
|
166
189
|
version: 1.29.0
|
190
|
+
- - "<"
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: '2'
|
167
193
|
- !ruby/object:Gem::Dependency
|
168
194
|
name: dotenv
|
169
195
|
requirement: !ruby/object:Gem::Requirement
|
@@ -171,9 +197,9 @@ dependencies:
|
|
171
197
|
- - ">="
|
172
198
|
- !ruby/object:Gem::Version
|
173
199
|
version: 2.7.0
|
174
|
-
- - "
|
200
|
+
- - "<"
|
175
201
|
- !ruby/object:Gem::Version
|
176
|
-
version: '2.
|
202
|
+
version: '2.8'
|
177
203
|
type: :runtime
|
178
204
|
prerelease: false
|
179
205
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -181,29 +207,29 @@ dependencies:
|
|
181
207
|
- - ">="
|
182
208
|
- !ruby/object:Gem::Version
|
183
209
|
version: 2.7.0
|
184
|
-
- - "
|
210
|
+
- - "<"
|
185
211
|
- !ruby/object:Gem::Version
|
186
|
-
version: '2.
|
212
|
+
version: '2.8'
|
187
213
|
- !ruby/object:Gem::Dependency
|
188
214
|
name: net-sftp
|
189
215
|
requirement: !ruby/object:Gem::Requirement
|
190
216
|
requirements:
|
191
|
-
- - "~>"
|
192
|
-
- !ruby/object:Gem::Version
|
193
|
-
version: '2.1'
|
194
217
|
- - ">="
|
195
218
|
- !ruby/object:Gem::Version
|
196
219
|
version: 2.1.2
|
220
|
+
- - "<"
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '2.2'
|
197
223
|
type: :runtime
|
198
224
|
prerelease: false
|
199
225
|
version_requirements: !ruby/object:Gem::Requirement
|
200
226
|
requirements:
|
201
|
-
- - "~>"
|
202
|
-
- !ruby/object:Gem::Version
|
203
|
-
version: '2.1'
|
204
227
|
- - ">="
|
205
228
|
- !ruby/object:Gem::Version
|
206
229
|
version: 2.1.2
|
230
|
+
- - "<"
|
231
|
+
- !ruby/object:Gem::Version
|
232
|
+
version: '2.2'
|
207
233
|
description:
|
208
234
|
email:
|
209
235
|
- oscar@ecoportal.co.nz
|
@@ -230,8 +256,10 @@ files:
|
|
230
256
|
- lib/eco/api/common/people/default_parsers/boolean_parser.rb
|
231
257
|
- lib/eco/api/common/people/default_parsers/csv_parser.rb
|
232
258
|
- lib/eco/api/common/people/default_parsers/date_parser.rb
|
259
|
+
- lib/eco/api/common/people/default_parsers/freemium_parser.rb
|
233
260
|
- lib/eco/api/common/people/default_parsers/multi_parser.rb
|
234
261
|
- lib/eco/api/common/people/default_parsers/numeric_parser.rb
|
262
|
+
- lib/eco/api/common/people/default_parsers/policy_groups_parser.rb
|
235
263
|
- lib/eco/api/common/people/default_parsers/select_parser.rb
|
236
264
|
- lib/eco/api/common/people/default_parsers/send_invites_parser.rb
|
237
265
|
- lib/eco/api/common/people/entries.rb
|
@@ -261,6 +289,15 @@ files:
|
|
261
289
|
- lib/eco/api/error.rb
|
262
290
|
- lib/eco/api/error/handler.rb
|
263
291
|
- lib/eco/api/error/handlers.rb
|
292
|
+
- lib/eco/api/microcases.rb
|
293
|
+
- lib/eco/api/microcases/core_excluded.rb
|
294
|
+
- lib/eco/api/microcases/fix_filter_tags.rb
|
295
|
+
- lib/eco/api/microcases/set_account.rb
|
296
|
+
- lib/eco/api/microcases/set_core.rb
|
297
|
+
- lib/eco/api/microcases/set_default_group.rb
|
298
|
+
- lib/eco/api/microcases/set_default_tag.rb
|
299
|
+
- lib/eco/api/microcases/set_supervisor.rb
|
300
|
+
- lib/eco/api/microcases/strict_search.rb
|
264
301
|
- lib/eco/api/organization.rb
|
265
302
|
- lib/eco/api/organization/login_providers.rb
|
266
303
|
- lib/eco/api/organization/people.rb
|
@@ -329,6 +366,10 @@ files:
|
|
329
366
|
- lib/eco/api/usecases/default_cases/update_case.rb
|
330
367
|
- lib/eco/api/usecases/default_cases/update_details_case.rb
|
331
368
|
- lib/eco/api/usecases/default_cases/upsert_case.rb
|
369
|
+
- lib/eco/api/usecases/microed_cases/hris_case.rb
|
370
|
+
- lib/eco/api/usecases/microed_cases/update_case.rb
|
371
|
+
- lib/eco/api/usecases/microed_cases/update_details_case.rb
|
372
|
+
- lib/eco/api/usecases/microed_cases/upsert_case.rb
|
332
373
|
- lib/eco/api/usecases/use_case.rb
|
333
374
|
- lib/eco/api/usecases/use_case_chain.rb
|
334
375
|
- lib/eco/api/usecases/use_case_io.rb
|