crummy 1.6.0 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -1
- data/CHANGELOG +34 -0
- data/Gemfile +3 -0
- data/MIT-LICENSE +1 -1
- data/README.md +162 -0
- data/Rakefile +3 -24
- data/crummy.gemspec +28 -0
- data/lib/crummy.rb +2 -0
- data/lib/crummy/standard_renderer.rb +29 -6
- data/lib/crummy/version.rb +6 -0
- data/test/standard_renderer_test.rb +71 -0
- metadata +59 -9
- data/README.textile +0 -158
- data/VERSION +0 -1
- data/tasks/crummy_tasks.rake +0 -4
data/.gitignore
CHANGED
data/CHANGELOG
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
1.7.0
|
2
|
+
* [ADDED] Added option for google microdata
|
3
|
+
* [REFACTORED] Cleaned up development internals
|
4
|
+
|
5
|
+
1.6.0
|
6
|
+
* [FIXED] A fix for the escaped html problem in :html_list
|
7
|
+
|
8
|
+
1.5
|
9
|
+
* [ADDED] Global configuration options
|
10
|
+
* [REFACTORED] HTML now uses content_tags
|
11
|
+
|
12
|
+
1.3.6
|
13
|
+
* [FIXED] :li_class fixed in StandardRenderer#crumb_to_html_list
|
14
|
+
|
15
|
+
1.3.5
|
16
|
+
* [FIXED] Spacing in name argument was causing errors.
|
17
|
+
* [FIXED] Bug where everything was getting parsed as an Array.
|
18
|
+
|
19
|
+
1.3
|
20
|
+
* [FIXED] html_safe! is no longer called by default. That's the user's prerogative to do now.
|
21
|
+
* [ADDED] Allow record to respond to to_s even if you pass a url or block.
|
22
|
+
* [ADDED] Allow name to be a proc or lambda method
|
23
|
+
* [ADDED] clear crumbs as before filter
|
24
|
+
|
25
|
+
1.2
|
26
|
+
* [ADDED] html_list format option
|
27
|
+
* [FIXED] Bug with Passenger and REE deployments
|
28
|
+
|
29
|
+
1.1.1
|
30
|
+
|
31
|
+
* [FIXED] issue with undefined method escape_once for Rails 3.
|
32
|
+
* [FIXED] spelling of separator
|
33
|
+
|
34
|
+
1.1.0
|
data/Gemfile
ADDED
data/MIT-LICENSE
CHANGED
data/README.md
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
# Crummy
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/crummy.png)](http://badge.fury.io/rb/crummy)
|
4
|
+
[![Build Status](https://secure.travis-ci.org/zachinglis/crummy.png?branch=master)](http://travis-ci.org/zachinglis/crummy)
|
5
|
+
[![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/zachinglis/crummy)
|
6
|
+
|
7
|
+
Crummy is a simple and tasty way to add breadcrumbs to your Rails applications.
|
8
|
+
|
9
|
+
## Install
|
10
|
+
|
11
|
+
Simply add the dependency to your Gemfile:
|
12
|
+
|
13
|
+
gem "crummy", "~> 1.6.0"
|
14
|
+
|
15
|
+
# Example
|
16
|
+
|
17
|
+
In your controllers you may add\_crumb either like a before\_filter or
|
18
|
+
within a method (It is also available to views).
|
19
|
+
|
20
|
+
class ApplicationController
|
21
|
+
add_crumb "Home", '/'
|
22
|
+
end
|
23
|
+
|
24
|
+
class BusinessController < ApplicationController
|
25
|
+
add_crumb("Businesses") { |instance| instance.send :businesses_path }
|
26
|
+
add_crumb("Comments", :only => "comments") { |instance| instance.send :businesses_comments_path }
|
27
|
+
before_filter :load_comment, :only => "show"
|
28
|
+
add_crumb :comment, :only => "show"
|
29
|
+
|
30
|
+
# Example for nested routes:
|
31
|
+
add_crumb(:document) { [:account, :document] }
|
32
|
+
|
33
|
+
def show
|
34
|
+
add_crumb @business.display_name, @business
|
35
|
+
end
|
36
|
+
|
37
|
+
def load_comment
|
38
|
+
@comment = Comment.find(params[:id])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Then in your view:
|
43
|
+
|
44
|
+
<%= render_crumbs %>
|
45
|
+
|
46
|
+
## Options for render\_crumbs
|
47
|
+
|
48
|
+
render\_crumbs renders the list of crumbs as either html or xml
|
49
|
+
|
50
|
+
It takes 3 options
|
51
|
+
|
52
|
+
The output format. Can either be :xml or :html or :html\_list. Defaults
|
53
|
+
to :html
|
54
|
+
|
55
|
+
:format => (:html|:html_list|:xml)
|
56
|
+
|
57
|
+
The separator text. It does not assume you want spaces on either side so
|
58
|
+
you must specify. Defaults to `»` for :html and
|
59
|
+
`<crumb>` for :xml
|
60
|
+
|
61
|
+
:separator => string
|
62
|
+
|
63
|
+
Render links in the output. Defaults to *true*
|
64
|
+
|
65
|
+
:links => boolean
|
66
|
+
|
67
|
+
:skip_if_blank => true
|
68
|
+
|
69
|
+
Render
|
70
|
+
[Richsnipet](http:/support.google.com/webmasters/bin/answer.py?hl=en&answer=99170&topic=1088472&ctx=topic/)
|
71
|
+
Default to *false*
|
72
|
+
|
73
|
+
:microdata => true
|
74
|
+
|
75
|
+
With this option, output will be blank if there are no breadcrumbs.
|
76
|
+
|
77
|
+
### Examples
|
78
|
+
|
79
|
+
render_crumbs #=> <a href="/">Home</a> » <a href="/businesses">Businesses</a>
|
80
|
+
render_crumbs :separator => ' | ' #=> <a href="/">Home</a> | <a href="/businesses">Businesses</a>
|
81
|
+
render_crumbs :format => :xml #=> <crumb href="/">Home</crumb><crumb href="/businesses">Businesses</crumb>
|
82
|
+
render_crumbs :format => :html_list #=> <ul class="" id=""><li class=""><a href="/">Home</a></li><li class=""><a href="/">Businesses</a></li></ul>
|
83
|
+
render_crumbs :format => :html_list, :microdata => true
|
84
|
+
#=> <ul class="" id=""><li class="" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
|
85
|
+
# <a href="/" itemprop="url"><span itemprop="title">Home</span></a></li></ul>
|
86
|
+
|
87
|
+
A crumb with a nil argument for the link will output an unlinked crumb.
|
88
|
+
|
89
|
+
With `:format => :html_list` you can specify additional `params:
|
90
|
+
:active_li_class, :li_class, :ul_class, :ul_id`
|
91
|
+
|
92
|
+
### App-wide configuration
|
93
|
+
|
94
|
+
You have the option to pre-configure any of the Crummy options in an
|
95
|
+
application-wide configuration. The options above are available to
|
96
|
+
configure, with the exception of `:separator`, as well as many others.
|
97
|
+
|
98
|
+
The biggest difference is that `:separator` is not an option. Instead,
|
99
|
+
you have format-specific configuration options: `:html_separator`,
|
100
|
+
`:xml_separator`, and `:html_list_separator`. `:separator` can still be
|
101
|
+
overridden in the view.
|
102
|
+
|
103
|
+
Insert the following in a file named `config/initializers/crummy.rb`:
|
104
|
+
|
105
|
+
Crummy.configure do |config|
|
106
|
+
config.format = :xml
|
107
|
+
end
|
108
|
+
|
109
|
+
Possible parameters for configuration are:
|
110
|
+
|
111
|
+
:format
|
112
|
+
:links
|
113
|
+
:skip_if_blank
|
114
|
+
:html_separator
|
115
|
+
:xml_separator
|
116
|
+
:html_list_separator
|
117
|
+
:first_class
|
118
|
+
:last_class
|
119
|
+
:ul_id
|
120
|
+
:ul_class
|
121
|
+
:li_class
|
122
|
+
:active_li_class
|
123
|
+
:microdata
|
124
|
+
|
125
|
+
See `lib/crummy.rb` for a list of these parameters and their defaults.
|
126
|
+
|
127
|
+
## Notes
|
128
|
+
|
129
|
+
Test library is at [Crummy Test](https://github.com/zachinglis/crummy-test)
|
130
|
+
|
131
|
+
## Todo
|
132
|
+
|
133
|
+
- Accept collections of models as a single argument
|
134
|
+
- Accept instances of models as a single argument
|
135
|
+
- Allow for variables in names. (The workaround is to do your own
|
136
|
+
before\_filter for that currently)
|
137
|
+
- Make a crumbs? type method
|
138
|
+
|
139
|
+
## Credits
|
140
|
+
|
141
|
+
- [Zach Inglis](http://zachinglis.com) of [London
|
142
|
+
Made](http://londonmade.co.uk)
|
143
|
+
- [Rein Henrichs](http://reinh.com)
|
144
|
+
- [Les Hill](http://blog.leshill.org/)
|
145
|
+
- [Sandro Turriate](http://turriate.com/)
|
146
|
+
- [Przemysław
|
147
|
+
Kowalczyk](http://szeryf.wordpress.com/2008/06/13/easy-and-flexible-breadcrumbs-for-rails/)
|
148
|
+
- feature ideas
|
149
|
+
- [Sharad Jain](http://github.com/sjain)
|
150
|
+
- [Max Riveiro](http://github.com/kavu)
|
151
|
+
- [Kamil K. Lemański](http://kml.jogger.pl)
|
152
|
+
- [Brian Cobb](http://bcobb.net/)
|
153
|
+
- [Kir Shatrov](http://github.com/shatrov) ([Evrone
|
154
|
+
company](http://evrone.com))
|
155
|
+
- [sugilog](http://github.com/sugilog)
|
156
|
+
- [Trond Arve Nordheim](http://github.com/tanordheim)
|
157
|
+
- [Jan Szumiec](http://github.com/jasiek)
|
158
|
+
- [Jeff Browning](http://github.com/jbrowning)
|
159
|
+
- [Bill Turner](http://github.com/billturner)
|
160
|
+
- [Andrew Nesbitt](http://github.com/andrew)
|
161
|
+
|
162
|
+
**Copyright 2008-2013 Zach Inglis, released under the MIT license**
|
data/Rakefile
CHANGED
@@ -1,25 +1,9 @@
|
|
1
|
-
|
2
|
-
require '
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require 'bundler/gem_tasks'
|
3
3
|
|
4
4
|
desc 'Default: run unit tests.'
|
5
5
|
task :default => :test
|
6
6
|
|
7
|
-
begin
|
8
|
-
require 'jeweler'
|
9
|
-
Jeweler::Tasks.new do |gem|
|
10
|
-
gem.name = "crummy"
|
11
|
-
gem.summary = %Q{Tasty breadcrumbs!}
|
12
|
-
gem.description = %Q{Crummy is a simple and tasty way to add breadcrumbs to your Rails applications.}
|
13
|
-
gem.email = "zach+crummy@londonmade.co.uk"
|
14
|
-
gem.homepage = "http://github.com/zachinglis/crummy"
|
15
|
-
gem.authors = ["Zach Inglis"]
|
16
|
-
gem.files = FileList['lib/**/*.rb','tasks/*.rake','init.rb','MIT-LICENSE','Rakefile','README.textile','VERSION', '.gitignore']
|
17
|
-
end
|
18
|
-
Jeweler::GemcutterTasks.new
|
19
|
-
rescue LoadError
|
20
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
21
|
-
end
|
22
|
-
|
23
7
|
require 'rake/testtask'
|
24
8
|
desc 'Test the crummy plugin.'
|
25
9
|
Rake::TestTask.new(:test) do |t|
|
@@ -28,12 +12,7 @@ Rake::TestTask.new(:test) do |t|
|
|
28
12
|
t.verbose = true
|
29
13
|
end
|
30
14
|
|
31
|
-
|
32
|
-
# gem 'hanna'
|
33
|
-
# require 'hanna/rdoctask'
|
34
|
-
# rescue LoadError
|
35
|
-
require 'rdoc/task'
|
36
|
-
# end
|
15
|
+
require 'rdoc/task'
|
37
16
|
|
38
17
|
desc 'Generate documentation for the crummy plugin.'
|
39
18
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
data/crummy.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "crummy/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "crummy"
|
7
|
+
s.version = Crummy::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Zach Inglis", "Andrew Nesbitt"]
|
12
|
+
s.summary = "Tasty breadcrumbs!"
|
13
|
+
s.description = "Crummy is a simple and tasty way to add breadcrumbs to your Rails applications."
|
14
|
+
s.email = "zach+crummy@londonmade.co.uk"
|
15
|
+
s.extra_rdoc_files = ["README.md"]
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
|
20
|
+
s.homepage = "http://github.com/zachinglis/crummy"
|
21
|
+
s.require_paths = [%q{lib}]
|
22
|
+
s.rubygems_version = %q{1.8.8}
|
23
|
+
|
24
|
+
s.add_development_dependency 'rake'
|
25
|
+
s.add_development_dependency 'bundler', '~> 1.0'
|
26
|
+
s.add_development_dependency 'activesupport'
|
27
|
+
s.add_development_dependency 'actionpack'
|
28
|
+
end
|
data/lib/crummy.rb
CHANGED
@@ -21,6 +21,7 @@ module Crummy
|
|
21
21
|
attr_accessor :ul_class
|
22
22
|
attr_accessor :li_class
|
23
23
|
attr_accessor :active_li_class
|
24
|
+
attr_accessor :microdata
|
24
25
|
|
25
26
|
def initialize
|
26
27
|
@format = :html
|
@@ -35,6 +36,7 @@ module Crummy
|
|
35
36
|
@ul_class = ''
|
36
37
|
@li_class = ''
|
37
38
|
@active_li_class = ''
|
39
|
+
@microdata = false
|
38
40
|
end
|
39
41
|
end
|
40
42
|
|
@@ -4,6 +4,7 @@ module Crummy
|
|
4
4
|
class StandardRenderer
|
5
5
|
include ActionView::Helpers::UrlHelper
|
6
6
|
include ActionView::Helpers::TagHelper unless self.included_modules.include?(ActionView::Helpers::TagHelper)
|
7
|
+
ActionView::Helpers::TagHelper::BOOLEAN_ATTRIBUTES.merge([:itemscope].to_set)
|
7
8
|
|
8
9
|
# Render the list of crumbs as either html or xml
|
9
10
|
#
|
@@ -34,11 +35,12 @@ module Crummy
|
|
34
35
|
options[:links] ||= Crummy.configuration.links
|
35
36
|
options[:first_class] ||= Crummy.configuration.first_class
|
36
37
|
options[:last_class] ||= Crummy.configuration.last_class
|
38
|
+
options[:microdata] ||= Crummy.configuration.microdata
|
37
39
|
|
38
40
|
case options[:format]
|
39
41
|
when :html
|
40
42
|
crumb_string = crumbs.collect do |crumb|
|
41
|
-
crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last))
|
43
|
+
crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata])
|
42
44
|
end.reduce { |memo, obj| memo << options[:separator] << obj }
|
43
45
|
crumb_string
|
44
46
|
when :html_list
|
@@ -48,7 +50,7 @@ module Crummy
|
|
48
50
|
options[:ul_class] ||= Crummy.configuration.ul_class
|
49
51
|
options[:ul_id] ||= Crummy.configuration.ul_id
|
50
52
|
crumb_string = crumbs.collect do |crumb|
|
51
|
-
crumb_to_html_list(crumb, options[:links], options[:li_class], options[:active_li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last))
|
53
|
+
crumb_to_html_list(crumb, options[:links], options[:li_class], options[:active_li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata])
|
52
54
|
end.reduce { |memo, obj| memo << options[:separator] << obj }
|
53
55
|
crumb_string = content_tag(:ul, crumb_string, :class => options[:ul_class], :id => options[:ul_id])
|
54
56
|
crumb_string
|
@@ -63,27 +65,48 @@ module Crummy
|
|
63
65
|
|
64
66
|
private
|
65
67
|
|
66
|
-
def crumb_to_html(crumb, links, first_class, last_class, is_first, is_last)
|
68
|
+
def crumb_to_html(crumb, links, first_class, last_class, is_first, is_last, with_microdata)
|
67
69
|
html_classes = []
|
68
70
|
html_classes << first_class if is_first
|
69
71
|
html_classes << last_class if is_last
|
70
72
|
name, url = crumb
|
71
|
-
url && links ? link_to(name, url
|
73
|
+
html_content = url && links ? link_to(name, url) : content_tag(:span, name)
|
74
|
+
if with_microdata
|
75
|
+
item_title = content_tag(:span, name, :itemprop => "title")
|
76
|
+
html_options = {:itemscope => true, :itemtype => data_definition_url("Breadcrumb")}
|
77
|
+
html_content = url && links ? link_to(item_title, url, :class => html_classes, :itemprop => "url") : item_title
|
78
|
+
content_tag(:div, html_content, html_options)
|
79
|
+
else
|
80
|
+
url && links ? link_to(name, url, :class => html_classes) : name
|
81
|
+
end
|
72
82
|
end
|
73
83
|
|
74
|
-
def crumb_to_html_list(crumb, links, li_class, active_li_class, first_class, last_class, is_first, is_last)
|
84
|
+
def crumb_to_html_list(crumb, links, li_class, active_li_class, first_class, last_class, is_first, is_last, with_microdata)
|
75
85
|
name, url = crumb
|
76
86
|
html_classes = []
|
77
87
|
html_classes << first_class if is_first
|
78
88
|
html_classes << last_class if is_last
|
79
89
|
html_classes << active_li_class unless url && links
|
80
90
|
html_classes << li_class if !is_first && !is_last && url && links
|
81
|
-
|
91
|
+
html_options = {:class => html_classes.join(' ').strip}
|
92
|
+
if with_microdata
|
93
|
+
html_options[:itemscope] = true
|
94
|
+
html_options[:itemtype] = data_definition_url("Breadcrumb")
|
95
|
+
item_title = content_tag(:span, name, :itemprop => "title")
|
96
|
+
html_content = url && links ? link_to(item_title, url, :itemprop => "url") : item_title
|
97
|
+
else
|
98
|
+
html_content = url && links ? link_to(name, url) : content_tag(:span, name)
|
99
|
+
end
|
100
|
+
content_tag(:li, html_content, html_options)
|
82
101
|
end
|
83
102
|
|
84
103
|
def crumb_to_xml(crumb, links, separator, is_first, is_last)
|
85
104
|
name, url = crumb
|
86
105
|
content_tag(separator, name, :href => (url && links ? url : nil))
|
87
106
|
end
|
107
|
+
|
108
|
+
def data_definition_url(type)
|
109
|
+
"http://data-vocabulary.org/#{type}"
|
110
|
+
end
|
88
111
|
end
|
89
112
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
Bundler.require(:test)
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
require 'action_controller'
|
7
|
+
require 'active_support/core_ext/string/output_safety'
|
8
|
+
require 'crummy'
|
9
|
+
require 'crummy/standard_renderer'
|
10
|
+
|
11
|
+
class StandardRendererTest < Test::Unit::TestCase
|
12
|
+
include Crummy
|
13
|
+
|
14
|
+
def test_classes
|
15
|
+
renderer = StandardRenderer.new
|
16
|
+
assert_equal('<a href="url" class="first last">name</a>',
|
17
|
+
renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html))
|
18
|
+
assert_equal('<ul class="" id=""><li class="first last"><a href="url">name</a></li></ul>',
|
19
|
+
renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html_list))
|
20
|
+
assert_equal('<crumb href="url">name</crumb>',
|
21
|
+
renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :xml))
|
22
|
+
|
23
|
+
assert_equal('<a href="url1" class="first">name1</a> » <a href="url2" class="last">name2</a>',
|
24
|
+
renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :html))
|
25
|
+
assert_equal('<ul class="" id=""><li class="first"><a href="url1">name1</a></li><li class="li_class"><a href="url2">name2</a></li><li class="last"><a href="url3">name3</a></li></ul>',
|
26
|
+
renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list))
|
27
|
+
assert_equal('<ul class="" id=""><li class="first"><a href="url1">name1</a></li> / <li class="li_class"><a href="url2">name2</a></li> / <li class="last"><a href="url3">name3</a></li></ul>',
|
28
|
+
renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list, :separator => " / "))
|
29
|
+
assert_equal('<crumb href="url1">name1</crumb><crumb href="url2">name2</crumb>',
|
30
|
+
renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :xml))
|
31
|
+
|
32
|
+
assert_equal('<div itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="url" class="first last" itemprop="url"><span itemprop="title">name</span></a></div>',
|
33
|
+
renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html, :microdata => true))
|
34
|
+
assert_equal('<ul class="" id=""><li class="first last" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="url" itemprop="url"><span itemprop="title">name</span></a></li></ul>',
|
35
|
+
renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html_list, :microdata => true))
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_configuration
|
39
|
+
renderer = StandardRenderer.new
|
40
|
+
# check defaults
|
41
|
+
assert_equal " » ", Crummy.configuration.html_separator
|
42
|
+
# adjust configuration
|
43
|
+
Crummy.configure do |config|
|
44
|
+
config.html_separator = " / "
|
45
|
+
end
|
46
|
+
assert_equal " / ", Crummy.configuration.html_separator
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_configured_renderer
|
50
|
+
renderer = StandardRenderer.new
|
51
|
+
Crummy.configure do |config|
|
52
|
+
config.html_separator = " / "
|
53
|
+
end
|
54
|
+
# using configured separator
|
55
|
+
assert_equal('<a href="url1" class="">name1</a> / <a href="url2" class="">name2</a>',
|
56
|
+
renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']]))
|
57
|
+
# overriding configured separator
|
58
|
+
assert_equal('<a href="url1" class="">name1</a> | <a href="url2" class="">name2</a>',
|
59
|
+
renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :separator => " | "))
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_configured_renderer_with_microdata
|
63
|
+
renderer = StandardRenderer.new
|
64
|
+
Crummy.configure do |config|
|
65
|
+
config.microdata = true
|
66
|
+
end
|
67
|
+
# using configured microdata setting
|
68
|
+
assert_equal('<div itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="url" class="first last" itemprop="url"><span itemprop="title">name</span></a></div>',
|
69
|
+
renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html))
|
70
|
+
end
|
71
|
+
end
|
metadata
CHANGED
@@ -1,35 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crummy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Zach Inglis
|
9
|
+
- Andrew Nesbitt
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
13
|
+
date: 2013-02-03 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
requirement: &70334127850640 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *70334127850640
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: bundler
|
28
|
+
requirement: &70334127848920 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *70334127848920
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: activesupport
|
39
|
+
requirement: &70334127872360 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
type: :development
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *70334127872360
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: actionpack
|
50
|
+
requirement: &70334127871040 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *70334127871040
|
14
59
|
description: Crummy is a simple and tasty way to add breadcrumbs to your Rails applications.
|
15
60
|
email: zach+crummy@londonmade.co.uk
|
16
61
|
executables: []
|
17
62
|
extensions: []
|
18
63
|
extra_rdoc_files:
|
19
|
-
- README.
|
64
|
+
- README.md
|
20
65
|
files:
|
21
66
|
- .gitignore
|
67
|
+
- CHANGELOG
|
68
|
+
- Gemfile
|
22
69
|
- MIT-LICENSE
|
23
|
-
- README.
|
70
|
+
- README.md
|
24
71
|
- Rakefile
|
25
|
-
-
|
72
|
+
- crummy.gemspec
|
26
73
|
- init.rb
|
27
74
|
- lib/crummy.rb
|
28
75
|
- lib/crummy/action_controller.rb
|
29
76
|
- lib/crummy/action_view.rb
|
30
77
|
- lib/crummy/railtie.rb
|
31
78
|
- lib/crummy/standard_renderer.rb
|
32
|
-
-
|
79
|
+
- lib/crummy/version.rb
|
80
|
+
- test/standard_renderer_test.rb
|
33
81
|
homepage: http://github.com/zachinglis/crummy
|
34
82
|
licenses: []
|
35
83
|
post_install_message:
|
@@ -50,8 +98,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
50
98
|
version: '0'
|
51
99
|
requirements: []
|
52
100
|
rubyforge_project:
|
53
|
-
rubygems_version: 1.8.
|
101
|
+
rubygems_version: 1.8.11
|
54
102
|
signing_key:
|
55
103
|
specification_version: 3
|
56
104
|
summary: Tasty breadcrumbs!
|
57
|
-
test_files:
|
105
|
+
test_files:
|
106
|
+
- test/standard_renderer_test.rb
|
107
|
+
has_rdoc:
|
data/README.textile
DELETED
@@ -1,158 +0,0 @@
|
|
1
|
-
h1. Crummy
|
2
|
-
|
3
|
-
h2. Introduction
|
4
|
-
|
5
|
-
Crummy is a simple and tasty way to add breadcrumbs to your Rails applications.
|
6
|
-
|
7
|
-
h2. Install
|
8
|
-
|
9
|
-
Simply add the dependency to your Gemfile:
|
10
|
-
|
11
|
-
<pre>
|
12
|
-
<code>
|
13
|
-
gem "crummy", "~> 1.6.0"
|
14
|
-
</code>
|
15
|
-
</pre>
|
16
|
-
|
17
|
-
h2. Example
|
18
|
-
|
19
|
-
In your controllers you may add_crumb either like a before_filter or within a method (It is also available to views).
|
20
|
-
|
21
|
-
<pre>
|
22
|
-
<code>
|
23
|
-
class ApplicationController
|
24
|
-
add_crumb "Home", '/'
|
25
|
-
end
|
26
|
-
|
27
|
-
class BusinessController < ApplicationController
|
28
|
-
add_crumb("Businesses") { |instance| instance.send :businesses_path }
|
29
|
-
add_crumb("Comments", :only => "comments") { |instance| instance.send :businesses_comments_path }
|
30
|
-
before_filter :load_comment, :only => "show"
|
31
|
-
add_crumb :comment, :only => "show"
|
32
|
-
|
33
|
-
# Example for nested routes:
|
34
|
-
add_crumb(:document) { [:account, :document] }
|
35
|
-
|
36
|
-
def show
|
37
|
-
add_crumb @business.display_name, @business
|
38
|
-
end
|
39
|
-
|
40
|
-
def load_comment
|
41
|
-
@comment = Comment.find(params[:id])
|
42
|
-
end
|
43
|
-
end
|
44
|
-
</code>
|
45
|
-
</pre>
|
46
|
-
|
47
|
-
Then in your view:
|
48
|
-
|
49
|
-
<pre>
|
50
|
-
<code>
|
51
|
-
<%= render_crumbs %>
|
52
|
-
</code>
|
53
|
-
</pre>
|
54
|
-
|
55
|
-
h2. Options for render_crumbs
|
56
|
-
|
57
|
-
render_crumbs renders the list of crumbs as either html or xml
|
58
|
-
|
59
|
-
It takes 3 options
|
60
|
-
|
61
|
-
The output format. Can either be :xml or :html or :html_list. Defaults to :html
|
62
|
-
|
63
|
-
<code>:format => (:html|:html_list|:xml)</code>
|
64
|
-
|
65
|
-
The separator text. It does not assume you want spaces on either side so you must specify. Defaults to <code>»</code> for :html and <code><crumb></code> for :xml
|
66
|
-
|
67
|
-
<code>:separator => string</code>
|
68
|
-
|
69
|
-
Render links in the output. Defaults to +true+
|
70
|
-
|
71
|
-
<code>:links => boolean</code>
|
72
|
-
|
73
|
-
<code>:skip_if_blank => true</code>
|
74
|
-
|
75
|
-
With this option, output will be blank if there are no breadcrumbs.
|
76
|
-
|
77
|
-
h3. Examples
|
78
|
-
|
79
|
-
<pre>
|
80
|
-
<code>
|
81
|
-
render_crumbs #=> <a href="/">Home</a> » <a href="/businesses">Businesses</a>
|
82
|
-
render_crumbs :separator => ' | ' #=> <a href="/">Home</a> | <a href="/businesses">Businesses</a>
|
83
|
-
render_crumbs :format => :xml #=> <crumb href="/">Home</crumb><crumb href="/businesses">Businesses</crumb>
|
84
|
-
render_crumbs :format => :html_list #=> <ul class="" id=""><li class=""><a href="/">Home</a></li><li class=""><a href="/">Businesses</a></li></ul>
|
85
|
-
</code>
|
86
|
-
</pre>
|
87
|
-
|
88
|
-
A crumb with a nil argument for the link will output an unlinked crumb.
|
89
|
-
|
90
|
-
With :format => :html_list you can specify additional params: :active_li_class, :li_class, :ul_class, :ul_id
|
91
|
-
|
92
|
-
h3. App-wide configuration
|
93
|
-
|
94
|
-
You have the option to pre-configure any of the Crummy options in an application-wide configuration. The options above are available to configure, with the exception of @:separator@, as well as many others.
|
95
|
-
|
96
|
-
The biggest difference is that @:separator@ is not an option. Instead, you have format-specific configuration options: @:html_separator@, @:xml_separator@, and @:html_list_separator@. @:separator@ can still be overridden in the view.
|
97
|
-
|
98
|
-
Insert the following in a file named @config/initializers/crummy.rb@:
|
99
|
-
|
100
|
-
<pre>
|
101
|
-
<code>
|
102
|
-
Crummy.configure do |config|
|
103
|
-
config.format = :xml
|
104
|
-
end
|
105
|
-
</code>
|
106
|
-
</pre>
|
107
|
-
|
108
|
-
Possible parameters for configuration are:
|
109
|
-
|
110
|
-
<pre>
|
111
|
-
<code>
|
112
|
-
:format
|
113
|
-
:links
|
114
|
-
:skip_if_blank
|
115
|
-
:html_separator
|
116
|
-
:xml_separator
|
117
|
-
:html_list_separator
|
118
|
-
:first_class
|
119
|
-
:last_class
|
120
|
-
:ul_id
|
121
|
-
:ul_class
|
122
|
-
:li_class
|
123
|
-
:active_li_class
|
124
|
-
</code>
|
125
|
-
</pre>
|
126
|
-
|
127
|
-
See @lib/crummy.rb@ for a list of these parameters and their defaults.
|
128
|
-
|
129
|
-
h2. Notes
|
130
|
-
|
131
|
-
Test library is at "Crummy Test":https://github.com/zachinglis/crummy-test
|
132
|
-
|
133
|
-
h2. Todo
|
134
|
-
|
135
|
-
* Accept collections of models as a single argument
|
136
|
-
* Accept instances of models as a single argument
|
137
|
-
* Allow for variables in names. (The workaround is to do your own before_filter for that currently)
|
138
|
-
* Make a crumbs? type method
|
139
|
-
|
140
|
-
h2. Credits
|
141
|
-
|
142
|
-
* "Zach Inglis":http://zachinglis.com of "London Made":http://londonmade.co.uk
|
143
|
-
* "Rein Henrichs":http://reinh.com
|
144
|
-
* "Les Hill":http://blog.leshill.org/
|
145
|
-
* "Sandro Turriate":http://turriate.com/
|
146
|
-
* "Przemysław Kowalczyk":http://szeryf.wordpress.com/2008/06/13/easy-and-flexible-breadcrumbs-for-rails/ - feature ideas
|
147
|
-
* "Sharad Jain":http://github.com/sjain
|
148
|
-
* "Max Riveiro":http://github.com/kavu
|
149
|
-
* "Kamil K. Lemański":http://kml.jogger.pl
|
150
|
-
* "Brian Cobb":http://bcobb.net/
|
151
|
-
* "Kir Shatrov":http://github.com/shatrov ("Evrone company":http://evrone.com)
|
152
|
-
* "sugilog":http://github.com/sugilog
|
153
|
-
* "Trond Arve Nordheim":http://github.com/tanordheim
|
154
|
-
* "Jan Szumiec":http://github.com/jasiek
|
155
|
-
* "Jeff Browning":http://github.com/jbrowning
|
156
|
-
* "Bill Turner":http://github.com/billturner
|
157
|
-
|
158
|
-
*Copyright (c) 2008-2011 Zach Inglis, released under the MIT license*
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.6.0
|
data/tasks/crummy_tasks.rake
DELETED