diff options
| -rw-r--r-- | lib/csv_exporter.rb | 14 | ||||
| -rw-r--r-- | lib/uoc_exporter.rb | 21 | ||||
| -rw-r--r-- | test/controllers/exports_controller_test.rb | 18 | ||||
| -rw-r--r-- | test/fixtures/files/underscores.uoc.tex | 9 |
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].} + +} |
