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.
@@ -0,0 +1,3 @@
1
+ module AlmaCourseLoader
2
+ VERSION = '0.9.1'.freeze
3
+ end
@@ -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: []