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
12
# File 'lib/textus/manifest/entry/validators/index_filename.rb', line 6

def self.call(entry)
  index_filename = entry.respond_to?(:index_filename) ? entry.index_filename : entry.raw["index_filename"]
  return if index_filename.nil?

  check_shape!(entry, index_filename)
  check_extension!(entry, index_filename)
end

.check_extension!(entry, index_filename) ⇒ Object

Raises:



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

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

  if inferred.nil?
    raise UsageError.new(
      "entry '#{entry.key}': index_filename #{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, index_filename) ⇒ Object

Raises:



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

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

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

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

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