crummy 1.7.2 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,9 +5,3 @@ rvm:
5
5
  gemfile:
6
6
  - gemfiles/rails3_2.gemfile
7
7
  - gemfiles/rails4_0.gemfile
8
- matrix:
9
- allow_failures:
10
- - rvm: 1.9.3
11
- gemfile: gemfiles/rails4_0.gemfile
12
- - rvm: 2.0.0
13
- gemfile: gemfiles/rails4_0.gemfile
data/README.md CHANGED
@@ -58,6 +58,13 @@ These are added to the *a* tag.
58
58
  add_crumb "Home", '/', link_html_options: {title: "my link title"}
59
59
  ```
60
60
 
61
+ ##You can set html instead text in first parameter.
62
+ If tag <code>a</code> present in this html, tag a not be a wrapper.
63
+
64
+ ```ruby
65
+ add_crumb "<a class='glyphicons shield' href='/support'><i></i>Support</a>".html_safe, "", {}
66
+ ```
67
+
61
68
  ## Options for render\_crumbs
62
69
 
63
70
  render\_crumbs renders the list of crumbs as either html or xml
@@ -103,6 +110,7 @@ microdata: true
103
110
 
104
111
  With this option, output will be blank if there are no breadcrumbs.
105
112
 
113
+
106
114
  ### Examples
107
115
 
108
116
  ```ruby
@@ -113,6 +121,13 @@ render_crumbs format: :html_list #=> <ul class="" id=""><li class=""><a href="/
113
121
  render_crumbs format: :html_list, :microdata => true
114
122
  #=> <ul class="" id=""><li class="" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">
115
123
  # <a href="/" itemprop="url"><span itemprop="title">Home</span></a></li></ul>
124
+ add_crumb support_link, {:right_side => true, :links => "/support", :li_right_class => "pull-right hidden-phone"}
125
+ #=> <li class="pull-right hidden-phone">
126
+ #=> <span><a class="glyphicons shield" href="/support">
127
+ #=> <i></i>Support</a>
128
+ #=> </span>
129
+ #=> </li>
130
+ #=> <li class="divider pull-right hidden-phone"></li>
116
131
  ```
117
132
 
118
133
  A crumb with a nil argument for the link will output an unlinked crumb.
@@ -147,18 +162,28 @@ Possible parameters for configuration are:
147
162
  :html_separator
148
163
  :xml_separator
149
164
  :html_list_separator
165
+ :html_list_right_separator
150
166
  :first_class
151
167
  :last_class
152
168
  :ul_id
153
169
  :ul_class
154
170
  :li_class
171
+ :li_right_class
155
172
  :microdata
156
173
  :last_crumb_linked
157
174
  :truncate
175
+ :right_side
158
176
  ```
159
177
 
160
178
  See `lib/crummy.rb` for a list of these parameters and their defaults.
161
179
 
180
+ ###Individually for each crumb configuration:
181
+ ```ruby
182
+ add_crumb support_link, {:right_side => true, :links => "/support", : li_class => "my_class", :li_right_class => "pull-right hidden-phone"}
183
+ ```
184
+ Simple add that parameter to options hash.
185
+
186
+
162
187
  ## Live example application
163
188
 
164
189
  An example application is available right inside this gem. That application is documented, see `example/README` for details about usage.
@@ -6,6 +6,7 @@ Gem::Specification.new do |s|
6
6
  s.name = "crummy"
7
7
  s.version = Crummy::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
+ s.licenses = ['MIT']
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
12
  s.authors = ["Zach Inglis", "Andrew Nesbitt"]
@@ -13,8 +13,11 @@ module Crummy
13
13
  attr_accessor :links
14
14
  attr_accessor :skip_if_blank
15
15
  attr_accessor :html_separator
16
+ attr_accessor :html_right_separator
16
17
  attr_accessor :xml_separator
18
+ attr_accessor :xml_right_separator
17
19
  attr_accessor :html_list_separator
20
+ attr_accessor :html_list_right_separator
18
21
  attr_accessor :first_class
19
22
  attr_accessor :last_class
20
23
  attr_accessor :ul_id
@@ -23,12 +26,16 @@ module Crummy
23
26
  attr_accessor :microdata
24
27
  attr_accessor :last_crumb_linked
25
28
  attr_accessor :truncate
29
+ attr_accessor :right_side
26
30
 
27
31
  def initialize
28
32
  @format = :html
29
33
  @html_separator = " &raquo; ".html_safe
34
+ @html_right_separator = " &raquo; ".html_safe
30
35
  @xml_separator = "crumb"
36
+ @xml_right_separator = "crumb"
31
37
  @html_list_separator = ''
38
+ @html_list_right_separator = ''
32
39
  @skip_if_blank = true
33
40
  @links = true
34
41
  @first_class = ''
@@ -39,6 +46,7 @@ module Crummy
39
46
  @microdata = false
40
47
  @last_crumb_linked = true
41
48
  @truncate = nil
49
+ @right_side = false
42
50
  end
43
51
 
44
52
  def active_li_class=(class_name)
@@ -10,54 +10,102 @@ module Crummy
10
10
  #
11
11
  # Takes 3 options:
12
12
  # The output format. Can either be xml or html. Default :html
13
- # :format => (:html|:xml)
13
+ # :format => (:html|:xml)
14
14
  # The separator text. It does not assume you want spaces on either side so you must specify. Default +&raquo;+ for :html and +crumb+ for xml
15
- # :separator => string
15
+ # :separator => string
16
16
  # Render links in the output. Default +true+
17
- # :link => boolean
18
- #
17
+ # :link => boolean
18
+ #
19
19
  # Examples:
20
20
  # render_crumbs #=> <a href="/">Home</a> &raquo; <a href="/businesses">Businesses</a>
21
21
  # render_crumbs :separator => ' | ' #=> <a href="/">Home</a> | <a href="/businesses">Businesses</a>
22
22
  # render_crumbs :format => :xml #=> <crumb href="/">Home</crumb><crumb href="/businesses">Businesses</crumb>
23
23
  # render_crumbs :format => :html_list #=> <ul class="" id=""><li class=""><a href="/">Home</a></li><li class=""><a href="/">Businesses</a></li></ul>
24
- #
24
+ #
25
25
  # With :format => :html_list you can specify additional params: li_class, ul_class, ul_id
26
26
  # The only argument is for the separator text. It does not assume you want spaces on either side so you must specify. Defaults to +&raquo;+
27
27
  #
28
28
  # render_crumbs(" . ") #=> <a href="/">Home</a> . <a href="/businesses">Businesses</a>
29
29
  #
30
30
  def render_crumbs(crumbs, options = {})
31
+
31
32
  options[:skip_if_blank] ||= Crummy.configuration.skip_if_blank
32
33
  return '' if options[:skip_if_blank] && crumbs.count < 1
33
34
  options[:format] ||= Crummy.configuration.format
34
35
  options[:separator] ||= Crummy.configuration.send(:"#{options[:format]}_separator")
36
+ options[:right_separator] ||= Crummy.configuration.send(:"#{options[:format]}_right_separator")
35
37
  options[:links] ||= Crummy.configuration.links
36
38
  options[:first_class] ||= Crummy.configuration.first_class
37
39
  options[:last_class] ||= Crummy.configuration.last_class
38
- options[:microdata] ||= Crummy.configuration.microdata
40
+ options[:microdata] ||= Crummy.configuration.microdata if options[:microdata].nil?
39
41
  options[:truncate] ||= Crummy.configuration.truncate if options[:truncate]
40
42
  options[:last_crumb_linked] = Crummy.configuration.last_crumb_linked if options[:last_crumb_linked].nil?
43
+ options[:right_side] ||= Crummy.configuration.right_side
44
+
45
+ last_hash = lambda {|o|k=o.map{|c|
46
+ c.is_a?(Hash) ? (c.empty? ? nil: c) : nil}.compact
47
+ k.empty? ? {} : k.last
48
+ }
49
+ local_global = lambda {|crumb, global_options, param_name| last_hash.call(crumb).has_key?(param_name.to_sym) ? last_hash.call(crumb)[param_name.to_sym] : global_options[param_name.to_sym]}
41
50
 
42
51
  case options[:format]
43
52
  when :html
44
- crumb_string = crumbs.collect do |crumb|
45
- crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate])
46
- end.reduce { |memo, obj| memo << options[:separator] << obj }
53
+ crumb_string = crumbs.map{|crumb|local_global.call(crumb, options, :right_side) ? nil :
54
+ crumb_to_html(crumb,
55
+ local_global.call(crumb, options, :links),
56
+ local_global.call(crumb, options, :first_class),
57
+ local_global.call(crumb, options, :last_class),
58
+ (crumb == crumbs.first),
59
+ (crumb == crumbs.last),
60
+ local_global.call(crumb, options, :microdata),
61
+ local_global.call(crumb, options, :last_crumb_linked),
62
+ local_global.call(crumb, options, :truncate))}.compact.join(options[:separator]).html_safe
47
63
  crumb_string
48
64
  when :html_list
49
65
  # Let's set values for special options of html_list format
50
66
  options[:li_class] ||= Crummy.configuration.li_class
51
67
  options[:ul_class] ||= Crummy.configuration.ul_class
52
68
  options[:ul_id] ||= Crummy.configuration.ul_id
53
- crumb_string = crumbs.collect do |crumb|
54
- crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate])
55
- end.reduce { |memo, obj| memo << options[:separator] << obj }
56
- crumb_string = content_tag(:ul, crumb_string, :class => options[:ul_class], :id => options[:ul_id])
69
+ options[:ul_id] = nil if options[:ul_id].blank?
70
+
71
+ crumb_string = crumbs.map{|crumb|local_global.call(crumb, options, :right_side) ? nil :
72
+ crumb_to_html_list(crumb,
73
+ local_global.call(crumb, options, :links),
74
+ local_global.call(crumb, options, :li_class),
75
+ local_global.call(crumb, options, :first_class),
76
+ local_global.call(crumb, options, :last_class),
77
+ (crumb == crumbs.first),
78
+ (crumb == crumbs.find_all{|crumb|
79
+ !last_hash.call(crumb).fetch(:right_side,false)}.compact.last),
80
+ local_global.call(crumb, options, :microdata),
81
+ local_global.call(crumb, options, :last_crumb_linked),
82
+ local_global.call(crumb, options, :truncate),
83
+ local_global.call(crumb, options, :separator))}.compact.join.html_safe
84
+ crumb_right_string = crumbs.reverse.map{|crumb|!local_global.call(crumb, options, :right_side) ? nil :
85
+
86
+ crumb_to_html_list(crumb,
87
+ local_global.call(crumb, options, :links),
88
+ local_global.call(crumb, options, :li_right_class),
89
+ local_global.call(crumb, options, :first_class),
90
+ local_global.call(crumb, options, :last_class),
91
+ (crumb == crumbs.first),
92
+ (crumb == crumbs.find_all{|crumb|!local_global.call(crumb, options, :right_side)}.compact.last),
93
+ local_global.call(crumb, options, :microdata),
94
+ local_global.call(crumb, options, :last_crumb_linked),
95
+ local_global.call(crumb, options, :truncate),
96
+ local_global.call(crumb, options, :right_separator))}.compact.join.html_safe
97
+ crumb_string = content_tag(:ul,
98
+ crumb_string+crumb_right_string,
99
+ :class => options[:ul_class],
100
+ :id => options[:ul_id])
57
101
  crumb_string
58
102
  when :xml
59
103
  crumbs.collect do |crumb|
60
- crumb_to_xml(crumb, options[:links], options[:separator], (crumb == crumbs.first), (crumb == crumbs.last))
104
+ crumb_to_xml(crumb,
105
+ local_global.call(crumb, options, :links),
106
+ local_global.call(crumb, options, :separator),
107
+ (crumb == crumbs.first),
108
+ (crumb == crumbs.last))
61
109
  end * ''
62
110
  else
63
111
  raise ArgumentError, "Unknown breadcrumb output format"
@@ -85,16 +133,17 @@ module Crummy
85
133
  can_link ? link_to((truncate.present? ? name.truncate(truncate) : name), url, link_html_options) : (truncate.present? ? name.truncate(truncate) : name)
86
134
  end
87
135
  end
88
-
89
- def crumb_to_html_list(crumb, links, li_class, first_class, last_class, is_first, is_last, with_microdata, last_crumb_linked, truncate)
136
+
137
+ def crumb_to_html_list(crumb, links, li_class, first_class, last_class, is_first, is_last, with_microdata, last_crumb_linked, truncate, separator='')
90
138
  name, url, options = crumb
91
139
  options = {} unless options.is_a?(Hash)
92
- can_link = url && links && (!is_last || last_crumb_linked)
140
+ can_link = url && links && (!is_last || last_crumb_linked) && !(/<\/a/ =~ name)
93
141
  html_classes = []
94
- html_classes << first_class if is_first
95
- html_classes << last_class if is_last
96
- html_classes << li_class
97
- html_options = {:class => html_classes.join(' ').strip}
142
+ html_classes << first_class if is_first && !first_class.empty?
143
+ html_classes << last_class if is_last && !last_class.empty?
144
+ html_classes << li_class unless li_class.empty?
145
+ html_options = html_classes.size > 0 ? {:class => html_classes.join(' ').strip} : {}
146
+
98
147
  if with_microdata
99
148
  html_options[:itemscope] = true
100
149
  html_options[:itemtype] = data_definition_url("Breadcrumb")
@@ -105,9 +154,10 @@ module Crummy
105
154
  else
106
155
  html_content = can_link ? link_to((truncate.present? ? name.truncate(truncate) : name), url, options[:link_html_options]) : content_tag(:span, (truncate.present? ? name.truncate(truncate) : name))
107
156
  end
108
- content_tag(:li, html_content, html_options)
157
+ content_tag(:li, html_content, html_options)+(/<\/li/ =~ separator ?
158
+ separator : content_tag(:li, separator) unless separator.blank? || is_last)
109
159
  end
110
-
160
+
111
161
  def crumb_to_xml(crumb, links, separator, is_first, is_last)
112
162
  name, url = crumb
113
163
  content_tag(separator, name, :href => (url && links ? url : nil))
@@ -118,3 +168,4 @@ module Crummy
118
168
  end
119
169
  end
120
170
  end
171
+
@@ -1,6 +1,6 @@
1
1
  module Crummy
2
2
  MAJOR = 1
3
- MINOR = 7
4
- PATCH = 2
3
+ MINOR = 8
4
+ PATCH = 0
5
5
  VERSION = [MAJOR, MINOR, PATCH].join('.')
6
6
  end
@@ -17,23 +17,23 @@ class StandardRendererTest < Test::Unit::TestCase
17
17
  renderer = StandardRenderer.new
18
18
  assert_dom_equal('<a href="url" class="first last">name</a>',
19
19
  renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html))
20
- assert_equal('<ul class="" id=""><li class="first last"><a href="url">name</a></li></ul>',
20
+ assert_equal('<ul class=""><li class="first last"><a href="url">name</a></li></ul>',
21
21
  renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html_list))
22
22
  assert_equal('<crumb href="url">name</crumb>',
23
23
  renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :xml))
24
24
 
25
25
  assert_dom_equal('<a href="url1" class="first">name1</a> &raquo; <a href="url2" class="last">name2</a>',
26
26
  renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :html))
27
- assert_equal('<ul class="" id=""><li class="first li_class"><a href="url1">name1</a></li><li class="li_class"><a href="url2">name2</a></li><li class="last li_class"><a href="url3">name3</a></li></ul>',
27
+ assert_equal('<ul class=""><li class="first li_class"><a href="url1">name1</a></li><li class="li_class"><a href="url2">name2</a></li><li class="last li_class"><a href="url3">name3</a></li></ul>',
28
28
  renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list))
29
- assert_equal('<ul class="" id=""><li class="first li_class"><a href="url1">name1</a></li> / <li class="li_class"><a href="url2">name2</a></li> / <li class="last li_class"><a href="url3">name3</a></li></ul>',
29
+ assert_equal('<ul class=""><li class="first li_class"><a href="url1">name1</a></li><li> / </li><li class="li_class"><a href="url2">name2</a></li><li> / </li><li class="last li_class"><a href="url3">name3</a></li></ul>',
30
30
  renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list, :separator => " / "))
31
31
  assert_equal('<crumb href="url1">name1</crumb><crumb href="url2">name2</crumb>',
32
32
  renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :xml))
33
33
 
34
34
  assert_dom_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>',
35
35
  renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html, :microdata => true))
36
- 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>',
36
+ assert_equal('<ul class=""><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>',
37
37
  renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html_list, :microdata => true))
38
38
  assert_equal('<ul class="crumbclass" id="crumbid"><li class="liclass"><a href="url">name</a></li></ul>',
39
39
  renderer.render_crumbs([['name', 'url']], :format => :html_list, :ul_id => "crumbid", :ul_class => "crumbclass", :li_class => "liclass"))
@@ -43,44 +43,64 @@ class StandardRendererTest < Test::Unit::TestCase
43
43
  renderer = StandardRenderer.new
44
44
  assert_equal('name',
45
45
  renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html, :last_crumb_linked => false))
46
- assert_equal('<ul class="" id=""><li class="first last"><span>name</span></li></ul>',
46
+ assert_equal('<ul class=""><li class="first last"><span>name</span></li></ul>',
47
47
  renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html_list, :last_crumb_linked => false))
48
48
  assert_equal('<crumb href="url">name</crumb>',
49
49
  renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :xml, :last_crumb_linked => false))
50
50
 
51
51
  assert_dom_equal('<a href="url1" class="first">name1</a> &raquo; name2',
52
52
  renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :html, :last_crumb_linked => false))
53
- assert_equal('<ul class="" id=""><li class="first li_class"><a href="url1">name1</a></li><li class="li_class"><a href="url2">name2</a></li><li class="last li_class"><span>name3</span></li></ul>',
53
+ assert_equal('<ul class=""><li class="first li_class"><a href="url1">name1</a></li><li class="li_class"><a href="url2">name2</a></li><li class="last li_class"><span>name3</span></li></ul>',
54
54
  renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list, :last_crumb_linked => false))
55
- assert_equal('<ul class="" id=""><li class="first li_class"><a href="url1">name1</a></li> / <li class="li_class"><a href="url2">name2</a></li> / <li class="last li_class"><span>name3</span></li></ul>',
55
+ assert_equal('<ul class=""><li class="first li_class"><a href="url1">name1</a></li><li> / </li><li class="li_class"><a href="url2">name2</a></li><li> / </li><li class="last li_class"><span>name3</span></li></ul>',
56
56
  renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list, :separator => " / ", :last_crumb_linked => false))
57
57
  assert_equal('<crumb href="url1">name1</crumb><crumb href="url2">name2</crumb>',
58
58
  renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :xml, :last_crumb_linked => false))
59
59
 
60
60
  assert_equal('<div itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">name</span></div>',
61
61
  renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html, :microdata => true, :last_crumb_linked => false))
62
- assert_equal('<ul class="" id=""><li class="first last" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">name</span></li></ul>',
62
+ assert_equal('<ul class=""><li class="first last" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">name</span></li></ul>',
63
63
  renderer.render_crumbs([['name', 'url']], :first_class => 'first', :last_class => 'last', :format => :html_list, :microdata => true, :last_crumb_linked => false))
64
64
  assert_equal('<ul class="crumbclass" id="crumbid"><li class="liclass"><span>name</span></li></ul>',
65
65
  renderer.render_crumbs([['name', 'url']], :format => :html_list, :ul_id => "crumbid", :ul_class => "crumbclass", :li_class => "liclass", :last_crumb_linked => false))
66
66
  end
67
67
 
68
+ def test_input_object_mutation
69
+ renderer = StandardRenderer.new
70
+ Crummy.configure do |config|
71
+ config.microdata = false
72
+ end
73
+
74
+ name1 = 'name1'
75
+ url1 = nil
76
+ name2 = 'name2'
77
+ url2 = nil
78
+
79
+ renderer.render_crumbs([[name1, url1], [name2, url2]], :format => :html, :microdata => false)
80
+
81
+ # Rendering the crumbs shouldn't alter the input objects.
82
+ assert_equal('name1', name1);
83
+ assert_equal(nil, url2);
84
+ assert_equal('name2', name2);
85
+ assert_equal(nil, url2);
86
+ end
87
+
68
88
  def test_link_html_options
69
89
  renderer = StandardRenderer.new
70
90
  Crummy.configure do |config|
71
91
  config.microdata = false
72
92
  end
73
93
 
74
- assert_equal('<a href="url" class="first last" title="link title">name</a>',
94
+ assert_dom_equal('<a href="url" class="first last" title="link title">name</a>',
75
95
  renderer.render_crumbs([['name', 'url', {:link_html_options => {:title => 'link title'}}]], :first_class => 'first', :last_class => 'last', :format => :html))
76
96
 
77
97
  assert_equal('name',
78
98
  renderer.render_crumbs([['name', 'url', {:link_html_options => {:title => 'link title'}}]], :first_class => 'first', :last_class => 'last', :format => :html, :last_crumb_linked => false))
79
99
 
80
- assert_equal('<ul class="" id=""><li class="first last"><a href="url" title="link title">name</a></li></ul>',
100
+ assert_equal('<ul class=""><li class="first last"><a href="url" title="link title">name</a></li></ul>',
81
101
  renderer.render_crumbs([['name', 'url', {:link_html_options => {:title => 'link title'}}]], :first_class => 'first', :last_class => 'last', :format => :html_list))
82
102
 
83
- assert_equal('<ul class="" id=""><li class="first last"><span>name</span></li></ul>',
103
+ assert_equal('<ul class=""><li class="first last"><span>name</span></li></ul>',
84
104
  renderer.render_crumbs([['name', 'url', {:link_html_options => {:title => 'link title'}}]], :first_class => 'first', :last_class => 'last', :format => :html_list, :last_crumb_linked => false))
85
105
  end
86
106
 
@@ -90,19 +110,38 @@ class StandardRendererTest < Test::Unit::TestCase
90
110
  config.microdata = true
91
111
  end
92
112
 
93
- assert_equal('<div itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="url" class="first last" itemprop="url" title="link title"><span itemprop="title">name</span></a></div>',
113
+ assert_dom_equal('<div itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="url" class="first last" itemprop="url" title="link title"><span itemprop="title">name</span></a></div>',
94
114
  renderer.render_crumbs([['name', 'url', {:link_html_options => {:title => 'link title'}}]], :first_class => 'first', :last_class => 'last', :format => :html))
95
115
 
96
116
  assert_equal('<div itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">name</span></div>',
97
117
  renderer.render_crumbs([['name', 'url', {:link_html_options => {:title => 'link title'}}]], :first_class => 'first', :last_class => 'last', :format => :html, :last_crumb_linked => false))
98
118
 
99
- assert_equal('<ul class="" id=""><li class="first last" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="url" itemprop="url" title="link title"><span itemprop="title">name</span></a></li></ul>',
119
+ assert_equal('<ul class=""><li class="first last" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="url" itemprop="url" title="link title"><span itemprop="title">name</span></a></li></ul>',
100
120
  renderer.render_crumbs([['name', 'url', {:link_html_options => {:title => 'link title'}}]], :first_class => 'first', :last_class => 'last', :format => :html_list))
101
121
 
102
- assert_equal('<ul class="" id=""><li class="first last" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">name</span></li></ul>',
122
+ assert_equal('<ul class=""><li class="first last" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">name</span></li></ul>',
103
123
  renderer.render_crumbs([['name', 'url', {:link_html_options => {:title => 'link title'}}]], :first_class => 'first', :last_class => 'last', :format => :html_list, :last_crumb_linked => false))
104
124
  end
105
125
 
126
+ def test_inline_configuration
127
+ renderer = StandardRenderer.new
128
+ Crummy.configure do |config|
129
+ config.microdata = true
130
+ config.last_crumb_linked = true
131
+ end
132
+
133
+ assert_no_match(/itemscope/, renderer.render_crumbs([['name', 'url']], :microdata => false))
134
+ assert_match(/href/, renderer.render_crumbs([['name', 'url']], :last_crumb_linked => true))
135
+
136
+ Crummy.configure do |config|
137
+ config.microdata = false
138
+ config.last_crumb_linked = true
139
+ end
140
+
141
+ assert_match(/itemscope/, renderer.render_crumbs([['name', 'url']], :microdata => true))
142
+ assert_no_match(/href/, renderer.render_crumbs([['name', 'url']], :last_crumb_linked => false))
143
+ end
144
+
106
145
  def test_configuration
107
146
  renderer = StandardRenderer.new
108
147
  # check defaults
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crummy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.2
4
+ version: 1.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-07 00:00:00.000000000 Z
13
+ date: 2013-10-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
- requirement: &70215967636920 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70215967636920
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: bundler
28
- requirement: &70215967634820 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ~>
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: '1.0'
34
39
  type: :development
35
40
  prerelease: false
36
- version_requirements: *70215967634820
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '1.0'
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: activesupport
39
- requirement: &70215967634140 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ! '>='
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: '0'
45
55
  type: :development
46
56
  prerelease: false
47
- version_requirements: *70215967634140
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: actionpack
50
- requirement: &70215967633040 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,10 +70,15 @@ dependencies:
55
70
  version: '0'
56
71
  type: :development
57
72
  prerelease: false
58
- version_requirements: *70215967633040
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
59
79
  - !ruby/object:Gem::Dependency
60
80
  name: appraisal
61
- requirement: &70215967647760 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  none: false
63
83
  requirements:
64
84
  - - ! '>='
@@ -66,7 +86,12 @@ dependencies:
66
86
  version: '0'
67
87
  type: :development
68
88
  prerelease: false
69
- version_requirements: *70215967647760
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
70
95
  description: Crummy is a simple and tasty way to add breadcrumbs to your Rails applications.
71
96
  email: zach+crummy@londonmade.co.uk
72
97
  executables: []
@@ -159,7 +184,8 @@ files:
159
184
  - lib/crummy/version.rb
160
185
  - test/standard_renderer_test.rb
161
186
  homepage: http://github.com/zachinglis/crummy
162
- licenses: []
187
+ licenses:
188
+ - MIT
163
189
  post_install_message:
164
190
  rdoc_options: []
165
191
  require_paths:
@@ -170,9 +196,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
196
  - - ! '>='
171
197
  - !ruby/object:Gem::Version
172
198
  version: '0'
173
- segments:
174
- - 0
175
- hash: -2479994297472692565
176
199
  required_rubygems_version: !ruby/object:Gem::Requirement
177
200
  none: false
178
201
  requirements:
@@ -181,9 +204,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
204
  version: '0'
182
205
  requirements: []
183
206
  rubyforge_project:
184
- rubygems_version: 1.8.11
207
+ rubygems_version: 1.8.23
185
208
  signing_key:
186
209
  specification_version: 3
187
210
  summary: Tasty breadcrumbs!
188
211
  test_files:
189
212
  - test/standard_renderer_test.rb
213
+ has_rdoc: