Class: Textus::Format::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/textus/format/base.rb

Direct Known Subclasses

Json, Markdown, Text, Yaml

Class Method Summary collapse

Class Method Details

.enforce_name_match!(path, meta) ⇒ Object

Raises:



41
42
43
44
45
46
47
48
49
# File 'lib/textus/format/base.rb', line 41

def self.enforce_name_match!(path, meta)
  return unless meta.is_a?(Hash) && meta["name"]

  ext = extensions.first
  basename = File.basename(path, ext)
  return if meta["name"] == basename

  raise BadFrontmatter.new(path, "name '#{meta["name"]}' does not match basename '#{basename}'")
end

.extensionsObject

Raises:

  • (NotImplementedError)


16
17
18
# File 'lib/textus/format/base.rb', line 16

def self.extensions
  raise NotImplementedError.new("#{name}.extensions not implemented")
end

.format_nameObject



62
63
64
# File 'lib/textus/format/base.rb', line 62

def self.format_name
  name.split("::").last.downcase
end

.nested_globObject

Raises:

  • (NotImplementedError)


24
25
26
# File 'lib/textus/format/base.rb', line 24

def self.nested_glob
  raise NotImplementedError.new("#{name}.nested_glob not implemented")
end

.parse(_raw, path: nil) ⇒ Object

Raises:

  • (NotImplementedError)


4
5
6
7
# File 'lib/textus/format/base.rb', line 4

def self.parse(_raw, path: nil)
  _ = path
  raise NotImplementedError.new("#{name}.parse not implemented")
end

.rewrite_name(path, basename) ⇒ Object

rubocop:disable Naming/PredicateMethod



51
52
53
54
55
56
57
58
59
60
# File 'lib/textus/format/base.rb', line 51

def self.rewrite_name(path, basename) # rubocop:disable Naming/PredicateMethod
  raw = File.binread(path)
  parsed = parse(raw, path: path)
  meta = parsed["_meta"] || {}
  return false unless meta.is_a?(Hash) && meta["name"].is_a?(String) && meta["name"] != basename

  new_meta = meta.merge("name" => basename)
  File.binwrite(path, serialize(meta: new_meta, body: parsed["body"] || "", content: parsed["content"]))
  true
end

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

Raises:

  • (NotImplementedError)


9
10
11
12
13
14
# File 'lib/textus/format/base.rb', line 9

def self.serialize(meta: {}, body: "", content: nil)
  _ = meta
  _ = body
  _ = content
  raise NotImplementedError.new("#{name}.serialize not implemented")
end

.serialize_for_put(meta:, body:, content:, path:) ⇒ Object

Raises:

  • (NotImplementedError)


68
69
70
71
72
73
74
# File 'lib/textus/format/base.rb', line 68

def self.serialize_for_put(meta:, body:, content:, path:)
  _ = meta
  _ = body
  _ = content
  _ = path
  raise NotImplementedError.new("#{name}.serialize_for_put not implemented")
end

.validate_against(schema, parsed) ⇒ Object



20
21
22
# File 'lib/textus/format/base.rb', line 20

def self.validate_against(schema, parsed)
  schema.validate!(parsed["_meta"] || {})
end

.validate_path_extension(path, nested) ⇒ Object

Raises:



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/textus/format/base.rb', line 28

def self.validate_path_extension(path, nested)
  ext = File.extname(path)
  if nested
    return if ext == ""

    raise UsageError.new("#{format_name} nested path must not have an extension")
  end

  return if extensions.include?(ext)

  raise UsageError.new("#{format_name} format requires '#{extensions.join("' or '")}' path (got #{ext.inspect})")
end

.validate_raw_entry!(_parsed, _lane) ⇒ Object



66
# File 'lib/textus/format/base.rb', line 66

def self.validate_raw_entry!(_parsed, _lane); end