bsm-breadcrumbs 0.2.1 → 0.3.0

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/Gemfile CHANGED
@@ -1,6 +1,7 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  gem "actionpack", '~> 3.0.0'
4
+ gem "activemodel", '~> 3.0.0'
4
5
 
5
6
  group :test do
6
7
  gem "test-unit"
data/Gemfile.lock CHANGED
@@ -2,31 +2,31 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  abstract (1.0.0)
5
- actionpack (3.0.1)
6
- activemodel (= 3.0.1)
7
- activesupport (= 3.0.1)
5
+ actionpack (3.0.3)
6
+ activemodel (= 3.0.3)
7
+ activesupport (= 3.0.3)
8
8
  builder (~> 2.1.2)
9
9
  erubis (~> 2.6.6)
10
- i18n (~> 0.4.1)
10
+ i18n (~> 0.4)
11
11
  rack (~> 1.2.1)
12
- rack-mount (~> 0.6.12)
13
- rack-test (~> 0.5.4)
12
+ rack-mount (~> 0.6.13)
13
+ rack-test (~> 0.5.6)
14
14
  tzinfo (~> 0.3.23)
15
- activemodel (3.0.1)
16
- activesupport (= 3.0.1)
15
+ activemodel (3.0.3)
16
+ activesupport (= 3.0.3)
17
17
  builder (~> 2.1.2)
18
- i18n (~> 0.4.1)
19
- activesupport (3.0.1)
18
+ i18n (~> 0.4)
19
+ activesupport (3.0.3)
20
20
  builder (2.1.2)
21
21
  erubis (2.6.6)
22
22
  abstract (>= 1.0.0)
23
- i18n (0.4.2)
23
+ i18n (0.5.0)
24
24
  rack (1.2.1)
25
25
  rack-mount (0.6.13)
26
26
  rack (>= 1.0.0)
27
27
  rack-test (0.5.6)
28
28
  rack (>= 1.0)
29
- test-unit (2.1.1)
29
+ test-unit (2.1.2)
30
30
  tzinfo (0.3.23)
31
31
 
32
32
  PLATFORMS
@@ -34,4 +34,5 @@ PLATFORMS
34
34
 
35
35
  DEPENDENCIES
36
36
  actionpack (~> 3.0.0)
37
+ activemodel (~> 3.0.0)
37
38
  test-unit
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bsm-breadcrumbs}
8
- s.version = "0.2.1"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nando Vieira", "Dimitrij Denissenko"]
12
- s.date = %q{2010-11-11}
12
+ s.date = %q{2010-12-13}
13
13
  s.description = %q{Breadcrumbs is a simple plugin that adds a `breadcrumbs` object to controllers and views.}
14
14
  s.email = %q{dimitrij@blacksquaremedia.com}
15
15
  s.extra_rdoc_files = [
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
32
32
  "lib/breadcrumbs/render/ordered_list.rb",
33
33
  "lib/breadcrumbs/version.rb",
34
34
  "test/breadcrumbs_test.rb",
35
- "test/resources/pt.yml",
35
+ "test/resources/en.yml",
36
36
  "test/test_helper.rb"
37
37
  ]
38
38
  s.homepage = %q{http://github.com/bsm/breadcrumbs}
data/lib/breadcrumbs.rb CHANGED
@@ -5,10 +5,10 @@ class Breadcrumbs < Array
5
5
  autoload :Render, "breadcrumbs/render"
6
6
  autoload :Version, "breadcrumbs/version"
7
7
 
8
- attr_accessor :controller, :items
8
+ attr_reader :controller
9
9
 
10
10
  def initialize(controller) # :nodoc:
11
- self.controller = controller
11
+ @controller = controller
12
12
  super([])
13
13
  end
14
14
 
@@ -27,9 +27,41 @@ class Breadcrumbs < Array
27
27
  url = controller.__send__(:url_for, url) if url
28
28
  push [text.to_s, url, options]
29
29
  end
30
-
31
30
  alias :<< :add
32
31
 
32
+ # Short-cut for adding breadcrumbs. Examples:
33
+ #
34
+ # breadcrumbs.crumb :posts
35
+ # # => ["Posts", "/posts"]
36
+ #
37
+ # breadcrumbs.crumb @post, :comments
38
+ # # => ["Comments", "/posts/123/comments"]
39
+ #
40
+ # @user # => #<User name: "Sam">
41
+ # breadcrumbs.crumb :admin, @account, @user
42
+ # # => ["Sam", "/admin/accounts/123/users/456"]
43
+ #
44
+ # breadcrumbs.crumb @post, :comments, :title => "Our Comments"
45
+ # # => ["Our Comments", "/posts/123/comments"]
46
+ #
47
+ def crumb(*args)
48
+ options = args.extract_options!
49
+
50
+ title = if options[:title]
51
+ options.delete(:title)
52
+ else
53
+ case args.last
54
+ when String, Symbol
55
+ infer_model_name_from_symbol(args.last).human(:count => :multiple)
56
+ else
57
+ infer_title_from_record(args.last)
58
+ end
59
+ end
60
+ url = args.presence || false
61
+
62
+ add title.presence, options.delete(:url) || url, options
63
+ end
64
+
33
65
  # Render breadcrumbs using the specified format.
34
66
  # Use HTML lists by default, but can be plain links.
35
67
  #
@@ -69,6 +101,19 @@ class Breadcrumbs < Array
69
101
  text ||= I18n.t(scope, :default => scope.to_s)
70
102
  text
71
103
  end
104
+
105
+ private
106
+
107
+ def infer_model_name_from_symbol(symbol)
108
+ symbol.to_s.classify.constantize.model_name
109
+ end
110
+
111
+ def infer_title_from_record(record)
112
+ %w(to_label title_was title name_was name label_was label value_was value to_s).each do |m|
113
+ return record.send(m) if record.respond_to?(m)
114
+ end
115
+ end
116
+
72
117
  end
73
118
 
74
- require "breadcrumbs/action_controller_ext"
119
+ require "breadcrumbs/action_controller_ext"
@@ -1,8 +1,8 @@
1
1
  class Breadcrumbs
2
2
  module Version # :nodoc: all
3
3
  MAJOR = 0
4
- MINOR = 2
5
- PATCH = 1
4
+ MINOR = 3
5
+ PATCH = 0
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
@@ -149,7 +149,7 @@ class BreadcrumbsTest < Test::Unit::TestCase
149
149
 
150
150
  items = parse_tag(@breadcrumbs.render).children
151
151
  assert_equal "<span>home</span>", items[0].children.join
152
- assert_equal "<span>Nosso time</span>", items[1].children.join
152
+ assert_equal "<span>Our team</span>", items[1].children.join
153
153
  end
154
154
 
155
155
  def test_render_internationalized_text_using_default_scope
@@ -157,8 +157,8 @@ class BreadcrumbsTest < Test::Unit::TestCase
157
157
  @breadcrumbs.add :people
158
158
 
159
159
  items = parse_tag(@breadcrumbs.render).children
160
- assert_equal "<span>Página inicial</span>", items[0].children.join
161
- assert_equal "<span>Nosso time</span>", items[1].children.join
160
+ assert_equal "<span>Home page</span>", items[0].children.join
161
+ assert_equal "<span>Our team</span>", items[1].children.join
162
162
  end
163
163
 
164
164
  def test_render_scope_as_text_for_missing_scope
@@ -200,6 +200,18 @@ class BreadcrumbsTest < Test::Unit::TestCase
200
200
  assert_equal "Resources", tag.children.join
201
201
  end
202
202
 
203
+ def test_crumb_shortcuts
204
+ @breadcrumbs.crumb :users
205
+ @breadcrumbs.crumb :users, :title => "Custom"
206
+ @breadcrumbs.crumb :admin, :users
207
+ @breadcrumbs.crumb :admin, User.new
208
+
209
+ assert_equal ["Users", "http://test.host/users", {}], @breadcrumbs[0]
210
+ assert_equal ["Custom", "http://test.host/users", {}], @breadcrumbs[1]
211
+ assert_equal ["Users", "http://test.host/admin/users", {}], @breadcrumbs[2]
212
+ assert_equal ["Sam", "http://test.host/admin/users/123", {}], @breadcrumbs[3]
213
+ end
214
+
203
215
  private
204
216
 
205
217
  def reject_blanks!(tag)
@@ -0,0 +1,12 @@
1
+ en:
2
+ activemodel:
3
+ models:
4
+ user:
5
+ one: User
6
+ other: Users
7
+
8
+ people: "Our team"
9
+
10
+ breadcrumbs:
11
+ home: "Home page"
12
+ about: "About us"
data/test/test_helper.rb CHANGED
@@ -7,21 +7,37 @@ require 'test/unit'
7
7
  require "breadcrumbs"
8
8
  require 'action_controller'
9
9
  require 'action_controller/test_case'
10
+ require 'active_model/naming'
10
11
 
11
- I18n.load_path << File.dirname(__FILE__) + "/resources/pt.yml"
12
- I18n.locale = :pt
12
+ I18n.load_path << File.dirname(__FILE__) + "/resources/en.yml"
13
+ I18n.locale = :en
13
14
 
14
15
  class TestsController < ActionController::Base
15
16
  end
16
17
 
17
- if ActionPack::VERSION::MAJOR == 3
18
- routes = ActionDispatch::Routing::RouteSet.new
19
- routes.draw do
20
- resources :tests
18
+ class UsersController < ActionController::Base
19
+ end
20
+
21
+ module Admin
22
+ class UsersController < ActionController::Base
21
23
  end
22
- TestsController.send(:include, routes.url_helpers)
23
- else
24
- ActionController::Routing::Routes.draw do |map|
25
- map.resources :tests
24
+ end
25
+
26
+ routes = ActionDispatch::Routing::RouteSet.new
27
+ routes.draw do
28
+ resources :tests
29
+ resources :users
30
+ namespace :admin do
31
+ resources :users
26
32
  end
27
33
  end
34
+ TestsController.send(:include, routes.url_helpers)
35
+
36
+ class User
37
+ extend ActiveModel::Naming
38
+ extend ActiveModel::Translation
39
+
40
+ def to_param; "123" end
41
+ def name_was; "Sam" end
42
+ def name; "" end
43
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bsm-breadcrumbs
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 1
10
- version: 0.2.1
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nando Vieira
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-11-11 00:00:00 +00:00
19
+ date: 2010-12-13 00:00:00 +00:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -60,7 +60,7 @@ files:
60
60
  - lib/breadcrumbs/render/ordered_list.rb
61
61
  - lib/breadcrumbs/version.rb
62
62
  - test/breadcrumbs_test.rb
63
- - test/resources/pt.yml
63
+ - test/resources/en.yml
64
64
  - test/test_helper.rb
65
65
  has_rdoc: true
66
66
  homepage: http://github.com/bsm/breadcrumbs
@@ -1,6 +0,0 @@
1
- pt:
2
- people: "Nosso time"
3
-
4
- breadcrumbs:
5
- home: "Página inicial"
6
- about: "Sobre"