Module: CanvasSync::ReportsMap

Defined in:
lib/canvas_sync/reports_map.rb

Constant Summary collapse

REPORTS =
{
  "proservices_provisioning_csv" => {
    human_name: "Proserv Provisioning Report",
    module_name: "CustomReports::Proservices::Provisioning",
  },
  "proserv_assignment_group_export_csv" => {
    human_name: "Assignment Group Export",
    module_name: "CustomReports::Proserv",
  },
  "proserv_assignment_overrides_csv" => {
    human_name: "Assignment Overrides Export",
    module_name: "CustomReports::Proservices::AssignmentOverrides",
  },
  "proserv_content_migrations_csv" => {
    human_name: "Professional Services Content Migrations Report",
    module_name: "CustomReports::Proservices::ContentMigrations",
  },
  "proserv_context_module_items_csv" => {
    human_name: "Professional Services Context Module Items Report",
    module_name: "CustomReports::Proservices::ContextModuleItems",
  },
  "proserv_context_modules_csv" => {
    human_name: "Professional Services Context Modules Report",
    module_name: "CustomReports::Proservices::ContextModules",
  },
  "proserv_course_completion_csv" => {
    human_name: "Student Course Completion Dates",
    module_name: "CustomReports::Proserv",
  },

  "rubrics_csv" => {
    human_name: "CustomReports::Rubrics::Rubrics",
    module_name: "Rubrics Export Report",
  },
  "rubric_associations_csv" => {
    human_name: "Rubrics Associations Export Report",
    module_name: "CustomReports::Rubrics::RubricAssociations",
  },
  "rubric_assessments_csv" => {
    human_name: "Rubrics Assessments Export Report",
    module_name: "CustomReports::Rubrics::RubricAssessments",
  },

  "proserv_scores_data_csv" => {
    human_name: "Professional Services Scores Data Report",
    module_name: "CustomReports::Proservices::ScoresData",
  },
  "proserv_student_submissions_csv" => {
    human_name: "Student Submissions",
    module_name: "CustomReports::Proserv",
  },
}
EXPLICIT_REQUIRED_REPORTS =
Set.new

Class Method Summary collapse

Class Method Details

.define_report(name, human_name: nil, module_name: nil) ⇒ Object



56
57
58
59
60
# File 'lib/canvas_sync/reports_map.rb', line 56

def self.define_report(name, human_name: nil, module_name: nil)
  REPORTS[name] ||= {}
  REPORTS[name][:human_name] = human_name if human_name
  REPORTS[name][:module_name] = module_name if module_name
end

.model_reportsObject



69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/canvas_sync/reports_map.rb', line 69

def self.model_reports
  mapping = {}

  Jobs::ReportSyncTask.subclasses.each do |cls|
    model = cls.model.to_s
    report = cls.report_name
    next unless model.present?
    mapping[model] ||= []
    mapping[model] << report
  end

  mapping
end

.pretty_print_required_reports(client = nil) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/canvas_sync/reports_map.rb', line 108

def self.pretty_print_required_reports(client = nil)
  client ||= canvas_sync_client rescue nil

  req_reports = required_reports
  return "[CanvasSync] No reports required... supposedly" if req_reports.empty?

  enabled_reports = client.report_list('self').map{|r| r["report"] }.to_set rescue nil

  puts "[CanvasSync] Required Custom Reports:"
  req_reports.each do |report|
    color = enabled_reports.nil? ? :cyan : (enabled_reports.include?(report) ? :green : :red)
    puts "- #{ansi(report, color)}"
    if (meta = REPORTS[report]) && (meta[:human_name] || meta[:module_name])
      puts "    #{meta[:human_name]} (#{meta[:module_name]})"
    end
  end
  puts "- #{ansi("NB: Double check if you know this app requires non-CanvasSync provided models.", :italic)}"
  puts "    #{ansi("Non-standard reports must be registered with `CanvasSync.require_report!` from an initializer to be included in this list.", :italic)}"

  puts ""

  bits = req_reports.map do |report|
    "settings[#{report}]=checked"
  end

  base_url = client.config[:prefix] rescue "<CANVAS URL>/"
  plugins_url = "#{base_url}/plugins/account_reports".gsub(/\/+/, "/")
  plugins_url += "?#{bits.join("&")}" if bits.any?
  puts "Pre-filled link: " + ansi(plugins_url, :cyan)
end

.require_report!(key, **kwargs) ⇒ Object



64
65
66
67
# File 'lib/canvas_sync/reports_map.rb', line 64

def self.require_report!(key, **kwargs)
  define_report(key, **kwargs)
  EXPLICIT_REQUIRED_REPORTS << key
end

.required_reportsObject



83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/canvas_sync/reports_map.rb', line 83

def self.required_reports
  req = Set.new
  req << "proservices_provisioning_csv"
  req.merge(EXPLICIT_REQUIRED_REPORTS)

  model_reports.each do |model, reports|
    model_class = model.safe_constantize
    next unless model_class.present?

    req.merge(reports)
  end

  req
end