Skip to content

Commit 5e07c3b

Browse files
authored
Modify CSV file generators (#292)
2 parents a099e22 + ac4c15f commit 5e07c3b

9 files changed

Lines changed: 76 additions & 8 deletions

File tree

app/services/csv_generator/base.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class CsvGenerator::Base
22
def perform
3-
CSV.generate do |csv|
3+
CSV.generate(row_sep: "\n") do |csv|
44
csv << headers
55
scope.each do |row|
66
csv << row

app/services/csv_generator/files.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ def initialize(language, **args)
99
attr_reader :language, :args
1010

1111
def headers
12-
%w[TopicID FileName FileType FileSize]
12+
%w[FileID TopicID FileName FileType FileSize]
1313
end
1414

1515
def scope
1616
language.topics.active # try joining documents
1717
.flat_map do |topic|
1818
topic.documents.map do |doc|
1919
[
20+
doc.id,
2021
topic.id,
2122
doc.filename,
2223
doc.content_type,
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class CsvGenerator::TopicAuthors < CsvGenerator::Base
2+
def initialize(language, **args)
3+
@language = language
4+
@args = args
5+
end
6+
7+
private
8+
9+
attr_reader :language, :args
10+
11+
def headers
12+
%w[TopicID AuthorID]
13+
end
14+
15+
def scope
16+
language.topics.active.map { |topic| [ topic.id, 0 ] }
17+
end
18+
end

app/services/csv_generator/topics.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def initialize(language, **args)
99
attr_reader :language, :args
1010

1111
def headers
12-
%w[TopicID TopicName TopicVolume TopicYear TopicMonth ContentProvider]
12+
%w[TopicID TopicName TopicVolume TopicIssue TopicYear TopicMonth ContentProvider]
1313
end
1414

1515
def scope
@@ -20,6 +20,7 @@ def scope
2020
topic.id,
2121
topic.title,
2222
topic.published_at.year,
23+
topic.published_at.month,
2324
topic.published_at.year,
2425
topic.published_at.month,
2526
topic.provider.name,

app/services/language_content_processor.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@ def language_files
6565
name: "#{language.file_storage_prefix}TopicTag.csv",
6666
path: "#{language.file_storage_prefix}CMES-v2/assets/csv",
6767
),
68+
topic_authors: FileToUpload.new(
69+
content: ->(language) { CsvGenerator::TopicAuthors.new(language).perform },
70+
name: "#{language.file_storage_prefix}TopicAuthor.csv",
71+
path: "#{language.file_storage_prefix}CMES-v2/assets/csv",
72+
),
6873
}
6974
end
7075

spec/services/csv_generator/files_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
subject { described_class.new(language) }
55

66
let(:language) { create(:language) }
7-
let(:header) { "TopicID,FileName,FileType,FileSize\n" }
7+
let(:header) { "FileID,TopicID,FileName,FileType,FileSize\n" }
88

99
it "generates empty csv" do
1010
expect(subject.perform).to eq(header)
@@ -15,7 +15,7 @@
1515
let(:data) do
1616
header.tap do |csv|
1717
topic.documents.each do |document|
18-
csv << "#{topic.id},#{document.filename},#{document.content_type},#{document.byte_size}\n"
18+
csv << "#{document.id},#{topic.id},#{document.filename},#{document.content_type},#{document.byte_size}\n"
1919
end
2020
end
2121
end
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
require "rails_helper"
2+
3+
RSpec.describe CsvGenerator::TopicAuthors do
4+
subject { described_class.new(language) }
5+
6+
let(:language) { create(:language) }
7+
let(:header) { "TopicID,AuthorID\n" }
8+
9+
it "generates empty csv" do
10+
expect(subject.perform).to eq(header)
11+
end
12+
13+
context "when topics exist" do
14+
let!(:topic) { create(:topic, language:) }
15+
let(:data) do
16+
header.tap do |csv|
17+
csv << "#{topic.id},0\n"
18+
end
19+
end
20+
21+
it "generates csv with topics info" do
22+
expect(subject.perform).to eq(data)
23+
end
24+
end
25+
26+
context "when topic exists but archived" do
27+
let!(:topic) { create(:topic, :archived, language:) }
28+
29+
it "generates empty csv" do
30+
expect(subject.perform).to eq(header)
31+
end
32+
end
33+
34+
context "when topic does not belong to language" do
35+
let(:other_language) { create(:language) }
36+
let!(:topic) { create(:topic, language: other_language) }
37+
38+
it "generates empty csv" do
39+
expect(subject.perform).to eq(header)
40+
end
41+
end
42+
end

spec/services/csv_generator/topics_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
subject { described_class.new(language) }
55

66
let(:language) { create(:language) }
7-
let(:header) { "TopicID,TopicName,TopicVolume,TopicYear,TopicMonth,ContentProvider\n" }
7+
let(:header) { "TopicID,TopicName,TopicVolume,TopicIssue,TopicYear,TopicMonth,ContentProvider\n" }
88

99
it "generates empty csv" do
1010
expect(subject.perform).to eq(header)
@@ -14,7 +14,7 @@
1414
let!(:topic) { create(:topic, language:) }
1515
let(:data) do
1616
header.tap do |csv|
17-
csv << "#{topic.id},#{topic.title},#{topic.published_at.year},#{topic.published_at.year},#{topic.published_at.month},#{topic.provider.name}\n"
17+
csv << "#{topic.id},#{topic.title},#{topic.published_at.year},#{topic.published_at.month},#{topic.published_at.year},#{topic.published_at.month},#{topic.provider.name}\n"
1818
end
1919
end
2020

spec/services/language_content_processor_spec.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
end
1616

1717
it "processes content for every language" do
18-
files_number = language.providers.size + 8 # 2 xml files for all provides, 2 text files for tags, 4 csv files
18+
files_number = language.providers.size + 9 # 2 xml files for all provides, 2 text files for tags, 5 csv files
1919
subject.perform
2020

2121
expect(FileUploadJob).to have_received(:perform_later).exactly(files_number).times
@@ -28,6 +28,7 @@
2828
expect(FileUploadJob).to have_received(:perform_later).with(language.id, :topics)
2929
expect(FileUploadJob).to have_received(:perform_later).with(language.id, :tag_details)
3030
expect(FileUploadJob).to have_received(:perform_later).with(language.id, :topic_tags)
31+
expect(FileUploadJob).to have_received(:perform_later).with(language.id, :topic_authors)
3132
expect(FileUploadJob).to have_received(:perform_later).with(language.id, nil, provider.id)
3233
end
3334
end

0 commit comments

Comments
 (0)