forked from WikiEducationFoundation/WikiEduDashboard
/
campaign_csv_builder.rb
58 lines (48 loc) · 1.68 KB
/
campaign_csv_builder.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# frozen_string_literal: true
require 'csv'
require_dependency "#{Rails.root}/lib/analytics/course_csv_builder"
require_dependency "#{Rails.root}/lib/analytics/course_articles_csv_builder"
require_dependency "#{Rails.root}/lib/analytics/course_revisions_csv_builder"
require_dependency "#{Rails.root}/app/workers/campaign_csv_worker"
require "#{Rails.root}/lib/analytics/course_wikidata_csv_builder"
class CampaignCsvBuilder
def initialize(campaign)
@campaign = campaign || AllCourses
end
def courses_to_csv
csv_data = [CourseCsvBuilder::CSV_HEADERS]
@campaign.courses.find_each do |course|
csv_data << CourseCsvBuilder.new(course).row
end
CSV.generate { |csv| csv_data.uniq.each { |line| csv << line } }
end
def articles_to_csv
csv_data = [CourseArticlesCsvBuilder::CSV_HEADERS + ['course_slug']]
@campaign.courses.find_each do |course|
CourseArticlesCsvBuilder.new(course).article_rows.each do |row|
row_with_slug = row + [course.slug]
csv_data << row_with_slug
end
end
CSV.generate { |csv| csv_data.each { |line| csv << line } }
end
def revisions_to_csv
csv_data = [CourseRevisionsCsvBuilder::CSV_HEADERS + ['course_slug']]
@campaign.courses.find_each do |course|
CourseRevisionsCsvBuilder.new(course).revisions_rows.each do |row|
row_with_slug = row + [course.slug]
csv_data << row_with_slug
end
end
CSV.generate { |csv| csv_data.each { |line| csv << line } }
end
def wikidata_to_csv
courses = @campaign.courses.joins(:course_stat)
CourseWikidataCsvBuilder.new(courses).generate_csv
end
class AllCourses
def self.courses
Course.all
end
end
end