Module: Textus::Manifest::Entry::Validators::IndexFilename

Defined in:
lib/textus/manifest/entry/validators/index_filename.rb

Class Method Summary collapse

Class Method Details

.call(entry) ⇒ Object



6
7
8
9
10
11
# File 'lib/textus/manifest/entry/validators/index_filename.rb', line 6

def self.call(entry)
  return if entry.index_filename.nil?

  check_shape!(entry)
  check_extension!(entry)
end

.check_extension!(entry) ⇒ Object

Raises:



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/textus/manifest/entry/validators/index_filename.rb', line 25

def self.check_extension!(entry)
  ext = File.extname(entry.index_filename)
  inferred = Textus::Entry.infer_from_extension(ext)

  if inferred.nil?
    raise UsageError.new(
      "entry '#{entry.key}': index_filename #{entry.index_filename.inspect} has unknown extension #{ext.inspect}",
    )
  end
  return if inferred == entry.format

  raise UsageError.new(
    "entry '#{entry.key}': index_filename extension #{ext.inspect} implies format #{inferred.inspect}, " \
    "but entry format is #{entry.format.inspect}",
  )
end

.check_shape!(entry) ⇒ Object

Raises:



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/textus/manifest/entry/validators/index_filename.rb', line 13

def self.check_shape!(entry)
  raise UsageError.new("entry '#{entry.key}': index_filename requires nested: true") unless entry.nested

  unless entry.index_filename.is_a?(String) && !entry.index_filename.empty?
    raise UsageError.new("entry '#{entry.key}': index_filename must be a non-empty string")
  end

  return unless entry.index_filename.include?("/") || File.basename(entry.index_filename) != entry.index_filename

  raise UsageError.new("entry '#{entry.key}': index_filename must be a bare basename (no slashes)")
end