class Crumpet::Renderer
Attributes
crumbs[R]
options[R]
Public Class Methods
new(crumbs, options = {})
click to toggle source
# File lib/crumpet/renderer.rb, line 12 def initialize(crumbs, options = {}) @crumbs = crumbs @options = options end
render(crumbs, options = {})
click to toggle source
# File lib/crumpet/renderer.rb, line 8 def self.render(crumbs, options = {}) new(crumbs, options).render end
Public Instance Methods
render()
click to toggle source
# File lib/crumpet/renderer.rb, line 17 def render return '' if crumbs.empty? && !option_or_default(:render_when_blank) case option_or_default(:format) when :html output = crumbs.map{ |crumb| render_html(crumb) }.join(option_or_default(:separator)).html_safe output = content_tag(option_or_default(:container).to_sym, output, build_container_options) if option_or_default(:container).present? output when :xml output = crumbs.map{ |crumb| render_xml(crumb) }.join output = content_tag(:crumbs, output) output when :json crumbs.map{ |crumb| render_json(crumb) }.to_json else raise NotImplementedError, "unsupported format: #{option_or_default(:format)}" end end
Private Instance Methods
build_container_options()
click to toggle source
# File lib/crumpet/renderer.rb, line 102 def build_container_options container_options = options.fetch(:container_options, {}) container_options[:class] = Array(container_options[:class]) container_options[:class] << option_or_default(:default_container_class).presence container_options[:class].compact! container_options[:class].uniq! container_options.delete(:class) if container_options[:class].blank? container_options end
build_html_options(crumb)
click to toggle source
# File lib/crumpet/renderer.rb, line 72 def build_html_options(crumb) item_options = options.fetch(:item_options, {}).merge(crumb.item_options) item_options[:class] = Array(item_options[:class]) item_options[:class] << option_or_default(:default_crumb_class).presence item_options[:class] << option_or_default(:first_crumb_class).presence if crumb == crumbs.first item_options[:class] << option_or_default(:last_crumb_class).presence if crumb == crumbs.last item_options[:class].compact! item_options[:class].uniq! item_options.delete(:class) if item_options[:class].blank? item_options end
build_item_options(crumb)
click to toggle source
# File lib/crumpet/renderer.rb, line 86 def build_item_options(crumb) options.fetch(:item_options, {}).merge(crumb.item_options) end
build_wrapper_options(crumb)
click to toggle source
# File lib/crumpet/renderer.rb, line 90 def build_wrapper_options(crumb) wrapper_options = options.fetch(:wrapper_options, {}).merge(crumb.wrapper_options) wrapper_options[:class] = Array(wrapper_options[:class]) wrapper_options[:class] << option_or_default(:default_wrapper_class).presence wrapper_options[:class].compact! wrapper_options[:class].uniq! wrapper_options.delete(:class) if wrapper_options[:class].blank? wrapper_options end
crumb_option_or_default(crumb, option)
click to toggle source
# File lib/crumpet/renderer.rb, line 134 def crumb_option_or_default(crumb, option) crumb.options.fetch(option, option_or_default(option)) end
escape?(crumb)
click to toggle source
# File lib/crumpet/renderer.rb, line 126 def escape?(crumb) crumb_option_or_default(crumb, :escape).present? end
link?(crumb)
click to toggle source
# File lib/crumpet/renderer.rb, line 114 def link?(crumb) crumb.url.present? && ( crumb_option_or_default(crumb, :link) && ( option_or_default(:link_last_crumb) || crumb != crumbs.last ) ) end
option_or_default(option)
click to toggle source
# File lib/crumpet/renderer.rb, line 130 def option_or_default(option) options.fetch(option, Crumpet.config.send(option.to_sym)) end
render_container(content)
click to toggle source
# File lib/crumpet/renderer.rb, line 68 def render_container(content) content_tag(option_or_default(:container).to_sym, content, build_container_options) end
render_html(crumb)
click to toggle source
# File lib/crumpet/renderer.rb, line 38 def render_html(crumb) name = render_name(crumb) item_options = build_html_options(crumb) wrapper_options = build_wrapper_options(crumb) output = link?(crumb) ? link_to(name, crumb.url, item_options) : content_tag(:span, name, item_options) output = content_tag(crumb_option_or_default(crumb, :wrapper), output, wrapper_options) if wrap?(crumb) output end
render_json(crumb)
click to toggle source
# File lib/crumpet/renderer.rb, line 55 def render_json(crumb) output = build_item_options(crumb).merge(name: render_name(crumb)) output = output.merge(href: crumb.url) if link?(crumb) output end
render_name(crumb)
click to toggle source
# File lib/crumpet/renderer.rb, line 61 def render_name(crumb) name = crumb.name name = name.truncate(crumb_option_or_default(crumb, :truncate)) if truncate?(crumb) name = h(name) if escape?(crumb) name.html_safe end
render_xml(crumb)
click to toggle source
# File lib/crumpet/renderer.rb, line 48 def render_xml(crumb) item_options = build_item_options(crumb) item_options = item_options.merge(href: crumb.url) if link?(crumb) content_tag(:crumb, render_name(crumb), item_options) end
truncate?(crumb)
click to toggle source
# File lib/crumpet/renderer.rb, line 118 def truncate?(crumb) crumb_option_or_default(crumb, :truncate) end
wrap?(crumb)
click to toggle source
# File lib/crumpet/renderer.rb, line 122 def wrap?(crumb) crumb_option_or_default(crumb, :wrapper).present? end