Module: JsxRosetta::PagesRouting::Scanner

Defined in:
lib/jsx_rosetta/pages_routing.rb

Overview

Scans a directory and classifies each file as a Route or Skipped.

Class Method Summary collapse

Class Method Details

.scan(dir, extensions: DEFAULT_EXTENSIONS) ⇒ Object

Raises:

  • (ArgumentError)


254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
# File 'lib/jsx_rosetta/pages_routing.rb', line 254

def scan(dir, extensions: DEFAULT_EXTENSIONS)
  raise ArgumentError, "pages-routes: #{dir.inspect} is not a directory" unless File.directory?(dir)

  routes = []
  skipped = []
  collect_files(dir, extensions).each do |rel_path|
    segments = path_segments(rel_path)
    leaf = segments.last
    if (reason = SKIPPED_LEAVES[leaf])
      skipped << Skipped.new(source_path: rel_path, reason: reason)
    elsif ERROR_PAGE_LEAVES.key?(leaf)
      routes << build_error_route(leaf, rel_path)
    elsif LAYOUT_LEAVES.key?(leaf)
      routes << build_layout_route(leaf, rel_path)
    else
      routes << build_route(segments, rel_path)
    end
  end
  [routes, skipped]
end