crummy 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.textile +8 -5
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/init.rb +1 -2
- data/lib/crummy.rb +9 -120
- data/lib/crummy/action_controller.rb +56 -0
- data/lib/crummy/action_view.rb +65 -0
- data/lib/crummy/railtie.rb +18 -0
- metadata +9 -8
- data/crummy.gemspec +0 -46
- data/rails/init.rb +0 -3
data/README.textile
CHANGED
@@ -22,11 +22,13 @@ Then install the Crummy gem:
|
|
22
22
|
</code>
|
23
23
|
</pre>
|
24
24
|
|
25
|
-
|
25
|
+
h3. Rails 3 / Bundler.
|
26
|
+
|
27
|
+
Simply add gem dependency to your Gemfile:
|
26
28
|
|
27
29
|
<pre>
|
28
30
|
<code>
|
29
|
-
|
31
|
+
gem "crummy", ">= 1.0.1"
|
30
32
|
</code>
|
31
33
|
</pre>
|
32
34
|
|
@@ -65,7 +67,7 @@ Then in your view:
|
|
65
67
|
</code>
|
66
68
|
</pre>
|
67
69
|
|
68
|
-
h2. Options for
|
70
|
+
h2. Options for render_crumbs
|
69
71
|
|
70
72
|
render_crumbs renders the list of crumbs as either html or xml
|
71
73
|
|
@@ -106,11 +108,12 @@ h2. Todo
|
|
106
108
|
|
107
109
|
h2. Credits
|
108
110
|
|
109
|
-
* "Zach Inglis":http://zachinglis.com
|
111
|
+
* "Zach Inglis":http://zachinglis.com of "London Made":http://londonmade.co.uk
|
110
112
|
* "Rein Henrichs":http://reinh.com
|
111
113
|
* "Les Hill":http://blog.leshill.org/
|
112
114
|
* "Sandro Turriate":http://turriate.com/
|
113
115
|
* "Przemysław Kowalczyk":http://szeryf.wordpress.com/2008/06/13/easy-and-flexible-breadcrumbs-for-rails/ - feature ideas
|
114
116
|
* "Sharad Jain":http://github.com/sjain
|
117
|
+
* "Max Riveiro":http://github.com/kavu
|
115
118
|
|
116
|
-
*Copyright (c)
|
119
|
+
*Copyright (c) 2010 Zach Inglis, released under the MIT license*
|
data/Rakefile
CHANGED
@@ -13,6 +13,7 @@ begin
|
|
13
13
|
gem.email = "zach@lt3media.com"
|
14
14
|
gem.homepage = "http://github.com/zachinglis/crummy"
|
15
15
|
gem.authors = ["Zach Inglis"]
|
16
|
+
gem.files = FileList['lib/**/*.rb','tasks/*.rake','init.rb','MIT-LICENSE','Rakefile','README.textile','VERSION', '.gitignore']
|
16
17
|
end
|
17
18
|
Jeweler::GemcutterTasks.new
|
18
19
|
rescue LoadError
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.1
|
data/init.rb
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
ActionView::Base.send :include, Crummy::ViewMethods
|
1
|
+
require 'crummy'
|
data/lib/crummy.rb
CHANGED
@@ -1,121 +1,10 @@
|
|
1
1
|
module Crummy
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
options = args.extract_options!
|
12
|
-
url = args.first
|
13
|
-
raise ArgumentError, "Need more arguments" unless name or options[:record] or block_given?
|
14
|
-
raise ArgumentError, "Cannot pass url and use block" if url && block_given?
|
15
|
-
before_filter(options) do |instance|
|
16
|
-
url = yield instance if block_given?
|
17
|
-
url = instance.send url if url.is_a? Symbol
|
18
|
-
record = instance.instance_variable_get("@#{name}") unless url or block_given?
|
19
|
-
if record and record.respond_to? :to_param
|
20
|
-
name, url = record.to_s, instance.url_for(record)
|
21
|
-
end
|
22
|
-
|
23
|
-
# FIXME: url = instance.url_for(name) if name.respond_to?("to_param") && url.nil?
|
24
|
-
# FIXME: Add ||= for the name, url above
|
25
|
-
instance.add_crumb(name, url)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
module InstanceMethods
|
31
|
-
# Add a crumb to the crumbs array.
|
32
|
-
#
|
33
|
-
# add_crumb("Home", "/")
|
34
|
-
# add_crumb("Business") { |instance| instance.business_path }
|
35
|
-
#
|
36
|
-
def add_crumb(name, url=nil)
|
37
|
-
crumbs.push [name, url]
|
38
|
-
end
|
39
|
-
|
40
|
-
# Lists the crumbs as an array
|
41
|
-
def crumbs
|
42
|
-
get_or_set_ivar "@_crumbs", []
|
43
|
-
end
|
44
|
-
|
45
|
-
def get_or_set_ivar(var, value) # :nodoc:
|
46
|
-
instance_variable_set var, instance_variable_get(var) || value
|
47
|
-
end
|
48
|
-
private :get_or_set_ivar
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.included(receiver) # :nodoc:
|
52
|
-
receiver.extend ClassMethods
|
53
|
-
receiver.send :include, InstanceMethods
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
module ViewMethods
|
58
|
-
# List the crumbs as an array
|
59
|
-
def crumbs
|
60
|
-
@_crumbs ||= [] # Give me something to push to
|
61
|
-
end
|
62
|
-
|
63
|
-
# Add a crumb to the +crumbs+ array
|
64
|
-
def add_crumb(name, url=nil)
|
65
|
-
crumbs.push [name, url]
|
66
|
-
end
|
67
|
-
|
68
|
-
# Render the list of crumbs as either html or xml
|
69
|
-
#
|
70
|
-
# Takes 3 options:
|
71
|
-
# The output format. Can either be xml or html. Default :html
|
72
|
-
# :format => (:html|:xml)
|
73
|
-
# The seperator text. It does not assume you want spaces on either side so you must specify. Default +»+ for :html and +crumb+ for xml
|
74
|
-
# :seperator => string
|
75
|
-
# Render links in the output. Default +true+
|
76
|
-
# :link => boolean
|
77
|
-
#
|
78
|
-
# Examples:
|
79
|
-
# render_crumbs #=> <a href="/">Home</a> » <a href="/businesses">Businesses</a>
|
80
|
-
# render_crumbs :seperator => ' | ' #=> <a href="/">Home</a> | <a href="/businesses">Businesses</a>
|
81
|
-
# render_crumbs :format => :xml #=> <crumb href="/">Home</crumb><crumb href="/businesses">Businesses</crumb>
|
82
|
-
#
|
83
|
-
# The only argument is for the seperator text. It does not assume you want spaces on either side so you must specify. Defaults to +»+
|
84
|
-
#
|
85
|
-
# render_crumbs(" . ") #=> <a href="/">Home</a> . <a href="/businesses">Businesses</a>
|
86
|
-
#
|
87
|
-
def render_crumbs(options = {})
|
88
|
-
options[:format] = :html if options[:format] == nil
|
89
|
-
if options[:seperator] == nil
|
90
|
-
options[:seperator] = " » " if options[:format] == :html
|
91
|
-
options[:seperator] = "crumb" if options[:format] == :xml
|
92
|
-
end
|
93
|
-
options[:links] = true if options[:links] == nil
|
94
|
-
case options[:format]
|
95
|
-
when :html
|
96
|
-
crumb_string = crumbs.collect do |crumb|
|
97
|
-
crumb_to_html crumb, options[:links]
|
98
|
-
end * options[:seperator]
|
99
|
-
crumb_string = crumb_string.html_safe if crumb_string.respond_to?(:html_safe)
|
100
|
-
crumb_string
|
101
|
-
when :xml
|
102
|
-
crumbs.collect do |crumb|
|
103
|
-
crumb_to_xml crumb, options[:links], options[:seperator]
|
104
|
-
end * ''
|
105
|
-
else
|
106
|
-
raise "Unknown breadcrumb output format"
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def crumb_to_html(crumb, links)
|
111
|
-
name, url = crumb
|
112
|
-
url && links ? link_to(name, url) : name
|
113
|
-
end
|
114
|
-
|
115
|
-
def crumb_to_xml(crumb, links, seperator)
|
116
|
-
name, url = crumb
|
117
|
-
url && links ? "<#{seperator} href=\"#{url}\">#{name}</#{seperator}>" : "<#{seperator}>#{name}</#{seperator}>"
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|
121
|
-
end
|
2
|
+
if defined?(Rails::Railtie)
|
3
|
+
require 'crummy/railtie'
|
4
|
+
else
|
5
|
+
require 'crummy/action_controller'
|
6
|
+
require 'crummy/action_view'
|
7
|
+
ActionController::Base.send :include, Crummy::ControllerMethods
|
8
|
+
ActionView::Base.send :include, Crummy::ViewMethods
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Crummy
|
2
|
+
module ControllerMethods
|
3
|
+
module ClassMethods
|
4
|
+
# Add a crumb to the crumbs array.
|
5
|
+
#
|
6
|
+
# add_crumb("Home", "/")
|
7
|
+
# add_crumb("Business") { |instance| instance.business_path }
|
8
|
+
#
|
9
|
+
# Works like a before_filter so +:only+ and +except+ both work.
|
10
|
+
def add_crumb(name, *args)
|
11
|
+
options = args.extract_options!
|
12
|
+
url = args.first
|
13
|
+
raise ArgumentError, "Need more arguments" unless name or options[:record] or block_given?
|
14
|
+
raise ArgumentError, "Cannot pass url and use block" if url && block_given?
|
15
|
+
before_filter(options) do |instance|
|
16
|
+
url = yield instance if block_given?
|
17
|
+
url = instance.send url if url.is_a? Symbol
|
18
|
+
record = instance.instance_variable_get("@#{name}") unless url or block_given?
|
19
|
+
if record and record.respond_to? :to_param
|
20
|
+
name, url = record.to_s, instance.url_for(record)
|
21
|
+
end
|
22
|
+
|
23
|
+
# FIXME: url = instance.url_for(name) if name.respond_to?("to_param") && url.nil?
|
24
|
+
# FIXME: Add ||= for the name, url above
|
25
|
+
instance.add_crumb(name, url)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module InstanceMethods
|
31
|
+
# Add a crumb to the crumbs array.
|
32
|
+
#
|
33
|
+
# add_crumb("Home", "/")
|
34
|
+
# add_crumb("Business") { |instance| instance.business_path }
|
35
|
+
#
|
36
|
+
def add_crumb(name, url=nil)
|
37
|
+
crumbs.push [name, url]
|
38
|
+
end
|
39
|
+
|
40
|
+
# Lists the crumbs as an array
|
41
|
+
def crumbs
|
42
|
+
get_or_set_ivar "@_crumbs", []
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_or_set_ivar(var, value) # :nodoc:
|
46
|
+
instance_variable_set var, instance_variable_get(var) || value
|
47
|
+
end
|
48
|
+
private :get_or_set_ivar
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.included(receiver) # :nodoc:
|
52
|
+
receiver.extend ClassMethods
|
53
|
+
receiver.send :include, InstanceMethods
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Crummy
|
2
|
+
module ViewMethods
|
3
|
+
# List the crumbs as an array
|
4
|
+
def crumbs
|
5
|
+
@_crumbs ||= [] # Give me something to push to
|
6
|
+
end
|
7
|
+
|
8
|
+
# Add a crumb to the +crumbs+ array
|
9
|
+
def add_crumb(name, url=nil)
|
10
|
+
crumbs.push [name, url]
|
11
|
+
end
|
12
|
+
|
13
|
+
# Render the list of crumbs as either html or xml
|
14
|
+
#
|
15
|
+
# Takes 3 options:
|
16
|
+
# The output format. Can either be xml or html. Default :html
|
17
|
+
# :format => (:html|:xml)
|
18
|
+
# The seperator text. It does not assume you want spaces on either side so you must specify. Default +»+ for :html and +crumb+ for xml
|
19
|
+
# :seperator => string
|
20
|
+
# Render links in the output. Default +true+
|
21
|
+
# :link => boolean
|
22
|
+
#
|
23
|
+
# Examples:
|
24
|
+
# render_crumbs #=> <a href="/">Home</a> » <a href="/businesses">Businesses</a>
|
25
|
+
# render_crumbs :seperator => ' | ' #=> <a href="/">Home</a> | <a href="/businesses">Businesses</a>
|
26
|
+
# render_crumbs :format => :xml #=> <crumb href="/">Home</crumb><crumb href="/businesses">Businesses</crumb>
|
27
|
+
#
|
28
|
+
# The only argument is for the seperator text. It does not assume you want spaces on either side so you must specify. Defaults to +»+
|
29
|
+
#
|
30
|
+
# render_crumbs(" . ") #=> <a href="/">Home</a> . <a href="/businesses">Businesses</a>
|
31
|
+
#
|
32
|
+
def render_crumbs(options = {})
|
33
|
+
options[:format] = :html if options[:format] == nil
|
34
|
+
if options[:seperator] == nil
|
35
|
+
options[:seperator] = " » " if options[:format] == :html
|
36
|
+
options[:seperator] = "crumb" if options[:format] == :xml
|
37
|
+
end
|
38
|
+
options[:links] = true if options[:links] == nil
|
39
|
+
case options[:format]
|
40
|
+
when :html
|
41
|
+
crumb_string = crumbs.collect do |crumb|
|
42
|
+
crumb_to_html crumb, options[:links]
|
43
|
+
end * options[:seperator]
|
44
|
+
crumb_string = crumb_string.html_safe if crumb_string.respond_to?(:html_safe)
|
45
|
+
crumb_string
|
46
|
+
when :xml
|
47
|
+
crumbs.collect do |crumb|
|
48
|
+
crumb_to_xml crumb, options[:links], options[:seperator]
|
49
|
+
end * ''
|
50
|
+
else
|
51
|
+
raise "Unknown breadcrumb output format"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def crumb_to_html(crumb, links)
|
56
|
+
name, url = crumb
|
57
|
+
url && links ? link_to(name, url) : name
|
58
|
+
end
|
59
|
+
|
60
|
+
def crumb_to_xml(crumb, links, seperator)
|
61
|
+
name, url = crumb
|
62
|
+
url && links ? "<#{seperator} href=\"#{url}\">#{name}</#{seperator}>" : "<#{seperator}>#{name}</#{seperator}>"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'crummy'
|
2
|
+
require 'rails'
|
3
|
+
|
4
|
+
module Crummy
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
initializer "crummy.action_controller" do |app|
|
7
|
+
if defined?(ActionController)
|
8
|
+
require 'crummy/action_controller'
|
9
|
+
ActionController::Base.send :include, Crummy::ControllerMethods
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
initializer "crummy.action_view" do |app|
|
14
|
+
require 'crummy/action_view'
|
15
|
+
ActionView::Base.send :include, Crummy::ViewMethods
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crummy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 1
|
10
|
+
version: 1.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Zach Inglis
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-11-26 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -33,18 +33,19 @@ files:
|
|
33
33
|
- README.textile
|
34
34
|
- Rakefile
|
35
35
|
- VERSION
|
36
|
-
- crummy.gemspec
|
37
36
|
- init.rb
|
38
37
|
- lib/crummy.rb
|
39
|
-
-
|
38
|
+
- lib/crummy/action_controller.rb
|
39
|
+
- lib/crummy/action_view.rb
|
40
|
+
- lib/crummy/railtie.rb
|
40
41
|
- tasks/crummy_tasks.rake
|
41
42
|
has_rdoc: true
|
42
43
|
homepage: http://github.com/zachinglis/crummy
|
43
44
|
licenses: []
|
44
45
|
|
45
46
|
post_install_message:
|
46
|
-
rdoc_options:
|
47
|
-
|
47
|
+
rdoc_options: []
|
48
|
+
|
48
49
|
require_paths:
|
49
50
|
- lib
|
50
51
|
required_ruby_version: !ruby/object:Gem::Requirement
|
data/crummy.gemspec
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{crummy}
|
8
|
-
s.version = "1.0.0"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Zach Inglis"]
|
12
|
-
s.date = %q{2010-09-10}
|
13
|
-
s.description = %q{Crummy is a simple and tasty way to add breadcrumbs to your Rails applications.}
|
14
|
-
s.email = %q{zach@lt3media.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"README.textile"
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
".gitignore",
|
20
|
-
"MIT-LICENSE",
|
21
|
-
"README.textile",
|
22
|
-
"Rakefile",
|
23
|
-
"VERSION",
|
24
|
-
"crummy.gemspec",
|
25
|
-
"init.rb",
|
26
|
-
"lib/crummy.rb",
|
27
|
-
"rails/init.rb",
|
28
|
-
"tasks/crummy_tasks.rake"
|
29
|
-
]
|
30
|
-
s.homepage = %q{http://github.com/zachinglis/crummy}
|
31
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
32
|
-
s.require_paths = ["lib"]
|
33
|
-
s.rubygems_version = %q{1.3.7}
|
34
|
-
s.summary = %q{Tasty breadcrumbs!}
|
35
|
-
|
36
|
-
if s.respond_to? :specification_version then
|
37
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
38
|
-
s.specification_version = 3
|
39
|
-
|
40
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
41
|
-
else
|
42
|
-
end
|
43
|
-
else
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
data/rails/init.rb
DELETED