diff options
| author | Miquel Sabaté Solà <mikisabate@gmail.com> | 2025-07-01 08:40:49 +0200 |
|---|---|---|
| committer | Miquel Sabaté Solà <mikisabate@gmail.com> | 2025-07-01 08:53:56 +0200 |
| commit | 34e16b7d7a88013578014be0402ab686b03f235b (patch) | |
| tree | 5ef848d3c44f72ff95a24b123e5da88bc5aef1a2 /lib/plain_exporter.rb | |
| parent | 24714068efc5866999311ad482d54f5c7a90c449 (diff) | |
| download | operum-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.rb | 42 |
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 |
