lib/crumpet/renderer.rb in crumpet-0.1.1 vs lib/crumpet/renderer.rb in crumpet-0.1.2
- old
+ new
@@ -10,37 +10,37 @@
end
def render
case option_or_default(:format)
when :html
- output = repository.map{ |crumb| render_html(crumb) }.join(option_or_default(:separator)).html_safe
+ 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 = repository.map{ |crumb| render_xml(crumb) }.join
+ output = crumbs.map{ |crumb| render_xml(crumb) }.join
output = content_tag(:crumbs, output)
output
when :json
- repository.map{ |crumb| render_json(crumb) }.to_json
+ crumbs.map{ |crumb| render_json(crumb) }.to_json
else
raise NotImplementedError, "unsupported format: #{option_or_default(:format)}"
end
end
private
- def repository
- Crumpet.repository
+ def crumbs
+ Crumpet.crumbs
end
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.wrapper, output, wrapper_options) if crumb.wrap?
+ output = content_tag(crumb_option_or_default(crumb, :wrapper), output, wrapper_options) if wrap?(crumb)
output
end
def render_xml(crumb)
item_options = build_item_options(crumb)
@@ -55,12 +55,12 @@
output
end
def render_name(crumb)
name = crumb.name
- name = name.truncate(crumb.truncate) if crumb.truncate?
- name = h(name) if crumb.escape?
+ name = name.truncate(crumb_option_or_default(crumb, :truncate)) if truncate?(crumb)
+ name = h(name) if escape?(crumb)
name.html_safe
end
def render_container(content)
content_tag(option_or_default(:container).to_sym, content, build_container_options)
@@ -69,12 +69,12 @@
def build_html_options(crumb)
item_options = options.fetch(:item_options, {}).merge(crumb.item_options)
item_options[:class] = Array(item_options.fetch(:class, []))
item_options[:class] << option_or_default(:default_crumb_class).presence
- item_options[:class] << option_or_default(:first_crumb_class).presence if crumb == repository.first
- item_options[:class] << option_or_default(:last_crumb_class).presence if crumb == repository.last
+ 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
@@ -107,13 +107,29 @@
container_options
end
def link?(crumb)
- option_or_default(:link) && crumb.link? && ( option_or_default(:link_last_crumb) || crumb != repository.last )
+ crumb.url.present? && ( crumb_option_or_default(crumb, :link) && ( option_or_default(:link_last_crumb) || crumb != crumbs.last ) )
end
+ def truncate?(crumb)
+ crumb_option_or_default(crumb, :truncate)
+ end
+
+ def wrap?(crumb)
+ crumb_option_or_default(crumb, :wrapper).present?
+ end
+
+ def escape?(crumb)
+ crumb_option_or_default(crumb, :escape).present?
+ end
+
def option_or_default(option)
options.fetch(option, Crumpet.config.send(option.to_sym)).clone
+ end
+
+ def crumb_option_or_default(crumb, option)
+ crumb.options.fetch(option, option_or_default(option))
end
end
end