Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Let #breadcrumbs_trail raise for full identifiers #783

Merged
merged 1 commit into from Dec 20, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 10 additions & 0 deletions lib/nanoc/helpers/breadcrumbs.rb
Expand Up @@ -2,6 +2,12 @@ module Nanoc::Helpers
# Provides support for breadcrumbs, which allow the user to go up in the
# page hierarchy.
module Breadcrumbs
class CannotGetBreadcrumbsForNonLegacyItem < Nanoc::Int::Errors::Generic
def initialize(identifier)
super("You cannot build a breadcrumbs trail for an item that has a “full” identifier (#{identifier}). Doing so is only possible for items that have a legacy identifier.")
end
end

# Creates a breadcrumb trail leading from the current item to its parent,
# to its parent’s parent, etc, until the root item is reached. This
# function does not require that each intermediate item exist; for
Expand All @@ -11,6 +17,10 @@ module Breadcrumbs
# @return [Array] The breadcrumbs, starting with the root item and ending
# with the item itself
def breadcrumbs_trail
unless @item.identifier.legacy?
raise CannotGetBreadcrumbsForNonLegacyItem.new(@item.identifier)
end

trail = []
idx_start = 0

Expand Down
29 changes: 21 additions & 8 deletions test/helpers/test_breadcrumbs.rb
Expand Up @@ -3,7 +3,7 @@ class Nanoc::Helpers::BreadcrumbsTest < Nanoc::TestCase

def test_breadcrumbs_trail_at_root
@items = Nanoc::Int::IdentifiableCollection.new({})
item = Nanoc::Int::Item.new('root', {}, '/')
item = Nanoc::Int::Item.new('root', {}, Nanoc::Identifier.new('/', type: :legacy))
@items << item
@item = item

Expand All @@ -12,8 +12,8 @@ def test_breadcrumbs_trail_at_root

def test_breadcrumbs_trail_with_1_parent
@items = Nanoc::Int::IdentifiableCollection.new({})
parent_item = Nanoc::Int::Item.new('parent', {}, '/')
child_item = Nanoc::Int::Item.new('child', {}, '/foo/')
parent_item = Nanoc::Int::Item.new('parent', {}, Nanoc::Identifier.new('/', type: :legacy))
child_item = Nanoc::Int::Item.new('child', {}, Nanoc::Identifier.new('/foo/', type: :legacy))
@items << parent_item
@items << child_item
@item = child_item
Expand All @@ -23,9 +23,9 @@ def test_breadcrumbs_trail_with_1_parent

def test_breadcrumbs_trail_with_many_parents
@items = Nanoc::Int::IdentifiableCollection.new({})
grandparent_item = Nanoc::Int::Item.new('grandparent', {}, '/')
parent_item = Nanoc::Int::Item.new('parent', {}, '/foo/')
child_item = Nanoc::Int::Item.new('child', {}, '/foo/bar/')
grandparent_item = Nanoc::Int::Item.new('grandparent', {}, Nanoc::Identifier.new('/', type: :legacy))
parent_item = Nanoc::Int::Item.new('parent', {}, Nanoc::Identifier.new('/foo/', type: :legacy))
child_item = Nanoc::Int::Item.new('child', {}, Nanoc::Identifier.new('/foo/bar/', type: :legacy))
@items << grandparent_item
@items << parent_item
@items << child_item
Expand All @@ -36,12 +36,25 @@ def test_breadcrumbs_trail_with_many_parents

def test_breadcrumbs_trail_with_nils
@items = Nanoc::Int::IdentifiableCollection.new({})
grandparent_item = Nanoc::Int::Item.new('grandparent', {}, '/')
child_item = Nanoc::Int::Item.new('child', {}, '/foo/bar/')
grandparent_item = Nanoc::Int::Item.new('grandparent', {}, Nanoc::Identifier.new('/', type: :legacy))
child_item = Nanoc::Int::Item.new('child', {}, Nanoc::Identifier.new('/foo/bar/', type: :legacy))
@items << grandparent_item
@items << child_item
@item = child_item

assert_equal [grandparent_item, nil, child_item], breadcrumbs_trail
end

def test_breadcrumbs_trail_with_non_legacy_identifiers
@items = Nanoc::Int::IdentifiableCollection.new({})
parent_item = Nanoc::Int::Item.new('parent', {}, '/')
child_item = Nanoc::Int::Item.new('child', {}, '/foo/')
@items << parent_item
@items << child_item
@item = child_item

assert_raises Nanoc::Helpers::Breadcrumbs::CannotGetBreadcrumbsForNonLegacyItem do
breadcrumbs_trail
end
end
end