canvas_sync 0.10.3 → 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +57 -2
- data/db/migrate/20190916154829_add_fork_count_to_canvas_sync_job_logs.rb +13 -0
- data/lib/canvas_sync.rb +43 -8
- data/lib/canvas_sync/api_syncable.rb +8 -0
- data/lib/canvas_sync/generators/templates/migrations/create_admins.rb +7 -4
- data/lib/canvas_sync/generators/templates/migrations/create_roles.rb +3 -4
- data/lib/canvas_sync/generators/templates/models/account.rb +2 -0
- data/lib/canvas_sync/generators/templates/models/admin.rb +4 -5
- data/lib/canvas_sync/generators/templates/models/role.rb +0 -4
- data/lib/canvas_sync/generators/templates/models/term.rb +0 -2
- data/lib/canvas_sync/importers/bulk_importer.rb +7 -4
- data/lib/canvas_sync/job.rb +24 -1
- data/lib/canvas_sync/jobs/fork_gather.rb +59 -0
- data/lib/canvas_sync/jobs/report_starter.rb +12 -1
- data/lib/canvas_sync/jobs/sync_admins_job.rb +9 -5
- data/lib/canvas_sync/jobs/sync_assignment_groups_job.rb +2 -8
- data/lib/canvas_sync/jobs/sync_assignments_job.rb +2 -8
- data/lib/canvas_sync/jobs/sync_context_module_items_job.rb +2 -8
- data/lib/canvas_sync/jobs/sync_context_modules_job.rb +2 -8
- data/lib/canvas_sync/jobs/sync_provisioning_report_job.rb +23 -11
- data/lib/canvas_sync/jobs/sync_roles_job.rb +8 -5
- data/lib/canvas_sync/jobs/sync_simple_table_job.rb +17 -7
- data/lib/canvas_sync/jobs/sync_submissions_job.rb +1 -5
- data/lib/canvas_sync/jobs/sync_terms_job.rb +8 -2
- data/lib/canvas_sync/jobs/sync_users_job.rb +5 -7
- data/lib/canvas_sync/processors/assignment_groups_processor.rb +3 -2
- data/lib/canvas_sync/processors/assignments_processor.rb +3 -2
- data/lib/canvas_sync/processors/context_module_items_processor.rb +3 -2
- data/lib/canvas_sync/processors/context_modules_processor.rb +3 -2
- data/lib/canvas_sync/processors/normal_processor.rb +2 -1
- data/lib/canvas_sync/processors/provisioning_report_processor.rb +7 -2
- data/lib/canvas_sync/processors/submissions_processor.rb +3 -2
- data/lib/canvas_sync/version.rb +1 -1
- data/spec/canvas_sync/canvas_sync_spec.rb +17 -0
- data/spec/canvas_sync/jobs/fork_gather_spec.rb +73 -0
- data/spec/canvas_sync/jobs/job_spec.rb +39 -5
- data/spec/canvas_sync/jobs/sync_admins_job_spec.rb +2 -1
- data/spec/canvas_sync/jobs/sync_assignment_groups_job_spec.rb +1 -1
- data/spec/canvas_sync/jobs/sync_assignments_job_spec.rb +2 -2
- data/spec/canvas_sync/jobs/sync_context_module_items_job_spec.rb +2 -2
- data/spec/canvas_sync/jobs/sync_context_modules_job_spec.rb +2 -2
- data/spec/canvas_sync/jobs/sync_provisioning_report_job_spec.rb +20 -11
- data/spec/canvas_sync/jobs/sync_roles_job_spec.rb +2 -1
- data/spec/canvas_sync/jobs/sync_simple_table_job_spec.rb +1 -0
- data/spec/canvas_sync/jobs/sync_submissions_job_spec.rb +1 -1
- data/spec/canvas_sync/jobs/sync_users_job_spec.rb +1 -1
- data/spec/canvas_sync/models/admins_spec.rb +3 -5
- data/spec/canvas_sync/models/roles_spec.rb +5 -5
- data/spec/canvas_sync/models/term_spec.rb +3 -3
- data/spec/dummy/app/models/account.rb +2 -0
- data/spec/dummy/app/models/admin.rb +4 -5
- data/spec/dummy/app/models/role.rb +0 -4
- data/spec/dummy/app/models/term.rb +0 -2
- data/spec/dummy/db/migrate/{20190702203628_create_roles.rb → 20190927204545_create_roles.rb} +3 -4
- data/spec/dummy/db/migrate/{20190702203629_create_admins.rb → 20190927204546_create_admins.rb} +7 -4
- data/spec/dummy/db/schema.rb +12 -9
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +1248 -0
- data/spec/dummy/log/test.log +43258 -0
- data/spec/factories/admin_factory.rb +0 -1
- data/spec/support/fake_canvas.rb +2 -2
- data/spec/support/fixtures/canvas_responses/roles.json +6 -0
- data/spec/support/fixtures/reports/provisioning_csv_unzipped/courses.csv +3 -0
- data/spec/support/fixtures/reports/provisioning_csv_unzipped/users.csv +4 -0
- metadata +25 -12
@@ -12,7 +12,7 @@ module CanvasSync
|
|
12
12
|
# @return [nil]
|
13
13
|
def perform(job_chain, report_name, report_params, processor, options, allow_redownloads: false)
|
14
14
|
account_id = options[:account_id] || job_chain[:global_options][:account_id] || "self"
|
15
|
-
|
15
|
+
options[:sync_start_time] = DateTime.now.utc.iso8601
|
16
16
|
report_id = if allow_redownloads
|
17
17
|
get_cached_report(job_chain, account_id, report_name, report_params)
|
18
18
|
else
|
@@ -28,6 +28,17 @@ module CanvasSync
|
|
28
28
|
)
|
29
29
|
end
|
30
30
|
|
31
|
+
protected
|
32
|
+
|
33
|
+
def merge_report_params(job_chain, options={}, params={}, term_scope: true)
|
34
|
+
term_scope = job_chain[:global_options][:canvas_term_id] if term_scope == true
|
35
|
+
if term_scope.present?
|
36
|
+
params[:enrollment_term_id] = term_scope
|
37
|
+
end
|
38
|
+
params.merge!(options[:report_params]) if options[:report_params].present?
|
39
|
+
{ parameters: params }
|
40
|
+
end
|
41
|
+
|
31
42
|
private
|
32
43
|
|
33
44
|
def get_cached_report(job_chain, account_id, report_name, report_params)
|
@@ -7,12 +7,16 @@ module CanvasSync
|
|
7
7
|
# @param job_chain [Hash]
|
8
8
|
# @param options [Hash]
|
9
9
|
def perform(job_chain, _options)
|
10
|
-
|
11
|
-
CanvasSync.get_canvas_sync_client(job_chain[:global_options])
|
12
|
-
|
13
|
-
|
10
|
+
updated_admin_ids = []
|
11
|
+
api_client = CanvasSync.get_canvas_sync_client(job_chain[:global_options])
|
12
|
+
CanvasSync.sync_scope(Account).find_each do |acc|
|
13
|
+
api_client.account_admins(acc.canvas_id).all_pages_each do |admin_params|
|
14
|
+
admin_params[:account_id] = acc.canvas_id
|
15
|
+
admin = update_or_create_model(Admin, admin_params)
|
16
|
+
updated_admin_ids.push(admin.id)
|
17
|
+
end
|
14
18
|
end
|
15
|
-
Admin.where.not(id:
|
19
|
+
Admin.where.not(id: updated_admin_ids).update_all(workflow_state: 'inactive')
|
16
20
|
CanvasSync.invoke_next(job_chain)
|
17
21
|
end
|
18
22
|
end
|
@@ -8,17 +8,11 @@ module CanvasSync
|
|
8
8
|
#
|
9
9
|
# @param job_chain [Hash]
|
10
10
|
# @param options [Hash]
|
11
|
-
def perform(job_chain,
|
12
|
-
report_params = if job_chain[:global_options][:canvas_term_id].present?
|
13
|
-
{ "parameters[enrollment_term_id]" => job_chain[:global_options][:canvas_term_id] }
|
14
|
-
else
|
15
|
-
{}
|
16
|
-
end
|
17
|
-
|
11
|
+
def perform(job_chain, options)
|
18
12
|
super(
|
19
13
|
job_chain,
|
20
14
|
"proserv_assignment_group_export_csv",
|
21
|
-
|
15
|
+
merge_report_params(job_chain, options),
|
22
16
|
CanvasSync::Processors::AssignmentGroupsProcessor.to_s,
|
23
17
|
{},
|
24
18
|
)
|
@@ -8,17 +8,11 @@ module CanvasSync
|
|
8
8
|
#
|
9
9
|
# @param job_chain [Hash]
|
10
10
|
# @param options [Hash]
|
11
|
-
def perform(job_chain,
|
12
|
-
report_params = if job_chain[:global_options][:canvas_term_id].present?
|
13
|
-
{ "parameters[enrollment_term_id]" => job_chain[:global_options][:canvas_term_id] }
|
14
|
-
else
|
15
|
-
{}
|
16
|
-
end
|
17
|
-
|
11
|
+
def perform(job_chain, options)
|
18
12
|
super(
|
19
13
|
job_chain,
|
20
14
|
"proserv_assignment_export_csv",
|
21
|
-
|
15
|
+
merge_report_params(job_chain, options),
|
22
16
|
CanvasSync::Processors::AssignmentsProcessor.to_s,
|
23
17
|
{},
|
24
18
|
)
|
@@ -8,17 +8,11 @@ module CanvasSync
|
|
8
8
|
#
|
9
9
|
# @param job_chain [Hash]
|
10
10
|
# @param options [Hash]
|
11
|
-
def perform(job_chain,
|
12
|
-
report_params = if job_chain[:global_options][:canvas_term_id].present?
|
13
|
-
{ "parameters[enrollment_term_id]" => job_chain[:global_options][:canvas_term_id] }
|
14
|
-
else
|
15
|
-
{}
|
16
|
-
end
|
17
|
-
|
11
|
+
def perform(job_chain, options)
|
18
12
|
super(
|
19
13
|
job_chain,
|
20
14
|
"proserv_context_module_items_csv",
|
21
|
-
|
15
|
+
merge_report_params(job_chain, options),
|
22
16
|
CanvasSync::Processors::ContextModuleItemsProcessor.to_s,
|
23
17
|
{},
|
24
18
|
)
|
@@ -8,17 +8,11 @@ module CanvasSync
|
|
8
8
|
#
|
9
9
|
# @param job_chain [Hash]
|
10
10
|
# @param options [Hash]
|
11
|
-
def perform(job_chain,
|
12
|
-
report_params = if job_chain[:global_options][:canvas_term_id].present?
|
13
|
-
{ "parameters[enrollment_term_id]" => job_chain[:global_options][:canvas_term_id] }
|
14
|
-
else
|
15
|
-
{}
|
16
|
-
end
|
17
|
-
|
11
|
+
def perform(job_chain, options)
|
18
12
|
super(
|
19
13
|
job_chain,
|
20
14
|
"proserv_context_modules_csv",
|
21
|
-
|
15
|
+
merge_report_params(job_chain, options),
|
22
16
|
CanvasSync::Processors::ContextModulesProcessor.to_s,
|
23
17
|
{},
|
24
18
|
)
|
@@ -8,13 +8,23 @@ module CanvasSync
|
|
8
8
|
# models to sync.
|
9
9
|
def perform(job_chain, options)
|
10
10
|
if options[:term_scope]
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
sub_reports = CanvasSync.fork(@job_log, job_chain, keys: [:canvas_term_id]) do |job_chain|
|
12
|
+
Term.send(options[:term_scope]).find_each.map do |term|
|
13
|
+
# Deep copy the job_chain so each report gets the correct term id passed into
|
14
|
+
# its options with no side effects
|
15
|
+
term_id = get_term_id(term)
|
16
|
+
duped_job_chain = Marshal.load(Marshal.dump(job_chain))
|
17
|
+
duped_job_chain[:global_options][:canvas_term_id] = term_id
|
18
|
+
{
|
19
|
+
job_chain: duped_job_chain,
|
20
|
+
params: report_params(options, term_id),
|
21
|
+
options: options,
|
22
|
+
}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
sub_reports.each do |r|
|
27
|
+
start_report(r[:params], r[:job_chain], r[:options])
|
18
28
|
end
|
19
29
|
else
|
20
30
|
start_report(report_params(options), job_chain, options)
|
@@ -35,16 +45,18 @@ module CanvasSync
|
|
35
45
|
|
36
46
|
def report_params(options, canvas_term_id=nil)
|
37
47
|
params = {
|
38
|
-
|
48
|
+
include_deleted: true,
|
39
49
|
}
|
40
50
|
|
41
51
|
options[:models].each do |model|
|
42
|
-
params[
|
52
|
+
params[model] = true
|
43
53
|
end
|
44
54
|
|
45
|
-
params[
|
55
|
+
params[:enrollment_term_id] = canvas_term_id if canvas_term_id
|
56
|
+
|
57
|
+
params.merge!(options[:report_parameters]) if options[:report_parameters].present?
|
46
58
|
|
47
|
-
params
|
59
|
+
{ parameters: params }
|
48
60
|
end
|
49
61
|
|
50
62
|
def get_term_id(term)
|
@@ -7,12 +7,15 @@ module CanvasSync
|
|
7
7
|
# @param job_chain [Hash]
|
8
8
|
# @param options [Hash]
|
9
9
|
def perform(job_chain, _options)
|
10
|
-
|
11
|
-
CanvasSync.get_canvas_sync_client(job_chain[:global_options])
|
12
|
-
|
13
|
-
|
10
|
+
updated_role_ids = []
|
11
|
+
api_client = CanvasSync.get_canvas_sync_client(job_chain[:global_options])
|
12
|
+
CanvasSync.sync_scope(Account).find_each do |acc|
|
13
|
+
api_client.list_roles(acc.canvas_id, state: %w[active inactive]).all_pages_each do |role_params|
|
14
|
+
role = update_or_create_model(Role, role_params)
|
15
|
+
updated_role_ids.push(role.id)
|
16
|
+
end
|
14
17
|
end
|
15
|
-
Role.where.not(id:
|
18
|
+
Role.where.not(id: updated_role_ids).update_all(workflow_state: 'inactive')
|
16
19
|
CanvasSync.invoke_next(job_chain)
|
17
20
|
end
|
18
21
|
end
|
@@ -9,13 +9,23 @@ module CanvasSync
|
|
9
9
|
# @param options [Hash]
|
10
10
|
def perform(job_chain, options)
|
11
11
|
if options[:term_scope]
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
sub_reports = CanvasSync.fork(@job_log, job_chain, keys: [:canvas_term_id]) do |job_chain|
|
13
|
+
Term.send(options[:term_scope]).find_each.map do |term|
|
14
|
+
# Deep copy the job_chain so each report gets the correct term id passed into
|
15
|
+
# its options with no side effects
|
16
|
+
term_id = get_term_id(term)
|
17
|
+
duped_job_chain = Marshal.load(Marshal.dump(job_chain))
|
18
|
+
duped_job_chain[:global_options][:canvas_term_id] = term_id
|
19
|
+
{
|
20
|
+
job_chain: duped_job_chain,
|
21
|
+
params: report_params(options, term_id),
|
22
|
+
options: options,
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
sub_reports.each do |r|
|
28
|
+
start_report(r[:params], r[:job_chain], r[:options])
|
19
29
|
end
|
20
30
|
else
|
21
31
|
start_report(report_params(options), job_chain, options)
|
@@ -9,14 +9,10 @@ module CanvasSync
|
|
9
9
|
# @param job_chain [Hash]
|
10
10
|
# @param options [Hash]
|
11
11
|
def perform(job_chain, options)
|
12
|
-
report_params = {}
|
13
|
-
report_params["parameters[enrollment_term_id]"] = job_chain[:global_options][:canvas_term_id] if job_chain[:global_options][:canvas_term_id].present?
|
14
|
-
report_params["parameters[include_all]"] = true if options[:include_all]
|
15
|
-
|
16
12
|
super(
|
17
13
|
job_chain,
|
18
14
|
"proserv_student_submissions_csv",
|
19
|
-
|
15
|
+
merge_report_params(job_chain, options, { include_all: options[:include_all] }, {}),
|
20
16
|
CanvasSync::Processors::SubmissionsProcessor.to_s,
|
21
17
|
{},
|
22
18
|
)
|
@@ -10,9 +10,15 @@ module CanvasSync
|
|
10
10
|
def perform(job_chain, _options)
|
11
11
|
CanvasSync.get_canvas_sync_client(job_chain[:global_options]).terms("self").all_pages!.each do |term_params|
|
12
12
|
if job_chain[:global_options][:account_id]
|
13
|
-
|
13
|
+
# These branches are primarily to support Legacy apps
|
14
|
+
if Term.respond_to?(:create_or_update) && Term.method(:create_or_update).arity.abs == 2
|
15
|
+
Term.create_or_update(term_params, job_chain[:global_options][:account_id])
|
16
|
+
else
|
17
|
+
term_params[:account_id] |= job_chain[:global_options][:account_id]
|
18
|
+
update_or_create_model(Term, term_params)
|
19
|
+
end
|
14
20
|
else
|
15
|
-
Term
|
21
|
+
update_or_create_model(Term, term_params)
|
16
22
|
end
|
17
23
|
end
|
18
24
|
|
@@ -1,11 +1,6 @@
|
|
1
1
|
module CanvasSync
|
2
2
|
module Jobs
|
3
3
|
class SyncUsersJob < ReportStarter
|
4
|
-
REPORT_PARAMS = {
|
5
|
-
"parameters[users]" => true,
|
6
|
-
"parameters[include_deleted]" => true
|
7
|
-
}.freeze
|
8
|
-
|
9
4
|
# Starts a provisioning report for just users.
|
10
5
|
#
|
11
6
|
# Provisioning reports do not scope users by term, so when we are
|
@@ -14,11 +9,14 @@ module CanvasSync
|
|
14
9
|
#
|
15
10
|
# @param job_chain [Hash]
|
16
11
|
# @param options [Hash]
|
17
|
-
def perform(job_chain,
|
12
|
+
def perform(job_chain, options)
|
18
13
|
super(
|
19
14
|
job_chain,
|
20
15
|
"proservices_provisioning_csv",
|
21
|
-
|
16
|
+
merge_report_params(job_chain, options, {
|
17
|
+
users: true,
|
18
|
+
include_deleted: true,
|
19
|
+
}, term_scope: false),
|
22
20
|
CanvasSync::Processors::ProvisioningReportProcessor.to_s,
|
23
21
|
{ models: ["users"] },
|
24
22
|
)
|
@@ -8,15 +8,16 @@ module CanvasSync
|
|
8
8
|
# @param options [Hash]
|
9
9
|
class AssignmentGroupsProcessor < ReportProcessor
|
10
10
|
def self.process(report_file_path, _options, report_id)
|
11
|
-
new(report_file_path)
|
11
|
+
new(report_file_path, _options)
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize(report_file_path)
|
14
|
+
def initialize(report_file_path, options)
|
15
15
|
CanvasSync::Importers::BulkImporter.import(
|
16
16
|
report_file_path,
|
17
17
|
mapping[:assignment_groups][:report_columns],
|
18
18
|
AssignmentGroup,
|
19
19
|
mapping[:assignment_groups][:conflict_target].to_sym,
|
20
|
+
import_args: options
|
20
21
|
)
|
21
22
|
end
|
22
23
|
end
|
@@ -8,15 +8,16 @@ module CanvasSync
|
|
8
8
|
# @param options [Hash]
|
9
9
|
class AssignmentsProcessor < ReportProcessor
|
10
10
|
def self.process(report_file_path, _options, report_id)
|
11
|
-
new(report_file_path)
|
11
|
+
new(report_file_path, _options)
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize(report_file_path)
|
14
|
+
def initialize(report_file_path, options)
|
15
15
|
CanvasSync::Importers::BulkImporter.import(
|
16
16
|
report_file_path,
|
17
17
|
mapping[:assignments][:report_columns],
|
18
18
|
Assignment,
|
19
19
|
mapping[:assignments][:conflict_target].to_sym,
|
20
|
+
import_args: options
|
20
21
|
)
|
21
22
|
end
|
22
23
|
end
|
@@ -8,15 +8,16 @@ module CanvasSync
|
|
8
8
|
# @param options [Hash]
|
9
9
|
class ContextModuleItemsProcessor < ReportProcessor
|
10
10
|
def self.process(report_file_path, _options, report_id)
|
11
|
-
new(report_file_path)
|
11
|
+
new(report_file_path, _options)
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize(report_file_path)
|
14
|
+
def initialize(report_file_path, options)
|
15
15
|
CanvasSync::Importers::BulkImporter.import(
|
16
16
|
report_file_path,
|
17
17
|
mapping[:context_module_items][:report_columns],
|
18
18
|
ContextModuleItem,
|
19
19
|
mapping[:context_module_items][:conflict_target].to_sym,
|
20
|
+
import_args: options
|
20
21
|
)
|
21
22
|
end
|
22
23
|
end
|
@@ -8,15 +8,16 @@ module CanvasSync
|
|
8
8
|
# @param options [Hash]
|
9
9
|
class ContextModulesProcessor < ReportProcessor
|
10
10
|
def self.process(report_file_path, _options, report_id)
|
11
|
-
new(report_file_path)
|
11
|
+
new(report_file_path, _options)
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize(report_file_path)
|
14
|
+
def initialize(report_file_path, options)
|
15
15
|
CanvasSync::Importers::BulkImporter.import(
|
16
16
|
report_file_path,
|
17
17
|
mapping[:context_modules][:report_columns],
|
18
18
|
ContextModule,
|
19
19
|
mapping[:context_modules][:conflict_target].to_sym,
|
20
|
+
import_args: options
|
20
21
|
)
|
21
22
|
end
|
22
23
|
end
|
@@ -18,7 +18,8 @@ module CanvasSync
|
|
18
18
|
report_file_path,
|
19
19
|
mapping[options[:mapping].to_sym][:report_columns],
|
20
20
|
options[:klass].constantize,
|
21
|
-
conflict_target ? conflict_target.to_sym : conflict_target
|
21
|
+
conflict_target ? conflict_target.to_sym : conflict_target,
|
22
|
+
import_args: options
|
22
23
|
)
|
23
24
|
end
|
24
25
|
end
|
@@ -21,7 +21,6 @@ module CanvasSync
|
|
21
21
|
|
22
22
|
def initialize(report_file_path, options) # rubocop:disable Metrics/AbcSize
|
23
23
|
@options = options
|
24
|
-
|
25
24
|
if options[:models].length == 1
|
26
25
|
run_import(options[:models][0], report_file_path)
|
27
26
|
else
|
@@ -75,6 +74,7 @@ module CanvasSync
|
|
75
74
|
mapping[:users][:report_columns],
|
76
75
|
User,
|
77
76
|
mapping[:users][:conflict_target].to_sym,
|
77
|
+
import_args: @options
|
78
78
|
)
|
79
79
|
end
|
80
80
|
|
@@ -83,7 +83,8 @@ module CanvasSync
|
|
83
83
|
report_file_path,
|
84
84
|
mapping[:accounts][:report_columns],
|
85
85
|
Account,
|
86
|
-
mapping[:accounts][:conflict_target].to_sym
|
86
|
+
mapping[:accounts][:conflict_target].to_sym,
|
87
|
+
import_args: @options
|
87
88
|
)
|
88
89
|
end
|
89
90
|
|
@@ -93,6 +94,7 @@ module CanvasSync
|
|
93
94
|
mapping[:courses][:report_columns],
|
94
95
|
Course,
|
95
96
|
mapping[:courses][:conflict_target].to_sym,
|
97
|
+
import_args: @options
|
96
98
|
)
|
97
99
|
end
|
98
100
|
|
@@ -102,6 +104,7 @@ module CanvasSync
|
|
102
104
|
mapping[:enrollments][:report_columns],
|
103
105
|
Enrollment,
|
104
106
|
mapping[:enrollments][:conflict_target].to_sym,
|
107
|
+
import_args: @options
|
105
108
|
)
|
106
109
|
end
|
107
110
|
|
@@ -111,6 +114,7 @@ module CanvasSync
|
|
111
114
|
mapping[:sections][:report_columns],
|
112
115
|
Section,
|
113
116
|
mapping[:sections][:conflict_target].to_sym,
|
117
|
+
import_args: @options
|
114
118
|
)
|
115
119
|
end
|
116
120
|
|
@@ -120,6 +124,7 @@ module CanvasSync
|
|
120
124
|
mapping[:xlist][:report_columns],
|
121
125
|
Section,
|
122
126
|
mapping[:xlist][:conflict_target].to_sym,
|
127
|
+
import_args: @options
|
123
128
|
)
|
124
129
|
end
|
125
130
|
end
|