bsm-breadcrumbs 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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"