aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/csv_exporter.rb14
-rw-r--r--lib/uoc_exporter.rb21
-rw-r--r--test/controllers/exports_controller_test.rb18
-rw-r--r--test/fixtures/files/underscores.uoc.tex9
4 files changed, 58 insertions, 4 deletions
diff --git a/lib/csv_exporter.rb b/lib/csv_exporter.rb
index a44815d..0463ba6 100644
--- a/lib/csv_exporter.rb
+++ b/lib/csv_exporter.rb
@@ -12,10 +12,18 @@ class CsvExporter < BaseExporter
str
end
+ protected
+
+ # Generate a new CSV line from the given `thing`.
def thing_to_csv(thing:)
- CSV.generate_line([thing.target, thing.authors, thing.editors, thing.year, thing.title,
- thing.note, thing.insideof, thing.url, thing.publisher, thing.kind,
- thing.access, thing.bought_at],
+ CSV.generate_line([thing.target, thing.authors, thing.editors, thing.year,
+ clean_title(title: thing.title), thing.note, thing.insideof,
+ thing.url, thing.publisher, thing.kind, thing.access, thing.bought_at],
quote_empty: false)
end
+
+ # Clean the given title from underscores and other such characters.
+ def clean_title(title:)
+ title.delete('_')
+ end
end
diff --git a/lib/uoc_exporter.rb b/lib/uoc_exporter.rb
index 9a83d7c..e8dcc62 100644
--- a/lib/uoc_exporter.rb
+++ b/lib/uoc_exporter.rb
@@ -16,7 +16,7 @@ class UocExporter < BaseExporter
# Returns the head of a line, containing authors, year, title and, if
# available, the "inside of" information.
def head(thing:)
- str = "#{parse_authors(thing:)} (#{thing.year}). \\emph{#{thing.title}}."
+ str = "#{parse_authors(thing:)} (#{thing.year}). #{parse_title(title: thing.title)}."
if thing.insideof.present?
str += " #{inside_of(thing.insideof)}"
@@ -26,6 +26,25 @@ class UocExporter < BaseExporter
str
end
+ # Returns the title without underscores and with the expected formatting.
+ def parse_title(title:)
+ str = ''
+ seen = false
+
+ # I'm sure there is a clever (and comboluted) regexp that can also achieve
+ # this, but after some tries I decided to cut the crap.
+ title.each_char do |c|
+ if c == '_'
+ str += seen ? '\emph{' : '}'
+ seen = !seen
+ else
+ str += c
+ end
+ end
+
+ "\\emph{#{str}}"
+ end
+
# Parse the authors as delivered by `thing.authors` and render them in the
# proper format.
def parse_authors(thing:)
diff --git a/test/controllers/exports_controller_test.rb b/test/controllers/exports_controller_test.rb
index 9e69df8..eefff6f 100644
--- a/test/controllers/exports_controller_test.rb
+++ b/test/controllers/exports_controller_test.rb
@@ -15,10 +15,28 @@ class ExportsControllerTest < ActionDispatch::IntegrationTest
assert_equal 'text/csv', @response.media_type
end
+ test 'csv: underscore is removed for the title' do
+ things(:thing1).update!(title: 'This is a _title_ with _many_ underscores')
+
+ get search_exports_url(0, format: 'csv')
+
+ body = @response.body.split("\n")
+
+ assert_equal 'This is a title with many underscores', body.last.split(',')[7]
+ end
+
test 'uoc: works' do
get search_exports_url(0, format: 'uoc')
assert_equal @response.body, file_fixture('all.uoc.tex').read
assert_equal 'application/x-tex', @response.media_type
end
+
+ test 'uoc: underscore is supported for the title' do
+ things(:thing1).update!(title: 'This is a _title_ with _many_ underscores')
+
+ get search_exports_url(0, format: 'uoc')
+
+ assert_equal @response.body, file_fixture('underscores.uoc.tex').read
+ end
end
diff --git a/test/fixtures/files/underscores.uoc.tex b/test/fixtures/files/underscores.uoc.tex
new file mode 100644
index 0000000..0c86890
--- /dev/null
+++ b/test/fixtures/files/underscores.uoc.tex
@@ -0,0 +1,9 @@
+\chapter{Bibliografia}
+
+{\setlength{\parskip}{-0.3cm}
+
+\hypertarget{target2}{\textsc{Sabaté}, Miquel; \textsc{Nom} (eds.) (2024). \emph{This is a 2}. Dins de \emph{Some other thing}, 22-24. This is a note 2. Publisher 2, Address 2: 2024.}
+
+\\~\\\hypertarget{target1}{\textsc{Sabaté}, Miquel; \textsc{Smith}, John; \textsc{cognom2}, Nom cognom1; \textsc{cognom3 cognom4}, Nom (2024). \emph{This is a }title\emph{ with }many\emph{ underscores}. Dins de \emph{Some other thing}, 22-24. This is a note 1. Publisher 1. [\url{http://example.com}]. [Última data de consulta: 24 de febrer de 2024].}
+
+}