alma_course_loader 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []