rnsap 0.4.1 → 0.4.2
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/preq_release_info/preq_gen_release_info.rb +23 -0
- data/lib/preq_release_info/preq_release_final.rb +55 -0
- data/lib/preq_release_info/preq_release_posted.rb +55 -0
- data/lib/preq_release_info/preq_release_prerequisites.rb +55 -0
- data/lib/{preq_detail/preq_return.rb → return.rb} +1 -1
- data/lib/rnsap.rb +88 -29
- metadata +10 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac1b595002650c1c9c9c09c9b4903b47835f2212b2b8e8283c8ea16f61a67ba7
|
4
|
+
data.tar.gz: 59a6dc350e3ae1ffe4cdbc7c0190c4e4ab3eb0e3d0a43b61ec9b0ec40f1f45d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff0e3f429b4338d3a0668ccea5301c621603b7b480941a0b7bae4a17f3266b8243f7fd685d8a7e9a540f15ba49ebc470bc034ac7a5ecb77c809525aa9c4d2c66
|
7
|
+
data.tar.gz: d78f451e59c5c3522f13c7b4c4e856c9c61352d259ed3c645e194aa31c28628bab041bf08ceca5087b48ff5c8234c6f6c844e2ccd7a2f6595a7af542249254da
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# class used to represent GENERAL_RELEASE_INFO. Used internally
|
2
|
+
class PreqGenReleaseInfo
|
3
|
+
# @return [String] Item number of purchase requisition
|
4
|
+
attr_accessor :preq_item
|
5
|
+
# @return [String] Purchase Requisition Number
|
6
|
+
attr_accessor :preq_no
|
7
|
+
# @return [String] Release code
|
8
|
+
attr_accessor :rel_code
|
9
|
+
# @return [String] Description of release code
|
10
|
+
attr_accessor :rel_cod_tx
|
11
|
+
# @return [String] Release group
|
12
|
+
attr_accessor :rel_group
|
13
|
+
# @return [String] Description of release group
|
14
|
+
attr_accessor :rel_grp_tx
|
15
|
+
# @return [String] Release indicator
|
16
|
+
attr_accessor :rel_ind
|
17
|
+
# @return [String] Description of Release Indicator
|
18
|
+
attr_accessor :rel_ind_tx
|
19
|
+
# @return [String] Release Strategy
|
20
|
+
attr_accessor :rel_strat
|
21
|
+
# @return [String] Description of release strategy
|
22
|
+
attr_accessor :rel_str_tx
|
23
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# class used to represent RELEASE_FINAL. Used internally
|
2
|
+
class PreqReleaseFinal
|
3
|
+
# @return [String] Item number of purchase requisition
|
4
|
+
attr_accessor :preq_item
|
5
|
+
# @return [String] Purchase Requisition Number
|
6
|
+
attr_accessor :preq_no
|
7
|
+
# @return [String] Description of release code 1
|
8
|
+
attr_accessor :rel_cd_tx1
|
9
|
+
# @return [String] Description of release code 2
|
10
|
+
attr_accessor :rel_cd_tx2
|
11
|
+
# @return [String] Description of release code 3
|
12
|
+
attr_accessor :rel_cd_tx3
|
13
|
+
# @return [String] Description of release code 4
|
14
|
+
attr_accessor :rel_cd_tx4
|
15
|
+
# @return [String] Description of release code 5
|
16
|
+
attr_accessor :rel_cd_tx5
|
17
|
+
# @return [String] Description of release code 6
|
18
|
+
attr_accessor :rel_cd_tx6
|
19
|
+
# @return [String] Description of release code 7
|
20
|
+
attr_accessor :rel_cd_tx7
|
21
|
+
# @return [String] Description of release code
|
22
|
+
attr_accessor :rel_cd_tx8
|
23
|
+
# @return [String] Release code 1
|
24
|
+
attr_accessor :rel_code1
|
25
|
+
# @return [String] Release code 2
|
26
|
+
attr_accessor :rel_code2
|
27
|
+
# @return [String] Release code 3
|
28
|
+
attr_accessor :rel_code3
|
29
|
+
# @return [String] Release code 4
|
30
|
+
attr_accessor :rel_code4
|
31
|
+
# @return [String] Release code 5
|
32
|
+
attr_accessor :rel_code5
|
33
|
+
# @return [String] Release code 6
|
34
|
+
attr_accessor :rel_code6
|
35
|
+
# @return [String] Release code 7
|
36
|
+
attr_accessor :rel_code7
|
37
|
+
# @return [String] Release code 8
|
38
|
+
attr_accessor :rel_code8
|
39
|
+
# @return [String] Role resolution for workflow for release code 1
|
40
|
+
attr_accessor :rel_wf1
|
41
|
+
# @return [String] Role resolution for workflow for release code 2
|
42
|
+
attr_accessor :rel_wf2
|
43
|
+
# @return [String] Role resolution for workflow for release code 3
|
44
|
+
attr_accessor :rel_wf3
|
45
|
+
# @return [String] Role resolution for workflow for release code 4
|
46
|
+
attr_accessor :rel_wf4
|
47
|
+
# @return [String] Role resolution for workflow for release code 5
|
48
|
+
attr_accessor :rel_wf5
|
49
|
+
# @return [String] Role resolution for workflow for release code 6
|
50
|
+
attr_accessor :rel_wf6
|
51
|
+
# @return [String] Role resolution for workflow for release code 7
|
52
|
+
attr_accessor :rel_wf7
|
53
|
+
# @return [String] Role resolution for workflow for release code 8
|
54
|
+
attr_accessor :rel_wf8
|
55
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# class used to represent RELEASE_ALREADY_POSTED. Used internally
|
2
|
+
class PreqReleasePosted
|
3
|
+
# @return [String] Item number of purchase requisition
|
4
|
+
attr_accessor :preq_item
|
5
|
+
# @return [String] Purchase Requisition Number
|
6
|
+
attr_accessor :preq_no
|
7
|
+
# @return [String] Description of release code 1
|
8
|
+
attr_accessor :rel_cd_tx1
|
9
|
+
# @return [String] Description of release code 2
|
10
|
+
attr_accessor :rel_cd_tx2
|
11
|
+
# @return [String] Description of release code 3
|
12
|
+
attr_accessor :rel_cd_tx3
|
13
|
+
# @return [String] Description of release code 4
|
14
|
+
attr_accessor :rel_cd_tx4
|
15
|
+
# @return [String] Description of release code 5
|
16
|
+
attr_accessor :rel_cd_tx5
|
17
|
+
# @return [String] Description of release code 6
|
18
|
+
attr_accessor :rel_cd_tx6
|
19
|
+
# @return [String] Description of release code 7
|
20
|
+
attr_accessor :rel_cd_tx7
|
21
|
+
# @return [String] Description of release code
|
22
|
+
attr_accessor :rel_cd_tx8
|
23
|
+
# @return [String] Release code 1
|
24
|
+
attr_accessor :rel_code1
|
25
|
+
# @return [String] Release code 2
|
26
|
+
attr_accessor :rel_code2
|
27
|
+
# @return [String] Release code 3
|
28
|
+
attr_accessor :rel_code3
|
29
|
+
# @return [String] Release code 4
|
30
|
+
attr_accessor :rel_code4
|
31
|
+
# @return [String] Release code 5
|
32
|
+
attr_accessor :rel_code5
|
33
|
+
# @return [String] Release code 6
|
34
|
+
attr_accessor :rel_code6
|
35
|
+
# @return [String] Release code 7
|
36
|
+
attr_accessor :rel_code7
|
37
|
+
# @return [String] Release code 8
|
38
|
+
attr_accessor :rel_code8
|
39
|
+
# @return [String] Role resolution for workflow for release code 1
|
40
|
+
attr_accessor :rel_wf1
|
41
|
+
# @return [String] Role resolution for workflow for release code 2
|
42
|
+
attr_accessor :rel_wf2
|
43
|
+
# @return [String] Role resolution for workflow for release code 3
|
44
|
+
attr_accessor :rel_wf3
|
45
|
+
# @return [String] Role resolution for workflow for release code 4
|
46
|
+
attr_accessor :rel_wf4
|
47
|
+
# @return [String] Role resolution for workflow for release code 5
|
48
|
+
attr_accessor :rel_wf5
|
49
|
+
# @return [String] Role resolution for workflow for release code 6
|
50
|
+
attr_accessor :rel_wf6
|
51
|
+
# @return [String] Role resolution for workflow for release code 7
|
52
|
+
attr_accessor :rel_wf7
|
53
|
+
# @return [String] Role resolution for workflow for release code 8
|
54
|
+
attr_accessor :rel_wf8
|
55
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# class used to represent RELEASE_PREREQUISITES. Used internally
|
2
|
+
class PreqReleasePrerequisites
|
3
|
+
# @return [String] Item number of purchase requisition
|
4
|
+
attr_accessor :preq_item
|
5
|
+
# @return [String] Purchase Requisition Number
|
6
|
+
attr_accessor :preq_no
|
7
|
+
# @return [String] Description of release code 1
|
8
|
+
attr_accessor :rel_cd_tx1
|
9
|
+
# @return [String] Description of release code 2
|
10
|
+
attr_accessor :rel_cd_tx2
|
11
|
+
# @return [String] Description of release code 3
|
12
|
+
attr_accessor :rel_cd_tx3
|
13
|
+
# @return [String] Description of release code 4
|
14
|
+
attr_accessor :rel_cd_tx4
|
15
|
+
# @return [String] Description of release code 5
|
16
|
+
attr_accessor :rel_cd_tx5
|
17
|
+
# @return [String] Description of release code 6
|
18
|
+
attr_accessor :rel_cd_tx6
|
19
|
+
# @return [String] Description of release code 7
|
20
|
+
attr_accessor :rel_cd_tx7
|
21
|
+
# @return [String] Description of release code
|
22
|
+
attr_accessor :rel_cd_tx8
|
23
|
+
# @return [String] Release code 1
|
24
|
+
attr_accessor :rel_code1
|
25
|
+
# @return [String] Release code 2
|
26
|
+
attr_accessor :rel_code2
|
27
|
+
# @return [String] Release code 3
|
28
|
+
attr_accessor :rel_code3
|
29
|
+
# @return [String] Release code 4
|
30
|
+
attr_accessor :rel_code4
|
31
|
+
# @return [String] Release code 5
|
32
|
+
attr_accessor :rel_code5
|
33
|
+
# @return [String] Release code 6
|
34
|
+
attr_accessor :rel_code6
|
35
|
+
# @return [String] Release code 7
|
36
|
+
attr_accessor :rel_code7
|
37
|
+
# @return [String] Release code 8
|
38
|
+
attr_accessor :rel_code8
|
39
|
+
# @return [String] Role resolution for workflow for release code 1
|
40
|
+
attr_accessor :rel_wf1
|
41
|
+
# @return [String] Role resolution for workflow for release code 2
|
42
|
+
attr_accessor :rel_wf2
|
43
|
+
# @return [String] Role resolution for workflow for release code 3
|
44
|
+
attr_accessor :rel_wf3
|
45
|
+
# @return [String] Role resolution for workflow for release code 4
|
46
|
+
attr_accessor :rel_wf4
|
47
|
+
# @return [String] Role resolution for workflow for release code 5
|
48
|
+
attr_accessor :rel_wf5
|
49
|
+
# @return [String] Role resolution for workflow for release code 6
|
50
|
+
attr_accessor :rel_wf6
|
51
|
+
# @return [String] Role resolution for workflow for release code 7
|
52
|
+
attr_accessor :rel_wf7
|
53
|
+
# @return [String] Role resolution for workflow for release code 8
|
54
|
+
attr_accessor :rel_wf8
|
55
|
+
end
|
data/lib/rnsap.rb
CHANGED
@@ -10,7 +10,11 @@ require 'preq_detail/preq_contract_limits'
|
|
10
10
|
require 'preq_detail/preq_services'
|
11
11
|
require 'preq_detail/preq_services_texts'
|
12
12
|
require 'preq_detail/preq_srv_accass_values'
|
13
|
-
require '
|
13
|
+
require 'preq_release_info/preq_gen_release_info'
|
14
|
+
require 'preq_release_info/preq_release_prerequisites'
|
15
|
+
require 'preq_release_info/preq_release_posted'
|
16
|
+
require 'preq_release_info/preq_release_final'
|
17
|
+
require 'return'
|
14
18
|
require 'helper/rfc_helper'
|
15
19
|
|
16
20
|
include NWRFC
|
@@ -41,6 +45,38 @@ module RnSap
|
|
41
45
|
conn.disconnect
|
42
46
|
end
|
43
47
|
|
48
|
+
def commit()
|
49
|
+
#-- Execute BAPI_TRANSACTION_COMMIT
|
50
|
+
fn_commit = @conn.get_function('BAPI_REQUISITION_RELEASE')
|
51
|
+
fn_commit = fn_commit.get_function_call
|
52
|
+
fn_commit[:NUMBER] = preq
|
53
|
+
fn_commit[:REL_CODE] = rel_code
|
54
|
+
fn_commit[:ITEM] = item
|
55
|
+
fn_commit[:USE_EXCEPTIONS] = use_exeptions
|
56
|
+
fn_commit[:NO_COMMIT_WORK] = no_commit
|
57
|
+
fn_commit.invoke
|
58
|
+
tb_return = get_object_list(fn_commit[:RETURN], Return.to_s)
|
59
|
+
{
|
60
|
+
tb_return: tb_return,
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
def rollback()
|
65
|
+
#-- Execute BAPI_TRANSACTION_ROLLBACK
|
66
|
+
fn_rollback = @conn.get_function('BAPI_REQUISITION_RELEASE')
|
67
|
+
fn_rollback = fn_rollback.get_function_call
|
68
|
+
fn_rollback[:NUMBER] = preq
|
69
|
+
fn_rollback[:REL_CODE] = rel_code
|
70
|
+
fn_rollback[:ITEM] = item
|
71
|
+
fn_rollback[:USE_EXCEPTIONS] = use_exeptions
|
72
|
+
fn_rollback[:NO_COMMIT_WORK] = no_commit
|
73
|
+
fn_rollback.invoke
|
74
|
+
tb_return = get_object_list(fn_rollback[:RETURN], Return.to_s)
|
75
|
+
{
|
76
|
+
tb_return: tb_return,
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
44
80
|
# Invokes SAP RFC_READ_TABLE function module remotely, passing
|
45
81
|
# the table to be read and receiving back a list of objects of that
|
46
82
|
# table.
|
@@ -124,7 +160,7 @@ module RnSap
|
|
124
160
|
fields_down.each do |field|
|
125
161
|
column = columns_hash[field.upcase]
|
126
162
|
value = wa[column.offset.to_i, column.length.to_i]
|
127
|
-
eval("obj.#{field} = '#{value}'")
|
163
|
+
eval("obj.#{field} = '#{value.strip}'")
|
128
164
|
end
|
129
165
|
list << obj
|
130
166
|
end
|
@@ -154,7 +190,7 @@ module RnSap
|
|
154
190
|
preq_services = get_object_list(fc_preq_detail[:REQUISITION_SERVICES], PreqItem.to_s)
|
155
191
|
preq_services_texts = get_object_list(fc_preq_detail[:REQUISITION_SERVICES_TEXTS], PreqServicesText.to_s)
|
156
192
|
preq_srv_accass_values = get_object_list(fc_preq_detail[:REQUISITION_SRV_ACCASS_VALUES], PreqServicesAccassValues.to_s)
|
157
|
-
|
193
|
+
tb_return = get_object_list(fc_preq_detail[:RETURN], Return.to_s)
|
158
194
|
|
159
195
|
{
|
160
196
|
preq_items: preq_items,
|
@@ -165,12 +201,58 @@ module RnSap
|
|
165
201
|
preq_services: preq_services,
|
166
202
|
preq_services_texts: preq_services_texts,
|
167
203
|
preq_srv_accass_values: preq_srv_accass_values,
|
168
|
-
|
204
|
+
tb_return: tb_return,
|
169
205
|
}
|
170
206
|
end
|
171
207
|
|
172
|
-
def preq_release_strategy_info(
|
173
|
-
|
208
|
+
def preq_release_strategy_info(preq = 0, item = "00000", rel_code = "")
|
209
|
+
#-- Execute BAPI_REQUISITION_GETRELINFO
|
210
|
+
fn_preq_rel_strat_info = @conn.get_function('BAPI_REQUISITION_GETRELINFO')
|
211
|
+
fn_preq_rel_strat_info = fn_preq_rel_strat_info.get_function_call
|
212
|
+
|
213
|
+
fn_preq_rel_strat_info[:NUMBER] = preq
|
214
|
+
fn_preq_rel_strat_info[:ITEM] = item
|
215
|
+
fn_preq_rel_strat_info[:REL_CODE] = rel_code
|
216
|
+
|
217
|
+
fn_preq_rel_strat_info.invoke
|
218
|
+
|
219
|
+
#-- Execute conversions for returned tables to a designated list (array)
|
220
|
+
preq_gen_release_info = get_object_list(fn_preq_rel_strat_info[:GENERAL_RELEASE_INFO], PreqGenReleaseInfo.to_s)
|
221
|
+
preq_release_prerequisites = get_object_list(fn_preq_rel_strat_info[:RELEASE_PREREQUISITES], PreqReleasePrerequisites.to_s)
|
222
|
+
preq_release_posted = get_object_list(fn_preq_rel_strat_info[:RELEASE_ALREADY_POSTED], PreqReleasePosted.to_s)
|
223
|
+
preq_release_final = get_object_list(fn_preq_rel_strat_info[:RELEASE_FINAL], PreqReleaseFinal.to_s)
|
224
|
+
tb_return = get_object_list(fn_preq_rel_strat_info[:RETURN], Return.to_s)
|
225
|
+
|
226
|
+
{
|
227
|
+
preq_gen_release_info: preq_gen_release_info,
|
228
|
+
preq_release_prerequisites: preq_release_prerequisites,
|
229
|
+
preq_release_posted: preq_release_posted,
|
230
|
+
preq_release_final: preq_release_final,
|
231
|
+
tb_return: tb_return,
|
232
|
+
}
|
233
|
+
|
234
|
+
end
|
235
|
+
|
236
|
+
def preq_release(preq = 0, rel_code = "", no_commit="", item="0000", use_exeptions="X")
|
237
|
+
#Validate if will release by item ou general
|
238
|
+
if item = "0000" or item = nil or item.empty?
|
239
|
+
#-- Execute BAPI_REQUISITION_RELEASE_GEN
|
240
|
+
fn_preq_exec_release = @conn.get_function('BAPI_REQUISITION_RELEASE_GEN')
|
241
|
+
else
|
242
|
+
#-- Execute BAPI_REQUISITION_RELEASE
|
243
|
+
fn_preq_exec_release = @conn.get_function('BAPI_REQUISITION_RELEASE')
|
244
|
+
fn_preq_exec_release[:ITEM] = item
|
245
|
+
fn_preq_exec_release[:USE_EXCEPTIONS] = use_exeptions
|
246
|
+
end
|
247
|
+
fn_preq_exec_release = fn_preq_exec_release.get_function_call
|
248
|
+
fn_preq_exec_release[:NUMBER] = preq
|
249
|
+
fn_preq_exec_release[:REL_CODE] = rel_code
|
250
|
+
fn_preq_exec_release[:NO_COMMIT_WORK] = no_commit
|
251
|
+
fn_preq_exec_release.invoke
|
252
|
+
tb_return = get_object_list(fn_preq_exec_release[:RETURN], Return.to_s)
|
253
|
+
{
|
254
|
+
tb_return: tb_return,
|
255
|
+
}
|
174
256
|
end
|
175
257
|
|
176
258
|
def po_detail(po = 0)
|
@@ -185,29 +267,6 @@ module RnSap
|
|
185
267
|
|
186
268
|
attr_writer :conn
|
187
269
|
|
188
|
-
# def get_object_list(table, klass_name)
|
189
|
-
# list = []
|
190
|
-
# avoid_list = ['!','__','+', '=','!', '?','~','>', '<']
|
191
|
-
# table.each do |row|
|
192
|
-
# byebug
|
193
|
-
# obj = eval("#{klass_name}.new")
|
194
|
-
# obj.class.instance_methods.each do |method_name|
|
195
|
-
# begin
|
196
|
-
# if obj.respond_to?("#{method_name}=")
|
197
|
-
# unless avoid_list.any? { |word| method_name.to_s.include?(word)}
|
198
|
-
# value = row[method_name]
|
199
|
-
# eval("obj.#{method_name} = '#{value}'")
|
200
|
-
# end
|
201
|
-
# end
|
202
|
-
# rescue
|
203
|
-
# end
|
204
|
-
# end
|
205
|
-
# list.push(obj)
|
206
|
-
# end
|
207
|
-
|
208
|
-
# list
|
209
|
-
# end
|
210
|
-
|
211
270
|
# Dumps to the output the content of an object
|
212
271
|
def dump_instance_variables(obj)
|
213
272
|
puts "Class: #{obj.class} -> #{obj}"
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rnsap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rogerio Nascimento
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2020-04-30 00:00:00.000000000 Z
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
version: '0'
|
41
41
|
description: By encapsulating SAPs NW RFC library calls, Ruby routines can access
|
42
42
|
SAP power in a simpler manner
|
43
|
-
email:
|
43
|
+
email:
|
44
44
|
executables: []
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
@@ -50,19 +50,23 @@ files:
|
|
50
50
|
- lib/preq_detail/preq_contract_limits.rb
|
51
51
|
- lib/preq_detail/preq_item.rb
|
52
52
|
- lib/preq_detail/preq_limits.rb
|
53
|
-
- lib/preq_detail/preq_return.rb
|
54
53
|
- lib/preq_detail/preq_services.rb
|
55
54
|
- lib/preq_detail/preq_services_texts.rb
|
56
55
|
- lib/preq_detail/preq_srv_accass_values.rb
|
57
56
|
- lib/preq_detail/preq_text.rb
|
57
|
+
- lib/preq_release_info/preq_gen_release_info.rb
|
58
|
+
- lib/preq_release_info/preq_release_final.rb
|
59
|
+
- lib/preq_release_info/preq_release_posted.rb
|
60
|
+
- lib/preq_release_info/preq_release_prerequisites.rb
|
58
61
|
- lib/read_table/table_column.rb
|
62
|
+
- lib/return.rb
|
59
63
|
- lib/rnsap.rb
|
60
64
|
homepage: https://github.com/rnasc/rnsap
|
61
65
|
licenses:
|
62
66
|
- MIT
|
63
67
|
metadata:
|
64
68
|
source_code_uri: https://github.com/rnasc/rnsap
|
65
|
-
post_install_message:
|
69
|
+
post_install_message:
|
66
70
|
rdoc_options: []
|
67
71
|
require_paths:
|
68
72
|
- lib
|
@@ -78,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
82
|
version: '0'
|
79
83
|
requirements: []
|
80
84
|
rubygems_version: 3.2.3
|
81
|
-
signing_key:
|
85
|
+
signing_key:
|
82
86
|
specification_version: 4
|
83
87
|
summary: Facilitates SAP RFC calls in Ruby
|
84
88
|
test_files: []
|