lib/twitter/bootstrap/rails/breadcrumbs.rb
module Twitter module Bootstrap # Keep current method calls as is using aliases module Breadcrumbs extend ActiveSupport::Concern included do # Used to provide compatibility with breadcrumbs-on-rails gem, if detected # breadcrumbs controller methods won't be overridden. if defined?(::BreadcrumbsOnRails) ::Rails.logger.info <<-EOT.squish BreadcrumbsOnRails detected it won't be overridden. To use methods from this gem you need to call them using bootstrap prefix i.e. add_bootstrap_breadcrumb and render_bootstrap_breadcrumbs. EOT else # Provide backward compatibility with existing code alias_method :add_breadcrumb, :add_bootstrap_breadcrumb class << self alias_method :add_breadcrumb, :add_bootstrap_breadcrumb end end end module ClassMethods def add_bootstrap_breadcrumb(name, url = '', options = {}) options.merge! :klass => self.name before_action options do |controller| controller.send :add_bootstrap_breadcrumb, name, url, options end end end protected def add_bootstrap_breadcrumb(name, url = '', options = {}) @__bs_breadcrumbs ||= [] class_name = options.delete(:klass) || self.class.name if name.is_a? Symbol if url.blank? url_helper = :"#{name}_path" url = url_helper if respond_to?(url_helper) end name = translate_breadcrumb name, class_name end unless name.is_a? String url = polymorphic_path name if url.blank? name = name.to_s end url = eval(url.to_s) if url.is_a?(Symbol) && url =~ /_path|_url|@/ @__bs_breadcrumbs << {:name => name, :url => url, :options => options} end def translate_breadcrumb(name, class_name) scope = [:breadcrumbs] namespace = class_name.underscore.split('/') namespace.last.sub!('_controller', '') scope += namespace I18n.t name, :scope => scope end end end end