Module: Bridgetown::Routes::Manifest
- Defined in:
- lib/bridgetown-routes/manifest.rb
Class Method Summary collapse
-
.generate_manifest(site) ⇒ Object
rubocop:todo Metrics/AbcSize, Metrics/CyclomaticComplexity.
- .locale_for(slug, site) ⇒ Object
- .sort_routes!(routes) ⇒ Object
Class Method Details
.generate_manifest(site) ⇒ Object
rubocop:todo Metrics/AbcSize, Metrics/CyclomaticComplexity
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/bridgetown-routes/manifest.rb', line 7 def generate_manifest(site) # rubocop:todo Metrics/AbcSize, Metrics/CyclomaticComplexity return @route_manifest[site.label] if @route_manifest && Bridgetown.env.production? new_manifest = [] routable_extensions = site.config.routes.extensions.join(",") site.config.routes.source_paths.each do |routes_dir| routes_dir = File.(routes_dir, site.config.source) # @type [Array] routes = Dir.glob( routes_dir + "/**/*.{#{routable_extensions}}" ).filter_map do |file| if File.basename(file).start_with?("_", ".") || File.basename(file, ".*").end_with?(".test") next end file_slug, segment_keys = file_slug_and_segments(site, routes_dir, file) # generate localized file slugs localized_file_slugs = generate_localized_file_slugs(site, file_slug) [file, localized_file_slugs, segment_keys] end new_manifest += sort_routes!(routes) end @route_manifest ||= {} @route_manifest[site.label] = new_manifest end |
.locale_for(slug, site) ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/bridgetown-routes/manifest.rb', line 57 def locale_for(slug, site) possible_locale_segment = slug.split("/").first.to_sym if site.config.available_locales.include? possible_locale_segment possible_locale_segment else site.config.default_locale end end |
.sort_routes!(routes) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/bridgetown-routes/manifest.rb', line 40 def sort_routes!(routes) routes.sort! do |route_a, route_b| # @type [String] slug_a = route_a[1][0] # @type [String] slug_b = route_b[1][0] # @type [Integer] weight1 = slug_a.count("/") <=> slug_b.count("/") if weight1.zero? slug_b.count("/:") <=> slug_a.count("/:") else weight1 end end.reverse! end |