aboutsummaryrefslogtreecommitdiff
path: root/lib/plain_exporter.rb
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mikisabate@gmail.com>2025-07-01 08:40:49 +0200
committerMiquel Sabaté Solà <mikisabate@gmail.com>2025-07-01 08:53:56 +0200
commit34e16b7d7a88013578014be0402ab686b03f235b (patch)
tree5ef848d3c44f72ff95a24b123e5da88bc5aef1a2 /lib/plain_exporter.rb
parent24714068efc5866999311ad482d54f5c7a90c449 (diff)
downloadoperum-34e16b7d7a88013578014be0402ab686b03f235b.tar.gz
operum-34e16b7d7a88013578014be0402ab686b03f235b.zip
lib: Introduce the PlainExporter
This class exports things into plain text. It follows a close format to that of the one for UOC, but without any formatting. Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'lib/plain_exporter.rb')
-rw-r--r--lib/plain_exporter.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/lib/plain_exporter.rb b/lib/plain_exporter.rb
new file mode 100644
index 0000000..514d243
--- /dev/null
+++ b/lib/plain_exporter.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+# Plain text exporter.
+class PlainExporter < BaseExporter
+ def export
+ @things.map { |thing| "#{head(thing:)} #{body(thing:)}".strip }.join("\n")
+ end
+
+ protected
+
+ # Returns the same text as the plain exporter does not have formatting.
+ def emph(text:)
+ text
+ end
+
+ # Returns the same text as the plain exporter does not have formatting.
+ def upper_case(text:)
+ text
+ end
+
+ # Returns the same text with underscores stripped, as the plain exporter does
+ # not have formatting.
+ def parse_title(title:)
+ title.delete('_')
+ end
+
+ # Returns text with information on the publisher, notes, year, address, etc;
+ # if available.
+ def body(thing:)
+ str = ''
+
+ if thing.publisher.present?
+ str += thing.note.present? ? "#{thing.note}. #{thing.publisher}" : thing.publisher
+ end
+
+ if thing.address.present?
+ str + ", #{thing.address}: #{thing.year}."
+ else
+ "#{str}."
+ end
+ end
+end