breadcrumbs_rails 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 481a041e6639cb0a33b985322c02c98dcc60a496fd528f2cf647406b479057a7
4
+ data.tar.gz: 368657c68d3be4bfd57105a8c6764a7dbad3f13831207c6a4840d0298194663c
5
+ SHA512:
6
+ metadata.gz: b7828dc371a46f67aacda7a74d93854603791f4afec2f6ce6ac1270003b9e34ddc5491439530fa7fbe899b58f3307b5bc275ce97c9fc01cea0f17835e07af20c
7
+ data.tar.gz: 19553a7b9208d91ee61a86a77097ede252c3e9e843c43f089e2f86ce7ba4a8a25cb0812ad397efef1279e4fa90f421d81dbe7e3b8747daaaeceec87accf07671
@@ -0,0 +1,7 @@
1
+ # IDE
2
+ .idea/
3
+ .atom/
4
+ .vscode/
5
+
6
+ # Gem builds
7
+ breadcrumbs_rails-*.gem
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,143 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ breadcrumbs_rails (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ actioncable (6.0.3.4)
10
+ actionpack (= 6.0.3.4)
11
+ nio4r (~> 2.0)
12
+ websocket-driver (>= 0.6.1)
13
+ actionmailbox (6.0.3.4)
14
+ actionpack (= 6.0.3.4)
15
+ activejob (= 6.0.3.4)
16
+ activerecord (= 6.0.3.4)
17
+ activestorage (= 6.0.3.4)
18
+ activesupport (= 6.0.3.4)
19
+ mail (>= 2.7.1)
20
+ actionmailer (6.0.3.4)
21
+ actionpack (= 6.0.3.4)
22
+ actionview (= 6.0.3.4)
23
+ activejob (= 6.0.3.4)
24
+ mail (~> 2.5, >= 2.5.4)
25
+ rails-dom-testing (~> 2.0)
26
+ actionpack (6.0.3.4)
27
+ actionview (= 6.0.3.4)
28
+ activesupport (= 6.0.3.4)
29
+ rack (~> 2.0, >= 2.0.8)
30
+ rack-test (>= 0.6.3)
31
+ rails-dom-testing (~> 2.0)
32
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
33
+ actiontext (6.0.3.4)
34
+ actionpack (= 6.0.3.4)
35
+ activerecord (= 6.0.3.4)
36
+ activestorage (= 6.0.3.4)
37
+ activesupport (= 6.0.3.4)
38
+ nokogiri (>= 1.8.5)
39
+ actionview (6.0.3.4)
40
+ activesupport (= 6.0.3.4)
41
+ builder (~> 3.1)
42
+ erubi (~> 1.4)
43
+ rails-dom-testing (~> 2.0)
44
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
45
+ activejob (6.0.3.4)
46
+ activesupport (= 6.0.3.4)
47
+ globalid (>= 0.3.6)
48
+ activemodel (6.0.3.4)
49
+ activesupport (= 6.0.3.4)
50
+ activerecord (6.0.3.4)
51
+ activemodel (= 6.0.3.4)
52
+ activesupport (= 6.0.3.4)
53
+ activestorage (6.0.3.4)
54
+ actionpack (= 6.0.3.4)
55
+ activejob (= 6.0.3.4)
56
+ activerecord (= 6.0.3.4)
57
+ marcel (~> 0.3.1)
58
+ activesupport (6.0.3.4)
59
+ concurrent-ruby (~> 1.0, >= 1.0.2)
60
+ i18n (>= 0.7, < 2)
61
+ minitest (~> 5.1)
62
+ tzinfo (~> 1.1)
63
+ zeitwerk (~> 2.2, >= 2.2.2)
64
+ builder (3.2.4)
65
+ concurrent-ruby (1.1.7)
66
+ crass (1.0.6)
67
+ erubi (1.10.0)
68
+ globalid (0.4.2)
69
+ activesupport (>= 4.2.0)
70
+ i18n (1.8.5)
71
+ concurrent-ruby (~> 1.0)
72
+ loofah (2.8.0)
73
+ crass (~> 1.0.2)
74
+ nokogiri (>= 1.5.9)
75
+ mail (2.7.1)
76
+ mini_mime (>= 0.1.1)
77
+ marcel (0.3.3)
78
+ mimemagic (~> 0.3.2)
79
+ method_source (1.0.0)
80
+ mimemagic (0.3.5)
81
+ mini_mime (1.0.2)
82
+ mini_portile2 (2.4.0)
83
+ minitest (5.14.2)
84
+ nio4r (2.5.4)
85
+ nokogiri (1.10.10)
86
+ mini_portile2 (~> 2.4.0)
87
+ rack (2.2.3)
88
+ rack-test (1.1.0)
89
+ rack (>= 1.0, < 3)
90
+ rails (6.0.3.4)
91
+ actioncable (= 6.0.3.4)
92
+ actionmailbox (= 6.0.3.4)
93
+ actionmailer (= 6.0.3.4)
94
+ actionpack (= 6.0.3.4)
95
+ actiontext (= 6.0.3.4)
96
+ actionview (= 6.0.3.4)
97
+ activejob (= 6.0.3.4)
98
+ activemodel (= 6.0.3.4)
99
+ activerecord (= 6.0.3.4)
100
+ activestorage (= 6.0.3.4)
101
+ activesupport (= 6.0.3.4)
102
+ bundler (>= 1.3.0)
103
+ railties (= 6.0.3.4)
104
+ sprockets-rails (>= 2.0.0)
105
+ rails-dom-testing (2.0.3)
106
+ activesupport (>= 4.2.0)
107
+ nokogiri (>= 1.6)
108
+ rails-html-sanitizer (1.3.0)
109
+ loofah (~> 2.3)
110
+ railties (6.0.3.4)
111
+ actionpack (= 6.0.3.4)
112
+ activesupport (= 6.0.3.4)
113
+ method_source
114
+ rake (>= 0.8.7)
115
+ thor (>= 0.20.3, < 2.0)
116
+ rake (13.0.1)
117
+ sprockets (4.0.2)
118
+ concurrent-ruby (~> 1.0)
119
+ rack (> 1, < 3)
120
+ sprockets-rails (3.2.2)
121
+ actionpack (>= 4.0)
122
+ activesupport (>= 4.0)
123
+ sprockets (>= 3.0.0)
124
+ thor (1.0.1)
125
+ thread_safe (0.3.6)
126
+ tzinfo (1.2.8)
127
+ thread_safe (~> 0.1)
128
+ websocket-driver (0.7.3)
129
+ websocket-extensions (>= 0.1.0)
130
+ websocket-extensions (0.1.5)
131
+ zeitwerk (2.4.1)
132
+
133
+ PLATFORMS
134
+ ruby
135
+
136
+ DEPENDENCIES
137
+ breadcrumbs_rails!
138
+ bundler
139
+ rails (>= 3.0)
140
+ rake
141
+
142
+ BUNDLED WITH
143
+ 2.1.2
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="112" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="a"><rect width="112" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#a)"><path fill="#555" d="M0 0h47v20H0z"/><path fill="#4c1" d="M47 0h65v20H47z"/><path fill="url(#b)" d="M0 0h112v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110"> <text x="245" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="370">license</text><text x="245" y="140" transform="scale(.1)" textLength="370">license</text><text x="785" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="550">CC BY 4.0</text><text x="785" y="140" transform="scale(.1)" textLength="550">CC BY 4.0</text></g> </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="84" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="a"><rect width="84" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#a)"><path fill="#555" d="M0 0h37v20H0z"/><path fill="#007ec6" d="M37 0h47v20H37z"/><path fill="url(#b)" d="M0 0h84v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110"> <text x="195" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="270">Ruby</text><text x="195" y="140" transform="scale(.1)" textLength="270">Ruby</text><text x="595" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="370">1.9.3+</text><text x="595" y="140" transform="scale(.1)" textLength="370">1.9.3+</text></g> </svg>
@@ -0,0 +1,26 @@
1
+ $:.push File.expand_path('../lib', __FILE__)
2
+ require 'breadcrumbs_rails/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'breadcrumbs_rails'
6
+ s.version = BreadcrumbsRails::VERSION.dup
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = 'EdCordata'
9
+ s.description = 'Rails breadcrumbs gem'
10
+ s.summary = 'Rails breadcrumbs gem'
11
+ s.licenses = ['CC BY 4.0']
12
+ s.require_paths = %w(lib)
13
+ s.files = `git ls-files`.split("\n")
14
+ s.homepage = 'https://github.com/EdCordata-Ruby-Gems/breadcrumbs_rails'
15
+ s.require_paths = ['lib']
16
+ s.required_ruby_version = '>= 1.9.3'
17
+ s.rubygems_version = '1.6.2'
18
+ s.metadata = {
19
+ 'documentation_uri' => 'https://github.com/EdCordata-Ruby-Gems/breadcrumbs_rails/blob/master/readme.md',
20
+ 'source_code_uri' => 'https://github.com/EdCordata-Ruby-Gems/breadcrumbs_rails',
21
+ 'bug_tracker_uri' => 'https://github.com/EdCordata-Ruby-Gems/breadcrumbs_rails/issues'
22
+ }
23
+ s.add_development_dependency 'rake'
24
+ s.add_development_dependency 'bundler'
25
+ s.add_development_dependency 'rails', '>= 3.0'
26
+ end
@@ -0,0 +1,8 @@
1
+ require 'breadcrumbs_rails/version'
2
+ require 'breadcrumbs_rails/action_controller'
3
+ require 'breadcrumbs_rails/railtie'
4
+
5
+ module BreadcrumbsRails
6
+ NAME = 'Breadcrumbs Rails'
7
+ GEM = 'breadcrumbs_rails'
8
+ end
@@ -0,0 +1,158 @@
1
+ module BreadcrumbsRails
2
+ module ActionController
3
+ extend ActiveSupport::Concern
4
+
5
+
6
+ # -----------------------------------------------------------
7
+ included do |base|
8
+ extend ClassMethods
9
+ helper HelperMethods
10
+
11
+ helper_method :add_breadcrumb, :breadcrumbs_gem
12
+
13
+ unless base.respond_to?(:before_action)
14
+ base.alias_method :before_action, :before_filter
15
+ end
16
+ end
17
+ # -----------------------------------------------------------
18
+
19
+
20
+ protected
21
+
22
+
23
+ # -----------------------------------------------------------
24
+ def add_breadcrumb(name, options = {})
25
+ url_helpers = Rails.application.routes.url_helpers
26
+
27
+ if options[:path]
28
+ options[:path] = if url_helpers.methods.include?(options[:path])
29
+ url_helpers.send(options[:path])
30
+ else
31
+ options[:path]
32
+ end
33
+ end
34
+
35
+ self.breadcrumbs_gem[:breadcrumbs] << {
36
+ name: name,
37
+ path: options[:path].to_s,
38
+ params: options[:params] || {},
39
+ title: options[:title],
40
+ html_safe: options[:html_safe] == true
41
+ }
42
+
43
+ self.breadcrumbs_gem[:localize] = options[:localize] == true unless options[:localize].nil?
44
+ self.breadcrumbs_gem[:html_safe] = options[:html_safe] == true unless options[:html_safe].nil?
45
+ end
46
+
47
+ def breadcrumbs_gem
48
+ @breadcrumbs_gem ||= { breadcrumbs: [], scope: nil, localize: false }
49
+ end
50
+ # -----------------------------------------------------------
51
+
52
+
53
+ # Class Methods
54
+ # -----------------------------------------------------------
55
+ module ClassMethods
56
+
57
+ def add_breadcrumb(name, options = {})
58
+ before_action(options) do |controller|
59
+ controller.send(:add_breadcrumb, name, options)
60
+ end
61
+ end
62
+
63
+ end
64
+ # -----------------------------------------------------------
65
+
66
+
67
+ # Helper Methods
68
+ # -----------------------------------------------------------
69
+ module HelperMethods
70
+
71
+
72
+ def render_breadcrumbs_title(default = nil)
73
+ return default if breadcrumbs_gem[:breadcrumbs].last[:title].nil?
74
+ return '' if breadcrumbs_gem[:breadcrumbs].last[:title].to_s.blank?
75
+
76
+ if breadcrumbs_gem[:localize]
77
+ I18n.t(breadcrumbs_gem[:breadcrumbs].last[:title])
78
+ else
79
+ breadcrumbs_gem[:breadcrumbs].last[:title]
80
+ end
81
+ end
82
+
83
+
84
+ def render_breadcrumbs(options = {}, &block)
85
+ format = (options[:format] || :html).to_sym
86
+
87
+ if block_given?
88
+ yield(breadcrumbs_gem)
89
+ else
90
+
91
+ case format
92
+
93
+ when :html
94
+ content_tag(:ul) do
95
+ breadcrumbs_gem[:breadcrumbs].map do |breadcrumb|
96
+ concat content_tag(:li, breadcrumbs_name_or_link(breadcrumbs_gem, breadcrumb))
97
+ end
98
+ end
99
+
100
+ when :bootstrap
101
+ content_tag(:ul, class: 'pagination') do
102
+ breadcrumbs_gem[:breadcrumbs].map do |breadcrumb|
103
+ concat content_tag(:li, breadcrumbs_name_or_link(breadcrumbs_gem, breadcrumb))
104
+ end
105
+ end
106
+
107
+ when :inspinia
108
+ html = ''
109
+ html << '<div class="row wrapper border-bottom white-bg page-heading">'
110
+ html << ' <div class="col-lg-9">'
111
+ html << (render_breadcrumbs_title ? "<h2>#{render_breadcrumbs_title}</h2>" : '<br/>')
112
+ html << ' <ol class="breadcrumb">'
113
+
114
+ breadcrumbs_gem[:breadcrumbs].each_with_index do |breadcrumb, index|
115
+ if (index + 1) == breadcrumbs_gem[:breadcrumbs].length
116
+ html << "<li class='active'><strong>#{breadcrumbs_name_or_link(breadcrumbs_gem, breadcrumb)}</strong></li>"
117
+ else
118
+ html << "<li>#{breadcrumbs_name_or_link(breadcrumbs_gem, breadcrumb)}</li>"
119
+ end
120
+ end
121
+
122
+ html << ' </ol>'
123
+ html << ' </div>'
124
+ html << '</div>'
125
+ html.html_safe
126
+
127
+ else
128
+ raise "Breadcrumbs-rails: unknown format '#{format.to_s}'"
129
+ end
130
+
131
+ end
132
+ end
133
+
134
+
135
+ private
136
+
137
+
138
+ def breadcrumbs_name_or_link(breadcrumbs_gem, breadcrumb)
139
+ return '' if breadcrumb[:name].to_s.blank?
140
+
141
+ name = (breadcrumbs_gem[:localize] ? I18n.t(breadcrumb[:name]) : breadcrumb[:name])
142
+ name = CGI::escapeHTML(name) unless breadcrumb[:html_safe] # escape name as we call html_safe
143
+
144
+ if breadcrumb[:path].to_s.blank?
145
+ name.html_safe
146
+ else
147
+ url = Rails.application.routes.url_helpers.send(breadcrumb[:path].to_s, breadcrumb[:params])
148
+ link_to(name.html_safe, url)
149
+ end
150
+ end
151
+
152
+
153
+ end
154
+ # -----------------------------------------------------------
155
+
156
+
157
+ end
158
+ end
@@ -0,0 +1,11 @@
1
+ module BreadcrumbsRails
2
+ class Railtie < Rails::Railtie
3
+
4
+ ActiveSupport.on_load(:action_controller) do
5
+ ::ActionController::Base.send(:include, BreadcrumbsRails::ActionController)
6
+ views_path = "#{File.dirname(__FILE__)}/../generators/breadcrumbs/templates/app/views/breadcrumbs"
7
+ ::ActionController::Base.prepend_view_path(views_path)
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module BreadcrumbsRails
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,82 @@
1
+ # Breadcrumbs Rails
2
+
3
+ ![Ruby Version](badges/ruby.svg)
4
+ [![License](badges/license.svg)](https://creativecommons.org/licenses/by/4.0/)
5
+
6
+ Breadcrumbs rails is easy way to create breadcrumbs from controllers and render them in view. This gem also
7
+ includes functionality to easily change title.
8
+
9
+ ### Installation
10
+
11
+ As usual, add to Gemfile:
12
+ ```ruby
13
+ gem 'breadcrumbs_rails'
14
+ ```
15
+
16
+ and run:
17
+ ```bash
18
+ $ bundle install
19
+ ```
20
+
21
+
22
+ ### Introduction
23
+
24
+ Syntax is `add_breadcrumb(name, options)`
25
+ Available options:
26
+ * `html_safe` - (type: boolean, default: false) - specifies if title is html safe and shouldn't be escaped
27
+ * `:path` - (type: string, default: nil) - link path as string. It must be a string, not symbol
28
+ * `:params` - (type: hash, default: {}) - params to pass to `:path`
29
+ * `:title` - (type: string, default: nil) - title for `:render_breadcrumbs_title` method
30
+
31
+
32
+
33
+ ### Usage
34
+
35
+ In controllers
36
+ ```ruby
37
+ class ApplicationController < ActionController::Base
38
+ add_breadcrumb 'Home', path: 'root_path', params: { locale: 'en' }
39
+ end
40
+
41
+ class UsersController < ApplicationController
42
+ add_breadcrumb 'Users', path: 'users_path', params: { locale: 'en' }, title: 'Users'
43
+
44
+ def edit
45
+ add_breadcrumb('User')
46
+ end
47
+ end
48
+ ```
49
+
50
+ If you want to use translations, do it like so:
51
+ ```ruby
52
+ class ApplicationController < ActionController::Base
53
+ add_breadcrumb 'links.home', path: 'root_path', params: { locale: 'en' }, title: '', localize: true # Only name is required
54
+ end
55
+
56
+ class UsersController < ApplicationController
57
+ add_breadcrumb 'links.users', path: 'users_path', params: { locale: 'en' }, title: 'Users'
58
+
59
+ def edit
60
+ add_breadcrumb('links.user')
61
+ end
62
+ end
63
+ ```
64
+
65
+ ### Rendering breadcrumbs
66
+ Default format is `:html`. Available: `:html`, `:bootstrap`, `:inspinia`.
67
+ ```haml
68
+ = render_breadcrumbs(format: :html)
69
+ ```
70
+
71
+ Or by using block:
72
+ ```haml
73
+ - render_breadcrumbs do |renderer|
74
+ - renderer[:breadcrumbs].each do |breadcrumb|
75
+ %li= link_to_if breadcrumb[:path], breadcrumb[:name], breadcrumb[:path]
76
+ ```
77
+
78
+ ### To use `title` functionality:
79
+ ```haml
80
+ %html
81
+ %title= render_breadcrumbs_title
82
+ ```
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: breadcrumbs_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - EdCordata
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-11-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ description: Rails breadcrumbs gem
56
+ email:
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - ".gitignore"
62
+ - Gemfile
63
+ - Gemfile.lock
64
+ - badges/license.svg
65
+ - badges/ruby.svg
66
+ - breadcrumbs_rails.gemspec
67
+ - lib/breadcrumbs_rails.rb
68
+ - lib/breadcrumbs_rails/action_controller.rb
69
+ - lib/breadcrumbs_rails/railtie.rb
70
+ - lib/breadcrumbs_rails/version.rb
71
+ - readme.md
72
+ homepage: https://github.com/EdCordata-Ruby-Gems/breadcrumbs_rails
73
+ licenses:
74
+ - CC BY 4.0
75
+ metadata:
76
+ documentation_uri: https://github.com/EdCordata-Ruby-Gems/breadcrumbs_rails/blob/master/readme.md
77
+ source_code_uri: https://github.com/EdCordata-Ruby-Gems/breadcrumbs_rails
78
+ bug_tracker_uri: https://github.com/EdCordata-Ruby-Gems/breadcrumbs_rails/issues
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: 1.9.3
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubygems_version: 3.1.2
95
+ signing_key:
96
+ specification_version: 4
97
+ summary: Rails breadcrumbs gem
98
+ test_files: []