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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e0093d75500dbc996f01bafd6d3e9c8ae734937f
4
- data.tar.gz: 0a90308846fddca2ea671e4bc9ba58a5781e196a
2
+ SHA256:
3
+ metadata.gz: 9458413407ad5eb3f203f030b465881d0bf52d4157064d74aa54c0385763aa32
4
+ data.tar.gz: f5180960e0f2e867a46ab33acf3a54c9bd01e0c3f62f41049db0dfb510f2aee4
5
5
  SHA512:
6
- metadata.gz: 701e9bf3011ace38d9cce620494085dff791aff2b9bb6b3228252366ed1a1cd6e1d7e98308847d1f31d310649f595a9b66d5b57c7915c63a7d28bfbc2138f0dd
7
- data.tar.gz: 205040930ea923e3cd81dd4ad8f1554a67fc121cdab65f0db663972467e2e60716429a24618331de59ede9e41dd52c37652295af1040460bde77286c97909802
6
+ metadata.gz: 0e117bcf36e666f77b164fd65c8edcdd77f92c81ced9d24fe848256a08ed27d8195f26a7bb824a99648e4fd7d16b556c78d36f547df1e125623d6df9787ff585
7
+ data.tar.gz: f1ec91d8141913808e34d4c85ea4a784c11b64d6af2c57166888a079a434862066a6ccae13884e6be4f697e1822dba7c01e2c67fd06a8cba7a515f30b71a6ff0
@@ -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={ csv_options: { headers: :first_row,
19
- header_converters: :symbol,
20
- skip_blanks: true,
21
- col_sep: ",", # comma by default
22
- quote_char: '"', # double quote by default
23
- }
24
- } )
25
- optparse = OptionParser.new do |opts|
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
- opt[:col_sep] = s
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
- opt[:quote_char] = q
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[:csv_filename] = args[0] unless opt[:csv_filename]
57
- if opt[:csv_filename].nil? || opt[:csv_filename].empty?
58
- puts opts
59
- exit 1
60
- end
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
- resource = RestClient::Resource.new( opt[:url], opt[:username], opt[:password] )
473
- resource.post file: File.new(opt[:xml_filename], 'rt'), content_type: 'multipart/form-data', multipart: true
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
@@ -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.2'
39
- spec.add_runtime_dependency 'nokogiri', '~> 1.8.1'
40
- spec.add_runtime_dependency 'rest-client', '~> 1.7.2'
41
-
42
- spec.required_ruby_version = '>= 1.9'
43
- spec.add_development_dependency "bundler", "~> 1.6"
44
- spec.add_development_dependency "rake", "~> 10.0"
45
- spec.add_development_dependency "rspec", "~> 3.0.0"
46
- # spec.add_development_dependency "simplecov"
47
- spec.add_development_dependency "codeclimate-test-reporter"
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[:length] = 3
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
 
@@ -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 opts
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]
@@ -16,5 +16,5 @@
16
16
 
17
17
  module KualiCo
18
18
  # The gem version number.
19
- VERSION = "0.49"
19
+ VERSION = "0.51.0"
20
20
  end
data/mise.toml ADDED
@@ -0,0 +1,2 @@
1
+ [tools]
2
+ ruby = "3.3.0"
@@ -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("6") }.to raise_error(TextParseError)
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 1 character" do
595
- expect { GRM.parse_citizenship_type("22") }.to raise_error(TextParseError)
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
- # require 'simplecov'
18
- require 'codeclimate-test-reporter'
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: '0.49'
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: 2018-03-02 00:00:00.000000000 Z
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.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.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.8.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.8.1
39
+ version: 1.16.2
41
40
  - !ruby/object:Gem::Dependency
42
- name: rest-client
41
+ name: faraday
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
- version: 1.7.2
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: 1.7.2
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: '1.6'
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: '1.6'
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: '10.0'
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: '10.0'
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.0.0
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.0.0
123
+ version: '3.13'
97
124
  - !ruby/object:Gem::Dependency
98
- name: codeclimate-test-reporter
125
+ name: simplecov
99
126
  requirement: !ruby/object:Gem::Requirement
100
127
  requirements:
101
- - - ">="
128
+ - - "~>"
102
129
  - !ruby/object:Gem::Version
103
- version: '0'
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: '0'
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: '1.9'
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
- rubyforge_project:
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.