breadcrumbs 0.1.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/.github/CODEOWNERS +4 -0
  3. data/.github/FUNDING.yml +4 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
  5. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  7. data/.github/PULL_REQUEST_TEMPLATE.md +38 -0
  8. data/.github/dependabot.yml +20 -0
  9. data/.github/workflows/ruby-tests.yml +52 -0
  10. data/.gitignore +4 -0
  11. data/.rubocop.yml +11 -0
  12. data/CODE_OF_CONDUCT.md +74 -0
  13. data/CONTRIBUTING.md +80 -0
  14. data/Gemfile +4 -0
  15. data/LICENSE.md +20 -0
  16. data/README.md +142 -0
  17. data/Rakefile +15 -0
  18. data/breadcrumbs.gemspec +49 -0
  19. data/examples/myapp/.gitignore +12 -0
  20. data/examples/myapp/Gemfile +12 -0
  21. data/examples/myapp/README.rdoc +28 -0
  22. data/examples/myapp/Rakefile +6 -0
  23. data/examples/myapp/app/assets/images/.keep +0 -0
  24. data/examples/myapp/app/assets/stylesheets/application.css +49 -0
  25. data/examples/myapp/app/controllers/application_controller.rb +13 -0
  26. data/examples/myapp/app/controllers/concerns/.keep +0 -0
  27. data/examples/myapp/app/controllers/site_controller.rb +9 -0
  28. data/examples/myapp/app/helpers/application_helper.rb +2 -0
  29. data/examples/myapp/app/mailers/.keep +0 -0
  30. data/examples/myapp/app/models/.keep +0 -0
  31. data/examples/myapp/app/models/concerns/.keep +0 -0
  32. data/examples/myapp/app/views/layouts/application.html.erb +15 -0
  33. data/examples/myapp/app/views/site/contact.html.erb +1 -0
  34. data/examples/myapp/app/views/site/home.html.erb +1 -0
  35. data/examples/myapp/bin/bundle +3 -0
  36. data/examples/myapp/bin/rails +4 -0
  37. data/examples/myapp/bin/rake +4 -0
  38. data/examples/myapp/bin/setup +29 -0
  39. data/examples/myapp/config/application.rb +30 -0
  40. data/examples/myapp/config/boot.rb +3 -0
  41. data/examples/myapp/config/environment.rb +5 -0
  42. data/examples/myapp/config/environments/development.rb +38 -0
  43. data/examples/myapp/config/environments/production.rb +73 -0
  44. data/examples/myapp/config/environments/test.rb +39 -0
  45. data/examples/myapp/config/initializers/assets.rb +11 -0
  46. data/examples/myapp/config/initializers/backtrace_silencers.rb +7 -0
  47. data/examples/myapp/config/initializers/cookies_serializer.rb +3 -0
  48. data/examples/myapp/config/initializers/filter_parameter_logging.rb +4 -0
  49. data/examples/myapp/config/initializers/inflections.rb +16 -0
  50. data/examples/myapp/config/initializers/mime_types.rb +4 -0
  51. data/examples/myapp/config/initializers/session_store.rb +3 -0
  52. data/examples/myapp/config/initializers/wrap_parameters.rb +9 -0
  53. data/examples/myapp/config/locales/en.yml +28 -0
  54. data/examples/myapp/config/routes.rb +5 -0
  55. data/examples/myapp/config/secrets.yml +22 -0
  56. data/examples/myapp/config.ru +4 -0
  57. data/examples/myapp/db/seeds.rb +7 -0
  58. data/examples/myapp/lib/assets/.keep +0 -0
  59. data/examples/myapp/lib/tasks/.keep +0 -0
  60. data/examples/myapp/log/.keep +0 -0
  61. data/examples/myapp/public/404.html +67 -0
  62. data/examples/myapp/public/422.html +67 -0
  63. data/examples/myapp/public/500.html +66 -0
  64. data/examples/myapp/public/favicon.ico +0 -0
  65. data/examples/myapp/public/robots.txt +5 -0
  66. data/examples/myapp/vendor/assets/stylesheets/.keep +0 -0
  67. data/lib/breadcrumbs/action_controller_ext.rb +3 -1
  68. data/lib/breadcrumbs/render/base.rb +9 -21
  69. data/lib/breadcrumbs/render/inline.rb +12 -8
  70. data/lib/breadcrumbs/render/list.rb +8 -8
  71. data/lib/breadcrumbs/render/ordered_list.rb +2 -0
  72. data/lib/breadcrumbs/render.rb +6 -4
  73. data/lib/breadcrumbs/version.rb +4 -2
  74. data/lib/breadcrumbs.rb +36 -21
  75. data/test/breadcrumbs_test.rb +71 -56
  76. data/test/{resources/pt.yml → support/pt-BR.yml} +3 -2
  77. data/test/test_helper.rb +11 -6
  78. metadata +288 -55
  79. data/README.rdoc +0 -113
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-agent: *
5
+ # Disallow: /
File without changes
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Breadcrumbs
2
4
  module ActionController # :nodoc: all
3
5
  def self.included(base)
@@ -10,4 +12,4 @@ class Breadcrumbs
10
12
  end
11
13
  end
12
14
 
13
- ActionController::Base.send :include, Breadcrumbs::ActionController
15
+ ActionController::Base.include Breadcrumbs::ActionController
@@ -1,36 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Breadcrumbs
2
4
  module Render
3
5
  class Base # :nodoc: all
4
- attr_accessor :breadcrumbs
5
- attr_accessor :default_options
6
+ include ::ActionView::Helpers::TagHelper
7
+
8
+ attr_accessor :breadcrumbs, :default_options, :output_buffer
6
9
 
7
10
  def initialize(breadcrumbs, default_options = {})
8
11
  @breadcrumbs = breadcrumbs
9
12
  @default_options = default_options
10
13
  end
11
14
 
12
- # Build a HTML tag.
13
- #
14
- # tag(:p, "Hello!")
15
- # tag(:p, "Hello!", :class => "hello")
16
- # tag(:p, :class => "phrase") { "Hello" }
17
- #
18
- def tag(name, *args, &block)
19
- options = args.pop if args.last.kind_of?(Hash)
20
- options ||= {}
21
-
22
- content = args.first
23
- content = self.instance_eval(&block) if block_given?
24
-
25
- attrs = " " + options.collect {|n, v| %[%s="%s"] % [n, v] }.join(" ") unless options.empty?
26
-
27
- %[<#{name}#{attrs}>#{content}</#{name}>]
15
+ def tag(name, content = "", options = {}, &block)
16
+ content_tag(name, content, options, &block)
28
17
  end
29
18
 
30
- protected
31
- def wrap_item(url, text, options)
19
+ protected def wrap_item(url, text, options)
32
20
  if url
33
- tag(:a, text, options.merge(:href => url))
21
+ tag(:a, text, options.merge(href: url))
34
22
  else
35
23
  tag(:span, text, options)
36
24
  end
@@ -1,8 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Breadcrumbs
2
4
  module Render
3
5
  class Inline < Base # :nodoc: all
4
6
  def render
5
- options = {:class => "breadcrumbs", :separator => "&#187;"}.merge(default_options)
7
+ options = {
8
+ class: "breadcrumbs",
9
+ separator: "&#187;"
10
+ }.merge(default_options)
6
11
 
7
12
  html = []
8
13
  items = breadcrumbs.items
@@ -12,24 +17,23 @@ class Breadcrumbs
12
17
  html << render_item(item, i, size)
13
18
  end
14
19
 
15
- separator = tag(:span, options[:separator], :class => "separator")
20
+ separator = tag(:span, options[:separator], class: "separator")
16
21
 
17
- html.join(" #{separator} ")
22
+ html.join(" #{separator} ").html_safe
18
23
  end
19
24
 
20
25
  def render_item(item, i, size)
21
26
  text, url, options = *item
22
- options[:class] ||= ""
23
27
 
24
- css = []
25
- css << "first" if i == 0
28
+ css = [options[:class]].compact
29
+ css << "first" if i.zero?
26
30
  css << "last" if i == size - 1
27
31
  css << "item-#{i}"
28
32
 
29
- options[:class] << " #{css.join(" ")}"
33
+ options[:class] = css.join(" ")
30
34
  options[:class].gsub!(/^ *(.*?)$/, '\\1')
31
35
 
32
- wrap_item(url, CGI.escapeHTML(text), options)
36
+ wrap_item(url, text, options)
33
37
  end
34
38
  end
35
39
  end
@@ -1,13 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Breadcrumbs
2
4
  module Render
3
5
  class List < Base # :nodoc: all
4
6
  def render
5
- options = {
6
- :class => "breadcrumbs"
7
- }.merge(default_options)
7
+ options = {class: "breadcrumbs"}.merge(default_options)
8
8
 
9
9
  tag(list_style, options) do
10
- html = ""
10
+ html = []
11
11
  items = breadcrumbs.items
12
12
  size = items.size
13
13
 
@@ -15,7 +15,7 @@ class Breadcrumbs
15
15
  html << render_item(item, i, size)
16
16
  end
17
17
 
18
- html
18
+ html.join.html_safe
19
19
  end
20
20
  end
21
21
 
@@ -25,13 +25,13 @@ class Breadcrumbs
25
25
 
26
26
  def render_item(item, i, size)
27
27
  css = []
28
- css << "first" if i == 0
28
+ css << "first" if i.zero?
29
29
  css << "last" if i == size - 1
30
30
  css << "item-#{i}"
31
31
 
32
32
  text, url, options = *item
33
- text = wrap_item(url, CGI.escapeHTML(text), options)
34
- tag(:li, text, :class => css.join(" "))
33
+ text = wrap_item(url, text, options)
34
+ tag(:li, text, class: css.join(" "))
35
35
  end
36
36
  end
37
37
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Breadcrumbs
2
4
  module Render
3
5
  class OrderedList < List # :nodoc: all
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Breadcrumbs
2
4
  module Render
3
- autoload :Base, "breadcrumbs/render/base"
4
- autoload :Inline, "breadcrumbs/render/inline"
5
- autoload :List, "breadcrumbs/render/list"
6
- autoload :OrderedList, "breadcrumbs/render/ordered_list"
5
+ require "breadcrumbs/render/base"
6
+ require "breadcrumbs/render/inline"
7
+ require "breadcrumbs/render/list"
8
+ require "breadcrumbs/render/ordered_list"
7
9
  end
8
10
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Breadcrumbs
2
4
  module Version # :nodoc: all
3
5
  MAJOR = 0
4
- MINOR = 1
5
- PATCH = 5
6
+ MINOR = 3
7
+ PATCH = 0
6
8
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
9
  end
8
10
  end
data/lib/breadcrumbs.rb CHANGED
@@ -1,7 +1,11 @@
1
- require "i18n" unless defined?(I18n)
1
+ # frozen_string_literal: true
2
+
3
+ require "i18n"
4
+ require "action_view"
5
+ require "active_support/inflector"
6
+
2
7
  require "breadcrumbs/render"
3
8
  require "breadcrumbs/action_controller_ext" if defined?(ActionController)
4
- require "active_support/inflector"
5
9
 
6
10
  class Breadcrumbs
7
11
  attr_accessor :items
@@ -12,33 +16,34 @@ class Breadcrumbs
12
16
 
13
17
  # Add a new breadcrumbs.
14
18
  #
15
- # breadcrumbs.add "Home"
16
- # breadcrumbs.add "Home", "/"
17
- # breadcrumbs.add "Home", "/", :class => "home"
19
+ # breadcrumbs.add 'Home'
20
+ # breadcrumbs.add 'Home', '/'
21
+ # breadcrumbs.add 'Home', '/', class: 'home'
18
22
  #
19
23
  # If you provide a symbol as text, it will try to
20
24
  # find it as I18n scope.
21
25
  #
22
26
  def add(text, url = nil, options = {})
23
- options.reverse_merge!(:i18n => true)
27
+ options = {i18n: true}.merge(options)
24
28
  text = translate(text) if options.delete(:i18n)
25
29
  items << [text.to_s, url, options]
26
30
  end
27
31
 
28
- alias :<< :add
32
+ alias << add
29
33
 
30
34
  # Render breadcrumbs using the specified format.
31
35
  # Use HTML lists by default, but can be plain links.
32
36
  #
33
37
  # breadcrumbs.render
34
- # breadcrumbs.render(:format => :inline)
35
- # breadcrumbs.render(:format => :inline, :separator => "|")
36
- # breadcrumbs.render(:format => :list)
37
- # breadcrumbs.render(:format => :ordered_list)
38
- # breadcrumbs.render(:id => "breadcrumbs")
39
- # breadcrumbs.render(:class => "breadcrumbs")
38
+ # breadcrumbs.render(format: "inline")
39
+ # breadcrumbs.render(format: "inline", separator: "|")
40
+ # breadcrumbs.render(format: "list")
41
+ # breadcrumbs.render(format: "ordered_list")
42
+ # breadcrumbs.render(id: 'breadcrumbs')
43
+ # breadcrumbs.render(class: 'breadcrumbs')
40
44
  #
41
- # You can also define your own formatter. Just create a class that implements a +render+ instance
45
+ # You can also define your own formatter. Just create a class that implements
46
+ # a +render+ instance
42
47
  # method and you're good to go.
43
48
  #
44
49
  # class Breadcrumbs::Render::Dl
@@ -49,21 +54,31 @@ class Breadcrumbs
49
54
  #
50
55
  # To use your new format, just provide the <tt>:format</tt> option.
51
56
  #
52
- # breadcrumbs.render(:format => :dl)
57
+ # breadcrumbs.render(format: 'dl')
53
58
  #
54
59
  def render(options = {})
55
60
  options[:format] ||= :list
56
61
 
57
- klass_name = options[:format].to_s.classify
62
+ klass_name = options.delete(:format).to_s.classify
58
63
  klass = Breadcrumbs::Render.const_get(klass_name)
59
- html = klass.new(self, options).render
60
-
61
- html.respond_to?(:html_safe) ? html.html_safe : html
64
+ klass.new(self, options).render
62
65
  end
63
66
 
64
67
  def translate(scope) # :nodoc:
65
- text = I18n.t(scope, :scope => :breadcrumbs, :raise => true) rescue nil
66
- text ||= I18n.t(scope, :default => scope.to_s)
68
+ return scope if scope.match?(/\A[\s.]+\z/)
69
+
70
+ text = begin
71
+ I18n.t(scope, scope: "breadcrumbs", raise: true)
72
+ rescue StandardError
73
+ nil
74
+ end
75
+
76
+ text ||= begin
77
+ I18n.t(scope, default: scope.to_s)
78
+ rescue StandardError
79
+ scope
80
+ end
81
+
67
82
  text
68
83
  end
69
84
  end
@@ -1,19 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "test_helper"
2
4
 
3
- class BreadcrumbsTest < Test::Unit::TestCase
5
+ class BreadcrumbsTest < Minitest::Test
4
6
  def setup
5
7
  @breadcrumbs = Breadcrumbs.new
6
8
  @inline = Breadcrumbs::Render::Inline.new(@breadcrumbs)
7
9
  end
8
10
 
9
- def test_return_safe_html
10
- html_mock = mock
11
- html_mock.expects(:html_safe).once
12
- Breadcrumbs::Render::List.any_instance.stubs(:render).returns(html_mock)
13
- @breadcrumbs.render(:format => :list)
11
+ test "returns safe html" do
12
+ assert @breadcrumbs.render(format: "list").html_safe?
14
13
  end
15
14
 
16
- def test_add_item
15
+ test "adds item" do
17
16
  @breadcrumbs.add "Home"
18
17
  assert_equal 1, @breadcrumbs.items.count
19
18
 
@@ -21,54 +20,56 @@ class BreadcrumbsTest < Test::Unit::TestCase
21
20
  assert_equal 2, @breadcrumbs.items.count
22
21
  end
23
22
 
24
- def test_tag
25
- assert_equal "<span>Hi!</span>", @inline.tag(:span, "Hi!")
26
- end
27
-
28
- def test_tag_with_attributes
23
+ test "renders tag with attributes" do
29
24
  expected = %[<span class="greetings" id="hi">Hi!</span>]
30
- assert_equal expected, @inline.tag(:span, "Hi!", :class => "greetings", :id => "hi")
25
+ assert_equal expected,
26
+ @inline.tag(:span, "Hi!", class: "greetings", id: "hi")
31
27
  end
32
28
 
33
- def test_tag_with_block
29
+ test "renders tag with block" do
34
30
  assert_equal "<span>Hi!</span>", @inline.tag(:span) { "Hi!" }
35
31
  end
36
32
 
37
- def test_tag_with_block_and_attributes
33
+ test "renders tag with block and attributes" do
38
34
  expected = %[<span class="greetings" id="hi">Hi!</span>]
39
- assert_equal expected, @inline.tag(:span, :class => "greetings", :id => "hi") { "Hi!" }
35
+ assert_equal expected,
36
+ @inline.tag(:span, class: "greetings", id: "hi") { "Hi!" }
40
37
  end
41
38
 
42
- def test_nested_tags
39
+ test "renders nested tags" do
43
40
  expected = %[<span class="greetings"><strong id="hi">Hi!</strong></span>]
44
- actual = @inline.tag(:span, :class => "greetings") { tag(:strong, "Hi!", :id => "hi") }
41
+ actual = @inline.tag(:span, class: "greetings") do
42
+ @inline.tag(:strong, "Hi!", id: "hi")
43
+ end
44
+
45
45
  assert_equal expected, actual
46
46
  end
47
47
 
48
- def test_render_as_list
49
- @breadcrumbs.add "Home", "/", :class => "home"
48
+ test "renders as list" do
49
+ @breadcrumbs.add "Home", "/", class: "home"
50
50
  html = Nokogiri::HTML(@breadcrumbs.render)
51
51
 
52
- assert_not_nil html.at("ul.breadcrumbs")
52
+ refute_nil html.at("ul.breadcrumbs")
53
+ assert_nil html.at("ul.breadcrumbs[format=list]")
53
54
  end
54
55
 
55
- def test_render_as_ordered_list
56
+ test "renders as ordered list" do
56
57
  @breadcrumbs.add "Home", "/"
57
- html = Nokogiri::HTML(@breadcrumbs.render(:format => :ordered_list))
58
+ html = Nokogiri::HTML(@breadcrumbs.render(format: "ordered_list"))
58
59
 
59
- assert_not_nil html.at("ol.breadcrumbs")
60
+ refute_nil html.at("ol.breadcrumbs")
60
61
  end
61
62
 
62
- def test_render_as_list_with_custom_attributes
63
- @breadcrumbs.add "Home", "/", :class => "home"
64
- html = Nokogiri::HTML(@breadcrumbs.render(:id => "breadcrumbs", :class => "top"))
63
+ test "renders as list with custom attributes" do
64
+ @breadcrumbs.add "Home", "/", class: "home"
65
+ html = Nokogiri::HTML(@breadcrumbs.render(id: "breadcrumbs", class: "top"))
65
66
 
66
- assert_not_nil html.at("ul.top#breadcrumbs")
67
+ refute_nil html.at("ul.top#breadcrumbs")
67
68
  end
68
69
 
69
- def test_render_as_list_add_items
70
- @breadcrumbs.add "Home", "/", :class => "home"
71
- @breadcrumbs.add "About", "/about", :class => "about"
70
+ test "renders as list add items" do
71
+ @breadcrumbs.add "Home", "/", class: "home"
72
+ @breadcrumbs.add "About", "/about", class: "about"
72
73
  @breadcrumbs.add "People"
73
74
 
74
75
  html = Nokogiri::HTML(@breadcrumbs.render)
@@ -93,24 +94,24 @@ class BreadcrumbsTest < Test::Unit::TestCase
93
94
  assert_equal "last item-2", items[2]["class"]
94
95
  assert_equal "People", items[2].inner_text
95
96
  assert_nil items[2].at("a")
96
- assert_not_nil items[2].at("span")
97
+ refute_nil items[2].at("span")
97
98
  end
98
99
 
99
- def test_render_inline
100
- @breadcrumbs.add "Home", "/", :class => "home"
101
- html = Nokogiri::HTML(@breadcrumbs.render(:format => :inline))
100
+ test "renders inline" do
101
+ @breadcrumbs.add "Home", "/", class: "home"
102
+ html = Nokogiri::HTML(@breadcrumbs.render(format: "inline"))
102
103
 
103
104
  assert_nil html.at("ul.breadcrumbs")
104
105
  end
105
106
 
106
- def test_render_inline_add_items
107
- @breadcrumbs.add "Home", "/", :class => "home"
108
- @breadcrumbs.add "About", "/about", :class => "about"
107
+ test "renders inline add items" do
108
+ @breadcrumbs.add "Home", "/", class: "home"
109
+ @breadcrumbs.add "About", "/about", class: "about"
109
110
  @breadcrumbs.add "People"
110
111
 
111
- html = @breadcrumbs.render(:format => :inline)
112
+ html = @breadcrumbs.render(format: "inline")
112
113
  html = Nokogiri::HTML("<div>#{html}</div>")
113
- separator = Nokogiri::HTML("<span>&#187;</span>").at("span").inner_text
114
+ separator = "&#187;"
114
115
 
115
116
  items = html.search("div *")
116
117
 
@@ -139,17 +140,17 @@ class BreadcrumbsTest < Test::Unit::TestCase
139
140
  assert_equal "People", items[4].inner_text
140
141
  end
141
142
 
142
- def test_render_inline_with_custom_separator
143
- @breadcrumbs.add "Home", "/", :class => "home"
143
+ test "renders inline with custom separator" do
144
+ @breadcrumbs.add "Home", "/", class: "home"
144
145
  @breadcrumbs.add "People"
145
146
 
146
- html = Nokogiri::HTML(@breadcrumbs.render(:format => :inline, :separator => "|"))
147
+ html = Nokogiri::HTML(@breadcrumbs.render(format: "inline", separator: "|"))
147
148
 
148
149
  assert_equal "|", html.at("span.separator").inner_text
149
150
  end
150
151
 
151
- def test_render_original_text_when_disabling_translation
152
- @breadcrumbs.add :home, nil, :i18n => false
152
+ test "renders original text when disabling_translation" do
153
+ @breadcrumbs.add :home, nil, i18n: false
153
154
  @breadcrumbs.add :people
154
155
 
155
156
  html = Nokogiri::HTML(@breadcrumbs.render)
@@ -160,7 +161,7 @@ class BreadcrumbsTest < Test::Unit::TestCase
160
161
  assert_equal "Nosso time", items[1].inner_text
161
162
  end
162
163
 
163
- def test_render_internationalized_text_using_default_scope
164
+ test "renders internationalized text using default scope" do
164
165
  @breadcrumbs.add :home
165
166
  @breadcrumbs.add :people
166
167
 
@@ -172,34 +173,48 @@ class BreadcrumbsTest < Test::Unit::TestCase
172
173
  assert_equal "Nosso time", items[1].inner_text
173
174
  end
174
175
 
175
- def test_render_scope_as_text_for_missing_scope
176
+ test "renders scope as text for missing scope" do
176
177
  @breadcrumbs.add :contact
177
178
  @breadcrumbs.add "Help"
178
179
 
179
180
  html = Nokogiri::HTML(@breadcrumbs.render)
180
-
181
181
  items = html.search("li")
182
182
 
183
183
  assert_equal "contact", items[0].inner_text
184
184
  assert_equal "Help", items[1].inner_text
185
185
  end
186
186
 
187
- def test_pimp_action_controller
187
+ test "extends action controller" do
188
188
  methods = ActionController::Base.instance_methods
189
- assert (methods.include?(:breadcrumbs) || methods.include?("breadcrumbs"))
189
+ assert(methods.include?(:breadcrumbs) || methods.include?("breadcrumbs"))
190
190
  end
191
191
 
192
- def test_escape_text_when_rendering_inline
192
+ test "escapes text when rendering inline" do
193
193
  @breadcrumbs.add "<script>alert(1)</script>"
194
- html = @breadcrumbs.render(:format => :inline)
194
+ html = Nokogiri::HTML(@breadcrumbs.render(format: "inline"))
195
195
 
196
- assert_equal %[<span class="first last item-0">&lt;script&gt;alert(1)&lt;/script&gt;</span>], html
196
+ assert_empty html.search("script")
197
197
  end
198
198
 
199
- def test_escape_text_when_rendering_list
199
+ test "escapes text when rendering list" do
200
200
  @breadcrumbs.add "<script>alert(1)</script>"
201
- html = @breadcrumbs.render
201
+ html = Nokogiri::HTML(@breadcrumbs.render)
202
+
203
+ assert_empty html.search("script")
204
+ end
205
+
206
+ test "renders dots as breadcrumb items" do
207
+ @breadcrumbs.add "."
208
+ @breadcrumbs.add ".."
209
+ @breadcrumbs.add "..."
210
+ @breadcrumbs.add ". . ."
211
+ html = Nokogiri::HTML(@breadcrumbs.render)
212
+
213
+ items = html.search("li")
202
214
 
203
- assert_match /&lt;script&gt;alert\(1\)&lt;\/script&gt;/, html
215
+ assert_equal ".", items[0].inner_text
216
+ assert_equal "..", items[1].inner_text
217
+ assert_equal "...", items[2].inner_text
218
+ assert_equal ". . .", items[3].inner_text
204
219
  end
205
220
  end
@@ -1,6 +1,7 @@
1
- pt:
1
+ ---
2
+ pt-BR:
2
3
  people: "Nosso time"
3
4
 
4
5
  breadcrumbs:
5
6
  home: "Página inicial"
6
- about: "Sobre"
7
+ about: "Sobre"
data/test/test_helper.rb CHANGED
@@ -1,12 +1,17 @@
1
- require "rubygems"
2
- gem "test-unit"
3
- require "test/unit"
1
+ # frozen_string_literal: true
2
+
3
+ require "simplecov"
4
+ SimpleCov.start
5
+
6
+ require "bundler/setup"
7
+ require "minitest/utils"
8
+ require "minitest/autorun"
4
9
  require "cgi"
5
10
  require "nokogiri"
6
11
  require "action_controller"
7
- require "mocha"
12
+ require "mocha/test_unit"
8
13
 
9
14
  require "breadcrumbs"
10
15
 
11
- I18n.load_path << File.dirname(__FILE__) + "/resources/pt.yml"
12
- I18n.locale = :pt
16
+ I18n.load_path << "#{File.dirname(__FILE__)}/support/pt-BR.yml"
17
+ I18n.locale = "pt-BR"