Module: Textus::Entry

Defined in:
lib/textus/entry.rb,
lib/textus/entry/base.rb,
lib/textus/entry/json.rb,
lib/textus/entry/text.rb,
lib/textus/entry/yaml.rb,
lib/textus/entry/markdown.rb

Overview

Public entry-format dispatcher.

Defined Under Namespace

Classes: Base, Json, Markdown, Text, Yaml

Constant Summary collapse

SEP =
"---".freeze
STRATEGIES =
{
  "markdown" => Markdown,
  "json" => Json,
  "yaml" => Yaml,
  "text" => Text,
}.freeze
EXT_TO_FORMAT =
{
  ".md" => "markdown",
  ".json" => "json",
  ".yaml" => "yaml",
  ".yml" => "yaml",
  ".txt" => "text",
}.freeze

Class Method Summary collapse

Class Method Details

.for_format(format) ⇒ Object



21
22
23
# File 'lib/textus/entry.rb', line 21

def self.for_format(format)
  STRATEGIES.fetch(format.to_s) { raise UsageError.new("unknown entry format: #{format.inspect}") }
end

.formatsObject



29
30
31
# File 'lib/textus/entry.rb', line 29

def self.formats
  EXT_TO_FORMAT.values.uniq
end

.infer_from_extension(ext) ⇒ Object



25
26
27
# File 'lib/textus/entry.rb', line 25

def self.infer_from_extension(ext)
  EXT_TO_FORMAT[ext]
end

.parse(raw, path: nil, format: "markdown") ⇒ Object



33
34
35
# File 'lib/textus/entry.rb', line 33

def self.parse(raw, path: nil, format: "markdown")
  for_format(format).parse(raw, path: path)
end

.serialize(meta: {}, body: "", content: nil, format: "markdown") ⇒ Object



37
38
39
# File 'lib/textus/entry.rb', line 37

def self.serialize(meta: {}, body: "", content: nil, format: "markdown")
  for_format(format).serialize(meta: meta, body: body, content: content)
end