alma_course_loader 0.9.1
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 +7 -0
- data/.gitignore +63 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +586 -0
- data/Rakefile +10 -0
- data/alma_course_loader.gemspec +33 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/exe/course_loader_diff +11 -0
- data/lib/alma_course_loader.rb +8 -0
- data/lib/alma_course_loader/cli/course_loader.rb +129 -0
- data/lib/alma_course_loader/cli/diff.rb +85 -0
- data/lib/alma_course_loader/diff.rb +173 -0
- data/lib/alma_course_loader/filter.rb +272 -0
- data/lib/alma_course_loader/reader.rb +298 -0
- data/lib/alma_course_loader/version.rb +3 -0
- data/lib/alma_course_loader/writer.rb +116 -0
- metadata +162 -0
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
require 'alma_course_loader/version'
|
4
|
+
|
5
|
+
module AlmaCourseLoader
|
6
|
+
# Writes an Alma course loader file
|
7
|
+
#
|
8
|
+
# This provides a single class method #write which accepts an output filename,
|
9
|
+
# the Alma course loader operation (:delete, :rollover, :update) and a
|
10
|
+
# Reader instance. The output is a tab-delimited CSV file containing one row
|
11
|
+
# per course element.
|
12
|
+
#
|
13
|
+
# The writer calls the reader's #each_row method without arguments, so the
|
14
|
+
# reader must be constructed with the appropriate defaults.
|
15
|
+
#
|
16
|
+
# For course rollover, the writer assumes that the reader provides the correct
|
17
|
+
# previous course ID and section ID in the row data. These fields are not
|
18
|
+
# output for other operations.
|
19
|
+
#
|
20
|
+
# If the operation is unspecified or invalid, the default is :update
|
21
|
+
#
|
22
|
+
# @example Write an Alma course loader file to update course entries
|
23
|
+
# # The reader must be constructed with the appropriate selection criteria
|
24
|
+
# reader = Reader.new(2015, 2016, 2017, filters: [...])
|
25
|
+
# Writer.write('courses.xls', :update, reader)
|
26
|
+
#
|
27
|
+
# @example Write an Alma course loader file for course rollover
|
28
|
+
# Writer.write('courses.xls', :rollover, reader)
|
29
|
+
#
|
30
|
+
# @example Write an Alma course loader file to delete course entries
|
31
|
+
# Writer.write('courses.xls', :delete, reader)
|
32
|
+
#
|
33
|
+
class Writer
|
34
|
+
# CSV row headers
|
35
|
+
ROW_HEADERS = %w[
|
36
|
+
COURSE_CODE
|
37
|
+
COURSE_TITLE
|
38
|
+
SECTION_ID
|
39
|
+
ACAD_DEPT
|
40
|
+
PROC_DEPT
|
41
|
+
TERM1
|
42
|
+
TERM2
|
43
|
+
TERM3
|
44
|
+
TERM4
|
45
|
+
START_DATE
|
46
|
+
END_DATE
|
47
|
+
NUM_OF_PARTICIPANTS
|
48
|
+
WEEKLY_HOURS
|
49
|
+
YEAR
|
50
|
+
SEARCH_ID1
|
51
|
+
SEARCH_ID2
|
52
|
+
ALL_SEARCHABLE_IDS
|
53
|
+
INSTR1
|
54
|
+
INSTR2
|
55
|
+
INSTR3
|
56
|
+
INSTR4
|
57
|
+
INSTR5
|
58
|
+
INSTR6
|
59
|
+
INSTR7
|
60
|
+
INSTR8
|
61
|
+
INSTR9
|
62
|
+
INSTR10
|
63
|
+
ALL_INSTRUCTORS
|
64
|
+
OPERATION
|
65
|
+
OLD_COURSE_CODE
|
66
|
+
OLD_COURSE_SECTION
|
67
|
+
].freeze
|
68
|
+
|
69
|
+
# Creates a CSV file in the Alma Course Loader format
|
70
|
+
# @param filename [String] the filename of the course loader file
|
71
|
+
# @param op [Symbol] the file loader operation (:delete, :rollover, :update)
|
72
|
+
# @param courses [AlmaCourseLoader::Reader] the course reader
|
73
|
+
def self.write(filename = nil, op = nil, courses = nil)
|
74
|
+
# Check the operation, default to regular import if invalid
|
75
|
+
op, rollover = write_op(op)
|
76
|
+
# Write the course data to a tab-separated CSV file
|
77
|
+
CSV.open(filename, 'wb', col_sep: "\t") do |csv|
|
78
|
+
# Write the header row
|
79
|
+
csv << ROW_HEADERS
|
80
|
+
# Write a row for each course entry
|
81
|
+
courses.each_row { |row| csv << row_data(row, op, rollover) }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
class << self
|
86
|
+
protected
|
87
|
+
|
88
|
+
# Adds the operation and related fields to the row data
|
89
|
+
# @param row [Array<String>] the CSV row data
|
90
|
+
# @param op [String] the Alma Course Loader operation
|
91
|
+
# '' - update
|
92
|
+
# 'DELETE' - delete
|
93
|
+
# 'ROLLOVER' - course rollover
|
94
|
+
# @param rollover [Boolean] true if performing rollover, false otherwise
|
95
|
+
def row_data(row, op, rollover)
|
96
|
+
row[28] = op
|
97
|
+
# The old course ID and section ID are only required for rollover
|
98
|
+
unless rollover
|
99
|
+
row[29] = nil
|
100
|
+
row[30] = nil
|
101
|
+
end
|
102
|
+
row
|
103
|
+
end
|
104
|
+
|
105
|
+
# Returns the Alma Course Loader operation string
|
106
|
+
# @param op [Symbol] the operation (:delete, :rollover, :update)
|
107
|
+
# @return [String, Boolean] the Alma operation string and a Boolean set
|
108
|
+
# to true if performing rollover, false otherwise
|
109
|
+
def write_op(op)
|
110
|
+
rollover = op == :rollover
|
111
|
+
op = %i[delete rollover].include?(op) ? op.to_s.upcase : nil
|
112
|
+
[op, rollover]
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
metadata
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: alma_course_loader
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Lancaster University Library
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-09-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: clamp
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: dotenv
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: minitest-reporters
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: This gem provides basic support for creating Almacourse loader files.
|
112
|
+
email:
|
113
|
+
- library.dit@lancaster.ac.uk
|
114
|
+
executables:
|
115
|
+
- course_loader_diff
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- ".gitignore"
|
120
|
+
- ".travis.yml"
|
121
|
+
- CODE_OF_CONDUCT.md
|
122
|
+
- Gemfile
|
123
|
+
- LICENSE.txt
|
124
|
+
- README.md
|
125
|
+
- Rakefile
|
126
|
+
- alma_course_loader.gemspec
|
127
|
+
- bin/console
|
128
|
+
- bin/setup
|
129
|
+
- exe/course_loader_diff
|
130
|
+
- lib/alma_course_loader.rb
|
131
|
+
- lib/alma_course_loader/cli/course_loader.rb
|
132
|
+
- lib/alma_course_loader/cli/diff.rb
|
133
|
+
- lib/alma_course_loader/diff.rb
|
134
|
+
- lib/alma_course_loader/filter.rb
|
135
|
+
- lib/alma_course_loader/reader.rb
|
136
|
+
- lib/alma_course_loader/version.rb
|
137
|
+
- lib/alma_course_loader/writer.rb
|
138
|
+
homepage: https://github.com/lulibrary/alma_course_loader
|
139
|
+
licenses:
|
140
|
+
- MIT
|
141
|
+
metadata: {}
|
142
|
+
post_install_message:
|
143
|
+
rdoc_options: []
|
144
|
+
require_paths:
|
145
|
+
- lib
|
146
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
156
|
+
requirements: []
|
157
|
+
rubyforge_project:
|
158
|
+
rubygems_version: 2.6.11
|
159
|
+
signing_key:
|
160
|
+
specification_version: 4
|
161
|
+
summary: Support for creating Alma course loader files
|
162
|
+
test_files: []
|