loaf 0.1.0 → 0.1.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.rdoc CHANGED
@@ -1,36 +1,51 @@
1
- = loaf
1
+ = Loaf
2
2
 
3
3
  Breadcrumbs creation library.
4
4
 
5
- * Helps in creating breadcrumbs.
6
- * Uses controllers to specify names and routes for parts of breadcrum trails or collections of breadcrumbs.
7
- * Stays out of your way when it comes to markup exposing only single helper method to access breadcrumb data.
5
+ * Helps in creating breadcrumbs.
6
+ * Uses controllers to specify names and routes for parts of breadcrum trails or collections of breadcrumbs.
7
+ * Stays out of your way when it comes to markup exposing only single helper method to access breadcrumb data.
8
8
 
9
9
  == Installation
10
10
 
11
11
  Install from source:
12
-
12
+
13
13
  gem install loaf
14
14
 
15
15
  Add to your Gemfile:
16
-
16
+
17
17
  gem 'loaf'
18
18
 
19
19
  == Configuration
20
20
 
21
- There is small set of custom opinionated defaults. However, to override them in your views just pass an option hash.
21
+ There is small set of custom opinionated defaults. However, to override them in your views just pass an option hash. The following options are valid:
22
+
23
+ :crumb_length # integer, default length is 30 characters
24
+ :root # boolean, default is true, displays the home crumb
22
25
 
23
26
  == Usage
24
27
 
25
28
  In controller:
26
29
 
30
+ class Blog::CategoriesController < ApplicationController
31
+
32
+ add_breadcrumb 'Article Categories', 'blog_categories_path', :only => [:show]
33
+
34
+ def show
35
+ add_breadcrumb "#{@category.title}", 'blog_category_path(@category)'
36
+ end
37
+ end
38
+
27
39
  You can add breadcrumbs for nested resources, for instance, article categories:
28
40
 
29
41
  You can add semantic markup in your view to show breadcrumbs
30
42
 
31
43
  <ul id="breadcrumbs">
32
- <%- breadcrumbs :crumb_length => 5 do |name, url, styles| -%>
33
- <li class="<%= styles %>"><%= link_to name, url %></li>
44
+ <%- breadcrumbs :crumb_length => 20 do |name, url, styles| -%>
45
+ <li class="<%= styles %>">
46
+ <%= link_to name, url %>
47
+ <span><%= styles == 'selected' ? '' : '::' %></span>
48
+ </li>
34
49
  <%- end -%>
35
50
  </ul>
36
51
 
@@ -41,7 +56,7 @@ You can add semantic markup in your view to show breadcrumbs
41
56
  * Finish specs
42
57
 
43
58
  == Contributing to loaf
44
-
59
+
45
60
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
46
61
  * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
47
62
  * Fork the project
@@ -6,13 +6,14 @@ module Loaf
6
6
  :style_classes,
7
7
  :crumb_length,
8
8
  :last_crumb_linked,
9
- :capitalize
9
+ :capitalize,
10
+ :root
10
11
  ]
11
12
 
12
13
  attr_accessor *VALID_ATTRIBUTES
13
14
 
14
15
  DEFAULT_LOCALES_PATH = "/"
15
-
16
+
16
17
  DEFAULT_STYLE_CLASSES = 'selected'
17
18
 
18
19
  DEFAULT_CRUMB_LENGTH = 30
@@ -21,6 +22,8 @@ module Loaf
21
22
 
22
23
  DEFAULT_CAPITALIZE = false
23
24
 
25
+ DEFAULT_ROOT = true
26
+
24
27
  def configure
25
28
  yield self
26
29
  end
@@ -38,6 +41,6 @@ module Loaf
38
41
  send("#{attr}=", parent.const_get("DEFAULT_#{attr.to_s.upcase}"))
39
42
  end
40
43
  end
41
-
44
+
42
45
  end # Configuration
43
46
  end # Loaf
data/lib/loaf/filters.rb CHANGED
@@ -26,21 +26,26 @@ module Loaf
26
26
  end
27
27
 
28
28
  def _process_url(url)
29
-
30
29
  end
31
30
  end
32
31
 
33
32
  module InstanceMethods
34
33
 
35
34
  # Add collection of nested breadcrumbs.
36
- def add_breadcrumbs(collection=[], options={})
37
- return nil unless collection.is_a? Array
38
-
39
- attr = options[:attr].delete
40
- prefix = options[:prefix].delete
41
-
42
- collection.each do |item|
43
- add_breadcrumb("#{item.send(attr.to_sym)}", prefix + '(' + item + ')' )
35
+ # * <tt>collection</tt> - required collection of object for iteration
36
+ # * <tt>field</tt> - required object attribute name
37
+ #
38
+ def add_breadcrumbs(collection, field, options={})
39
+ namespace = nil
40
+ item_set = if _check_if_nested collection
41
+ items = collection.pop
42
+ namespace = collection
43
+ items
44
+ else
45
+ collection
46
+ end
47
+ item_set.each do |item|
48
+ add_breadcrumb item.send(field.to_sym), [ namespace, item ].flatten.compact
44
49
  end
45
50
  end
46
51
 
@@ -56,6 +61,12 @@ module Loaf
56
61
  _breadcrumbs.clear
57
62
  end
58
63
 
64
+ private
65
+
66
+ def _check_if_nested(collection)
67
+ collection.last.is_a? Array
68
+ end
69
+
59
70
  end # InstanceMethods
60
71
 
61
72
  def self.included(base)
data/lib/loaf/helpers.rb CHANGED
@@ -2,7 +2,7 @@ require 'loaf/configuration'
2
2
 
3
3
  module Loaf
4
4
  module Helpers
5
-
5
+
6
6
  class_eval do
7
7
  define_method :config do |options|
8
8
  Loaf.config
@@ -13,20 +13,37 @@ module Loaf
13
13
  def add_breadcrumb(name, url=nil)
14
14
  _breadcrumbs.push(name, url)
15
15
  end
16
-
16
+
17
17
  def breadcrumbs(options={}, &block)
18
18
  #builder = Loaf::Builder.new(options)
19
19
  options = config.merge(options)
20
20
 
21
21
  _breadcrumbs.each do |crumb|
22
-
23
- name = crumb.name ? truncate(crumb.name.upcase, :length => options[:crumb_length]) : ''
24
- url = eval(crumb.url)
22
+
23
+ name = if crumb.name
24
+ formatted = options[:capitalize] ? crumb.name.capitalize : crumb.name
25
+ truncate(formatted, :length => options[:crumb_length])
26
+ else
27
+ '[name-error]'
28
+ end
29
+
30
+ url = url_for _process_url_for(crumb.url)
31
+
25
32
  styles = ( request.request_uri.split('?')[0] == url ? "#{options[:style_classes]}" : '' )
26
-
33
+
27
34
  block.call(name, url, styles)
28
35
  end
29
36
  end
30
37
 
38
+ private
39
+
40
+ def _process_url_for(url)
41
+ if url.is_a?(String) || url.is_a?(Symbol)
42
+ return send url
43
+ else
44
+ return url
45
+ end
46
+ end
47
+
31
48
  end # Helpers
32
49
  end # Loaf
data/lib/loaf/version.rb CHANGED
@@ -2,9 +2,9 @@ module Loaf
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- PATCH = 0
5
+ PATCH = 1
6
6
  BUILD = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.');
9
9
  end
10
- end
10
+ end # Loaf
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Piotr Murach
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-10-23 00:00:00 +01:00
17
+ date: 2011-11-20 00:00:00 +00:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency