From bdbf69e0e8ef1d4bf592181b54de7ed6ba8abf3e Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Thu, 29 Sep 2016 15:12:38 -0300 Subject: [PATCH] breadcrumbs: return links in api_content --- plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb | 27 +++++++++++++++++++++++++++ plugins/breadcrumbs/test/unit/content_breadcrumbs_block_test.rb | 15 +++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb b/plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb index c68c44d..0c4d227 100644 --- a/plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb +++ b/plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb @@ -26,4 +26,31 @@ class BreadcrumbsPlugin::ContentBreadcrumbsBlock < Block false end + def api_content + links = [] + links << profile_link + links << page_links + { links: links.compact.flatten } + end + + private + + def profile_link + return nil if (api_content_params || {})[:profile].blank? + profile = environment.profiles.find_by(identifier: api_content_params[:profile]) + return nil if profile.blank? + { :name => profile.name, :url => "/#{profile.identifier}" } + end + + def page_links + return nil if (api_content_params || {})[:page].blank? + page = owner.articles.find_by(path: api_content_params[:page]) + return nil if page.blank? + page_trail(page) + end + + def page_trail(page) + links = page.ancestors.reverse.map { |p| { :name => p.title, :url => p.full_path } } || [] + links << { :name => page.title, :url => page.full_path } + end end diff --git a/plugins/breadcrumbs/test/unit/content_breadcrumbs_block_test.rb b/plugins/breadcrumbs/test/unit/content_breadcrumbs_block_test.rb index d8c8df0..9c6b678 100644 --- a/plugins/breadcrumbs/test/unit/content_breadcrumbs_block_test.rb +++ b/plugins/breadcrumbs/test/unit/content_breadcrumbs_block_test.rb @@ -5,9 +5,13 @@ class ContentBreadcrumbsBlockTest < ActiveSupport::TestCase include NoosferoTestHelper def setup - @block = BreadcrumbsPlugin::ContentBreadcrumbsBlock.new + @profile = fast_create(Profile) + box = Box.create!(owner: profile) + @block = fast_create(BreadcrumbsPlugin::ContentBreadcrumbsBlock, box_id: box.id) end + attr_accessor :block, :profile + should 'has a description' do assert_not_equal Block.description, BreadcrumbsPlugin::ContentBreadcrumbsBlock.description end @@ -16,11 +20,18 @@ class ContentBreadcrumbsBlockTest < ActiveSupport::TestCase assert @block.help end - should 'not be cacheable' do refute @block.cacheable? end + should 'return page links in api_content' do + folder = fast_create(Folder, profile_id: profile.id, name: 'folder') + article = Article.create!(profile: profile, parent: folder, name: 'child') + block.api_content_params = { page: article.path, profile: profile.identifier } + links = block.api_content[:links] + assert_equal [profile.name, 'folder', 'child'], links.map {|l| l[:name]} + assert_equal article.full_path, links.last[:url] + end end require 'boxes_helper' -- libgit2 0.21.2