Sha256: d1a04bfa810f3ee1641b59a78d1fae40a22cf346c34fa70584100b83b7ccec26

Contents?: true

Size: 1.16 KB

Versions: 18

Compression:

Stored size: 1.16 KB

Contents

module GuidesStyle18F
  class NamespaceFlattener
    def self.flatten_url_namespace(site, docs)
      flatten_urls(docs) if site.config['flat_namespace']
    end

    def self.flatten_urls(docs)
      flat_to_orig = {}
      docs.each { |page| flatten_page_urls(page, flat_to_orig) }
      check_for_collisions(flat_to_orig)
    end

    def self.flatten_page_urls(page, flat_to_orig)
      orig_url = page.permalink || page.url
      flattened_url = flat_url(orig_url)
      (flat_to_orig[flattened_url] ||= []) << orig_url
      page.data['permalink'] = flattened_url
      (page.data['breadcrumbs'] || []).each do |crumb|
        crumb['url'] = flat_url(crumb['url'])
      end
    end

    def self.flat_url(url)
      url == '/' ? url : "/#{url.split('/')[1..-1].last}/"
    end

    def self.check_for_collisions(flat_to_orig)
      collisions = flat_to_orig.map do |flattened, orig|
        [flattened, orig] if orig.size != 1
      end.compact

      return if collisions.empty?

      messages = collisions.map { |flat, orig| "#{flat}: #{orig.join(', ')}" }
      fail(StandardError, "collisions in flattened namespace between\n  " +
        messages.join("\n  "))
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
guides_style_18f-1.0.6 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-2.0.1 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-2.0.0 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-1.0.4 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-1.0.3 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-1.0.2 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-1.0.1 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-1.0.0 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-0.4.9 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-0.4.8 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-0.4.7 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-0.4.6 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-0.4.5 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-0.4.4 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-0.4.3 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-0.4.2 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-0.4.1 lib/guides_style_18f/namespace_flattener.rb
guides_style_18f-0.4.0 lib/guides_style_18f/namespace_flattener.rb