kuali_toolbox 0.49 → 0.51.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 +5 -5
- data/bin/transform_CSV_to_HR_XML +32 -20
- data/kuali_toolbox.gemspec +12 -10
- data/lib/kuali_toolbox/etl/grm.rb +3 -3
- data/lib/kuali_toolbox/etl.rb +16 -3
- data/lib/kuali_toolbox/version.rb +1 -1
- data/mise.toml +2 -0
- data/spec/kuali_toolbox/etl/grm_spec.rb +4 -4
- data/spec/spec_helper.rb +4 -8
- metadata +51 -27
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 9458413407ad5eb3f203f030b465881d0bf52d4157064d74aa54c0385763aa32
|
|
4
|
+
data.tar.gz: f5180960e0f2e867a46ab33acf3a54c9bd01e0c3f62f41049db0dfb510f2aee4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0e117bcf36e666f77b164fd65c8edcdd77f92c81ced9d24fe848256a08ed27d8195f26a7bb824a99648e4fd7d16b556c78d36f547df1e125623d6df9787ff585
|
|
7
|
+
data.tar.gz: f1ec91d8141913808e34d4c85ea4a784c11b64d6af2c57166888a079a434862066a6ccae13884e6be4f697e1822dba7c01e2c67fd06a8cba7a515f30b71a6ff0
|
data/bin/transform_CSV_to_HR_XML
CHANGED
|
@@ -6,32 +6,36 @@ require 'bundler/setup'
|
|
|
6
6
|
require 'builder'
|
|
7
7
|
require 'csv'
|
|
8
8
|
require 'optparse'
|
|
9
|
-
require 'rest_client'
|
|
10
9
|
require 'time'
|
|
11
10
|
require 'kuali_toolbox/etl/grm'
|
|
11
|
+
require 'faraday'
|
|
12
|
+
require 'faraday/multipart'
|
|
12
13
|
|
|
13
14
|
ETL = KualiCo::ETL
|
|
14
15
|
GRM = KualiCo::ETL::GRM
|
|
15
16
|
TextParseError = KualiCo::ETL::TextParseError
|
|
16
17
|
|
|
17
18
|
def self.parse_command_line_options(
|
|
18
|
-
executable, args, opt={
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
executable, args, opt={})
|
|
20
|
+
|
|
21
|
+
csv_options = {
|
|
22
|
+
headers: :first_row,
|
|
23
|
+
header_converters: :symbol,
|
|
24
|
+
skip_blanks: true,
|
|
25
|
+
col_sep: ",", # comma by default
|
|
26
|
+
quote_char: '"', # double quote by default
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
optparse = OptionParser.new do |opts|
|
|
26
30
|
opts.banner = "Usage: #{executable} [options] csv_file"
|
|
27
31
|
opts.on( '-o [xml_file_output]' ,'--output [xml_file_output]', 'The file in which the the XML data will be writen (defaults to <csv_file>.xml)') do |f|
|
|
28
32
|
opt[:xml_filename] = f
|
|
29
33
|
end
|
|
30
34
|
opts.on( '-s [separator_character]' ,'--separator [separator_character]', 'The character that separates each column of the CSV file.' ) do |s|
|
|
31
|
-
|
|
35
|
+
csv_options[:col_sep] = s
|
|
32
36
|
end
|
|
33
37
|
opts.on( '-q [quote_character]' ,'--quote [quote_character]', 'The character used to quote fields.' ) do |q|
|
|
34
|
-
|
|
38
|
+
csv_options[:quote_char] = q
|
|
35
39
|
end
|
|
36
40
|
opts.on( '-e [email_recipients]', '--email [email_recipients]', 'Email recipient list that will receive job report status.' ) do |e|
|
|
37
41
|
opt[:email_recipients] = e
|
|
@@ -53,13 +57,15 @@ def self.parse_command_line_options(
|
|
|
53
57
|
exit 1
|
|
54
58
|
end
|
|
55
59
|
|
|
56
|
-
opt[:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
opt[:csv_options] = csv_options
|
|
61
|
+
end
|
|
62
|
+
optparse.parse!(args)
|
|
63
|
+
|
|
64
|
+
opt[:csv_filename] = args[0]
|
|
65
|
+
if opt[:csv_filename].nil? || opt[:csv_filename].empty?
|
|
66
|
+
puts optparse
|
|
67
|
+
exit 1
|
|
61
68
|
end
|
|
62
|
-
optparse.parse!
|
|
63
69
|
|
|
64
70
|
# construct a sensible default ouptput filename
|
|
65
71
|
unless opt[:xml_filename]
|
|
@@ -317,7 +323,7 @@ opt = parse_command_line_options (File.basename $0), ARGF.argv
|
|
|
317
323
|
text_parse_errors = []
|
|
318
324
|
|
|
319
325
|
recordsByPrincipalId = {}
|
|
320
|
-
CSV.open(opt[:csv_filename], opt[:csv_options]) do |csv|
|
|
326
|
+
CSV.open(opt[:csv_filename], **opt[:csv_options]) do |csv|
|
|
321
327
|
record_count = csv.readlines.count
|
|
322
328
|
csv.rewind # go back to first row
|
|
323
329
|
csv.find_all do |row|
|
|
@@ -469,7 +475,13 @@ exit 1 unless GRM.validate_hr_xml opt[:xml_filename]
|
|
|
469
475
|
|
|
470
476
|
# POST the XML file to the server if opt[:url]
|
|
471
477
|
if opt[:url]
|
|
472
|
-
|
|
473
|
-
|
|
478
|
+
conn = Faraday.new(url: opt[:url]) do |f|
|
|
479
|
+
f.request :multipart
|
|
480
|
+
f.request :authorization, :basic, opt[:username], opt[:password]
|
|
481
|
+
f.adapter Faraday.default_adapter
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
payload = { file: Faraday::UploadIO.new(opt[:xml_filename], 'text/xml') }
|
|
485
|
+
response = conn.post('', payload)
|
|
474
486
|
puts "\n"
|
|
475
487
|
end
|
data/kuali_toolbox.gemspec
CHANGED
|
@@ -35,14 +35,16 @@ Gem::Specification.new do |spec|
|
|
|
35
35
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
36
36
|
spec.require_paths = ["lib"]
|
|
37
37
|
|
|
38
|
-
spec.add_runtime_dependency 'builder', '~> 3.2.
|
|
39
|
-
spec.add_runtime_dependency 'nokogiri', '~> 1.
|
|
40
|
-
spec.add_runtime_dependency '
|
|
41
|
-
|
|
42
|
-
spec.
|
|
43
|
-
|
|
44
|
-
spec.
|
|
45
|
-
spec.add_development_dependency "
|
|
46
|
-
|
|
47
|
-
spec.add_development_dependency "
|
|
38
|
+
spec.add_runtime_dependency 'builder', '~> 3.2.4'
|
|
39
|
+
spec.add_runtime_dependency 'nokogiri', '~> 1.16.2'
|
|
40
|
+
spec.add_runtime_dependency 'faraday', '~> 2.9.0'
|
|
41
|
+
spec.add_runtime_dependency 'faraday-multipart', '~> 1.0'
|
|
42
|
+
spec.add_runtime_dependency 'csv', '~> 3.2'
|
|
43
|
+
|
|
44
|
+
spec.required_ruby_version = '>= 3.3.0'
|
|
45
|
+
spec.add_development_dependency "bundler", "~> 2.5"
|
|
46
|
+
spec.add_development_dependency "rake", "~> 13.1"
|
|
47
|
+
spec.add_development_dependency "rspec", "~> 3.13"
|
|
48
|
+
spec.add_development_dependency "simplecov", "~> 0.22.0"
|
|
49
|
+
# spec.add_development_dependency "codeclimate-test-reporter"
|
|
48
50
|
end
|
|
@@ -309,11 +309,11 @@ module KualiCo::ETL::GRM
|
|
|
309
309
|
# @return [String] the parsed <tt>CITIZENSHIP_TYPE_CODE</tt>.
|
|
310
310
|
# @raise [TextParseError] if the <tt>CITIZENSHIP_TYPE_CODE</tt> is not valid.
|
|
311
311
|
# @see parse_string
|
|
312
|
-
def self.parse_citizenship_type(str, opt={ name: 'CITIZENSHIP_TYPE_CODE', length: 3, valid_values: /^([1-9][0-9]{0,2})$/ })
|
|
312
|
+
def self.parse_citizenship_type(str, opt={ name: 'CITIZENSHIP_TYPE_CODE', length: 3, valid_values: /^([1-9][0-9]{0,2})$/ })
|
|
313
313
|
opt[:name] = "CITIZENSHIP_TYPE_CODE" if opt[:name].nil?
|
|
314
|
+
opt[:length] = 3 if opt[:length].nil?
|
|
314
315
|
opt[:valid_values] = /^([1-9][0-9]{0,2})$/ if opt[:valid_values].nil?
|
|
315
|
-
opt[:
|
|
316
|
-
opt[:default] = 1
|
|
316
|
+
opt[:default] = "1" if opt[:default].nil?
|
|
317
317
|
return KualiCo::ETL::parse_flag str, opt
|
|
318
318
|
end
|
|
319
319
|
|
data/lib/kuali_toolbox/etl.rb
CHANGED
|
@@ -38,6 +38,14 @@ module KualiCo::ETL
|
|
|
38
38
|
raise ArgumentError, "Unsupported error type: #{e.class}"
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
+
# Escapes single quotes in a string for use in SQL statements
|
|
42
|
+
# @param [String] str the string to escape
|
|
43
|
+
# @return [String, nil] the escaped string, or nil if input is nil
|
|
44
|
+
def self.escape_single_quotes(str)
|
|
45
|
+
return nil if str.nil?
|
|
46
|
+
str.to_s.gsub("'", "\\\\'")
|
|
47
|
+
end
|
|
48
|
+
|
|
41
49
|
# Prepares an Exception for consistent warning handling.
|
|
42
50
|
# @param [String, Exception] e the warning to handle
|
|
43
51
|
# @return [Exception] an Exception with a message formatted with $INPUT_LINE_NUMBER.
|
|
@@ -180,7 +188,7 @@ module KualiCo::ETL
|
|
|
180
188
|
if opt[:valid_values] && ! valid_value(retval, opt[:valid_values], opt)
|
|
181
189
|
raise KualiCo::ETL::error TextParseError.new "Illegal #{opt[:name]}: value '#{str}' not found in: #{opt[:valid_values]}"
|
|
182
190
|
end
|
|
183
|
-
return retval
|
|
191
|
+
return escape_single_quotes(retval)
|
|
184
192
|
end
|
|
185
193
|
|
|
186
194
|
# Helper method which finds the value by column :name and mutates the SQL statement accordingly.
|
|
@@ -374,14 +382,19 @@ module KualiCo::ETL
|
|
|
374
382
|
puts opts
|
|
375
383
|
exit 1
|
|
376
384
|
end
|
|
385
|
+
end
|
|
377
386
|
|
|
387
|
+
begin
|
|
388
|
+
optparse.parse!(args)
|
|
378
389
|
opt[:csv_filename] = args[0] unless opt[:csv_filename]
|
|
379
390
|
if opt[:csv_filename].nil? || opt[:csv_filename].empty?
|
|
380
|
-
puts
|
|
391
|
+
puts optparse
|
|
381
392
|
exit 1
|
|
382
393
|
end
|
|
394
|
+
rescue OptionParser::InvalidOption => e
|
|
395
|
+
puts optparse
|
|
396
|
+
exit 1
|
|
383
397
|
end
|
|
384
|
-
optparse.parse!
|
|
385
398
|
|
|
386
399
|
# construct a sensible default ouptput filename
|
|
387
400
|
unless opt[:sql_filename]
|
data/mise.toml
ADDED
|
@@ -572,7 +572,7 @@ RSpec.describe "KualiCo::ETL::GRM" do
|
|
|
572
572
|
end
|
|
573
573
|
|
|
574
574
|
describe "#parse_citizenship_type" do
|
|
575
|
-
valid_values = ['1', '2', '3', '4']
|
|
575
|
+
valid_values = ['1', '2', '3', '4', '22', '123', '999']
|
|
576
576
|
|
|
577
577
|
it "parses a citizenship_type from a String" do
|
|
578
578
|
valid_values.each do |valid_value|
|
|
@@ -582,7 +582,7 @@ RSpec.describe "KualiCo::ETL::GRM" do
|
|
|
582
582
|
|
|
583
583
|
it "raises an TextParseError if the citizenship_type is not a valid value" do
|
|
584
584
|
expect { GRM.parse_citizenship_type("0") }.to raise_error(TextParseError)
|
|
585
|
-
expect { GRM.parse_citizenship_type("
|
|
585
|
+
expect { GRM.parse_citizenship_type("1000") }.to raise_error(TextParseError)
|
|
586
586
|
expect { GRM.parse_citizenship_type("Z") }.to raise_error(TextParseError)
|
|
587
587
|
end
|
|
588
588
|
|
|
@@ -591,8 +591,8 @@ RSpec.describe "KualiCo::ETL::GRM" do
|
|
|
591
591
|
expect(GRM.parse_citizenship_type("")).to eq("1")
|
|
592
592
|
end
|
|
593
593
|
|
|
594
|
-
it "raises an TextParseError if length exceeds
|
|
595
|
-
expect { GRM.parse_citizenship_type("
|
|
594
|
+
it "raises an TextParseError if length exceeds 3 characters" do
|
|
595
|
+
expect { GRM.parse_citizenship_type("1234") }.to raise_error(TextParseError)
|
|
596
596
|
end
|
|
597
597
|
end
|
|
598
598
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -14,8 +14,10 @@
|
|
|
14
14
|
# You should have received a copy of the GNU Affero General Public License
|
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
require 'simplecov'
|
|
18
|
+
SimpleCov.start do
|
|
19
|
+
add_filter "/spec/"
|
|
20
|
+
end
|
|
19
21
|
|
|
20
22
|
RSpec.configure do |config|
|
|
21
23
|
# capture original references for later
|
|
@@ -34,9 +36,3 @@ RSpec.configure do |config|
|
|
|
34
36
|
$stdout = original_stdout
|
|
35
37
|
end
|
|
36
38
|
end
|
|
37
|
-
|
|
38
|
-
# SimpleCov.start do
|
|
39
|
-
# add_filter "/spec"
|
|
40
|
-
# end
|
|
41
|
-
|
|
42
|
-
CodeClimate::TestReporter.start
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kuali_toolbox
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 0.51.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- KualiCo
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 2026-02-24 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: builder
|
|
@@ -16,99 +15,126 @@ dependencies:
|
|
|
16
15
|
requirements:
|
|
17
16
|
- - "~>"
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 3.2.
|
|
18
|
+
version: 3.2.4
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - "~>"
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 3.2.
|
|
25
|
+
version: 3.2.4
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
27
|
name: nokogiri
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
30
29
|
requirements:
|
|
31
30
|
- - "~>"
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 1.
|
|
32
|
+
version: 1.16.2
|
|
34
33
|
type: :runtime
|
|
35
34
|
prerelease: false
|
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
36
|
requirements:
|
|
38
37
|
- - "~>"
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 1.
|
|
39
|
+
version: 1.16.2
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
41
|
+
name: faraday
|
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
|
44
43
|
requirements:
|
|
45
44
|
- - "~>"
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
46
|
+
version: 2.9.0
|
|
48
47
|
type: :runtime
|
|
49
48
|
prerelease: false
|
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
50
|
requirements:
|
|
52
51
|
- - "~>"
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
53
|
+
version: 2.9.0
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: faraday-multipart
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '1.0'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '1.0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: csv
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '3.2'
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '3.2'
|
|
55
82
|
- !ruby/object:Gem::Dependency
|
|
56
83
|
name: bundler
|
|
57
84
|
requirement: !ruby/object:Gem::Requirement
|
|
58
85
|
requirements:
|
|
59
86
|
- - "~>"
|
|
60
87
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
88
|
+
version: '2.5'
|
|
62
89
|
type: :development
|
|
63
90
|
prerelease: false
|
|
64
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
92
|
requirements:
|
|
66
93
|
- - "~>"
|
|
67
94
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
95
|
+
version: '2.5'
|
|
69
96
|
- !ruby/object:Gem::Dependency
|
|
70
97
|
name: rake
|
|
71
98
|
requirement: !ruby/object:Gem::Requirement
|
|
72
99
|
requirements:
|
|
73
100
|
- - "~>"
|
|
74
101
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '
|
|
102
|
+
version: '13.1'
|
|
76
103
|
type: :development
|
|
77
104
|
prerelease: false
|
|
78
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
106
|
requirements:
|
|
80
107
|
- - "~>"
|
|
81
108
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
109
|
+
version: '13.1'
|
|
83
110
|
- !ruby/object:Gem::Dependency
|
|
84
111
|
name: rspec
|
|
85
112
|
requirement: !ruby/object:Gem::Requirement
|
|
86
113
|
requirements:
|
|
87
114
|
- - "~>"
|
|
88
115
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: 3.
|
|
116
|
+
version: '3.13'
|
|
90
117
|
type: :development
|
|
91
118
|
prerelease: false
|
|
92
119
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
120
|
requirements:
|
|
94
121
|
- - "~>"
|
|
95
122
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: 3.
|
|
123
|
+
version: '3.13'
|
|
97
124
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
125
|
+
name: simplecov
|
|
99
126
|
requirement: !ruby/object:Gem::Requirement
|
|
100
127
|
requirements:
|
|
101
|
-
- - "
|
|
128
|
+
- - "~>"
|
|
102
129
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
130
|
+
version: 0.22.0
|
|
104
131
|
type: :development
|
|
105
132
|
prerelease: false
|
|
106
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
134
|
requirements:
|
|
108
|
-
- - "
|
|
135
|
+
- - "~>"
|
|
109
136
|
- !ruby/object:Gem::Version
|
|
110
|
-
version:
|
|
111
|
-
description:
|
|
137
|
+
version: 0.22.0
|
|
112
138
|
email:
|
|
113
139
|
- dpace@kuali.co
|
|
114
140
|
executables:
|
|
@@ -131,6 +157,7 @@ files:
|
|
|
131
157
|
- lib/kuali_toolbox/etl.rb
|
|
132
158
|
- lib/kuali_toolbox/etl/grm.rb
|
|
133
159
|
- lib/kuali_toolbox/version.rb
|
|
160
|
+
- mise.toml
|
|
134
161
|
- spec/kuali_toolbox/etl/grm_spec.rb
|
|
135
162
|
- spec/kuali_toolbox/etl_spec.rb
|
|
136
163
|
- spec/kuali_toolbox_spec.rb
|
|
@@ -140,7 +167,6 @@ licenses:
|
|
|
140
167
|
- AGPL-3.0
|
|
141
168
|
metadata:
|
|
142
169
|
issue_tracker: https://github.com/KualiCo/kuali_toolbox/issues
|
|
143
|
-
post_install_message:
|
|
144
170
|
rdoc_options: []
|
|
145
171
|
require_paths:
|
|
146
172
|
- lib
|
|
@@ -148,16 +174,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
148
174
|
requirements:
|
|
149
175
|
- - ">="
|
|
150
176
|
- !ruby/object:Gem::Version
|
|
151
|
-
version:
|
|
177
|
+
version: 3.3.0
|
|
152
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
153
179
|
requirements:
|
|
154
180
|
- - ">="
|
|
155
181
|
- !ruby/object:Gem::Version
|
|
156
182
|
version: '0'
|
|
157
183
|
requirements: []
|
|
158
|
-
|
|
159
|
-
rubygems_version: 2.6.13
|
|
160
|
-
signing_key:
|
|
184
|
+
rubygems_version: 3.6.3
|
|
161
185
|
specification_version: 4
|
|
162
186
|
summary: Client library and command-line tools to help interact with KualiCo's cloud
|
|
163
187
|
APIs.
|