loaf 0.6.2 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +67 -12
  3. data/LICENSE.txt +1 -1
  4. data/README.md +82 -39
  5. data/lib/loaf.rb +1 -0
  6. data/lib/loaf/configuration.rb +0 -12
  7. data/lib/loaf/controller_extensions.rb +9 -1
  8. data/lib/loaf/errors.rb +1 -1
  9. data/lib/loaf/translation.rb +12 -4
  10. data/lib/loaf/version.rb +3 -1
  11. data/lib/loaf/view_extensions.rb +16 -8
  12. metadata +19 -161
  13. data/.document +0 -5
  14. data/.gitignore +0 -23
  15. data/.rspec +0 -2
  16. data/.travis.yml +0 -48
  17. data/Appraisals +0 -36
  18. data/Gemfile +0 -19
  19. data/Gemfile.lock +0 -185
  20. data/Rakefile +0 -10
  21. data/assets/loaf_logo.png +0 -0
  22. data/bin/appraisal +0 -16
  23. data/bin/rake +0 -16
  24. data/bin/setup +0 -7
  25. data/gemfiles/rails3.2.gemfile +0 -24
  26. data/gemfiles/rails4.0.gemfile +0 -24
  27. data/gemfiles/rails4.1.gemfile +0 -23
  28. data/gemfiles/rails4.2.gemfile +0 -23
  29. data/gemfiles/rails5.0.gemfile +0 -22
  30. data/gemfiles/rails5.1.gemfile +0 -22
  31. data/lib/loaf/crumb_formatter.rb +0 -24
  32. data/loaf.gemspec +0 -28
  33. data/spec/integration/breadcrumb_trail_spec.rb +0 -60
  34. data/spec/integration/configuration_spec.rb +0 -12
  35. data/spec/rails_app/Rakefile +0 -8
  36. data/spec/rails_app/app/controllers/application_controller.rb +0 -5
  37. data/spec/rails_app/app/controllers/comments_controller.rb +0 -17
  38. data/spec/rails_app/app/controllers/home_controller.rb +0 -4
  39. data/spec/rails_app/app/controllers/posts_controller.rb +0 -20
  40. data/spec/rails_app/app/views/comments/index.html.erb +0 -1
  41. data/spec/rails_app/app/views/home/index.html.erb +0 -1
  42. data/spec/rails_app/app/views/layouts/_breadcrumbs.html.erb +0 -12
  43. data/spec/rails_app/app/views/layouts/application.html.erb +0 -14
  44. data/spec/rails_app/app/views/posts/index.html.erb +0 -1
  45. data/spec/rails_app/app/views/posts/new.html.erb +0 -4
  46. data/spec/rails_app/app/views/posts/show.html.erb +0 -1
  47. data/spec/rails_app/config.ru +0 -4
  48. data/spec/rails_app/config/application.rb +0 -48
  49. data/spec/rails_app/config/boot.rb +0 -10
  50. data/spec/rails_app/config/database.yml +0 -25
  51. data/spec/rails_app/config/environment.rb +0 -5
  52. data/spec/rails_app/config/environments/development.rb +0 -32
  53. data/spec/rails_app/config/environments/production.rb +0 -62
  54. data/spec/rails_app/config/environments/test.rb +0 -41
  55. data/spec/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  56. data/spec/rails_app/config/initializers/inflections.rb +0 -10
  57. data/spec/rails_app/config/initializers/mime_types.rb +0 -5
  58. data/spec/rails_app/config/initializers/secret_token.rb +0 -7
  59. data/spec/rails_app/config/initializers/session_store.rb +0 -8
  60. data/spec/rails_app/config/initializers/wrap_parameters.rb +0 -14
  61. data/spec/rails_app/config/locales/en.yml +0 -5
  62. data/spec/rails_app/config/locales/loaf.en.yml +0 -6
  63. data/spec/rails_app/config/routes.rb +0 -7
  64. data/spec/rails_app/config/secrets.yml +0 -22
  65. data/spec/rails_app/public/404.html +0 -26
  66. data/spec/rails_app/public/422.html +0 -26
  67. data/spec/rails_app/public/500.html +0 -26
  68. data/spec/rails_app/public/favicon.ico +0 -0
  69. data/spec/rails_app/public/robots.txt +0 -5
  70. data/spec/spec_helper.rb +0 -52
  71. data/spec/support/capybara.rb +0 -8
  72. data/spec/support/dummy_controller.rb +0 -9
  73. data/spec/support/dummy_view.rb +0 -47
  74. data/spec/support/load_routes.rb +0 -4
  75. data/spec/unit/configuration_spec.rb +0 -39
  76. data/spec/unit/controller_extensions_spec.rb +0 -54
  77. data/spec/unit/crumb_formatter_spec.rb +0 -36
  78. data/spec/unit/crumb_spec.rb +0 -15
  79. data/spec/unit/generators/install_generator_spec.rb +0 -17
  80. data/spec/unit/options_validator_spec.rb +0 -15
  81. data/spec/unit/translation_spec.rb +0 -22
  82. data/spec/unit/view_extensions/breadcrumb_spec.rb +0 -22
  83. data/spec/unit/view_extensions/breadcrumb_trail_spec.rb +0 -232
  84. data/spec/unit/view_extensions/has_breadcrumbs_spec.rb +0 -10
  85. data/tasks/console.rake +0 -10
  86. data/tasks/coverage.rake +0 -11
  87. data/tasks/spec.rake +0 -29
@@ -1,7 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # Your secret key for verifying the integrity of signed cookies.
4
- # If you change this key, all old signed cookies will become invalid!
5
- # Make sure the secret is at least 30 characters and all random,
6
- # no regular words or you'll be exposed to dictionary attacks.
7
- RailsApp::Application.config.secret_token = '2bc2743124978fc50d054e09cc457b9a6de3cb8c1b7000d78a9af674e93245bf292f2f57f56ad782dc6f7da1695206251d7c9541ec3870467275e4c65447db48'
@@ -1,8 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- RailsApp::Application.config.session_store :cookie_store, key: '_rails_app_session'
4
-
5
- # Use the database for sessions instead of the cookie-based default,
6
- # which shouldn't be used to store highly confidential information
7
- # (create the session table with "rails generate session_migration")
8
- # RailsApp::Application.config.session_store :active_record_store
@@ -1,14 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
- #
3
- # This file contains settings for ActionController::ParamsWrapper which
4
- # is enabled by default.
5
-
6
- # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7
- ActiveSupport.on_load(:action_controller) do
8
- wrap_parameters format: [:json]
9
- end
10
-
11
- # Disable root element in JSON by default.
12
- ActiveSupport.on_load(:active_record) do
13
- self.include_root_in_json = false
14
- end
@@ -1,5 +0,0 @@
1
- # Sample localization file for English. Add more files in this directory for other locales.
2
- # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
-
4
- en:
5
- hello: "Hello world"
@@ -1,6 +0,0 @@
1
- en:
2
- loaf:
3
- errors:
4
- invalid_options: "Invalid option :%{invalid}. Valid options are: %{valid}, make sure these are the ones you are using."
5
- breadcrumbs:
6
- all_posts: 'All Posts'
@@ -1,7 +0,0 @@
1
- RailsApp::Application.routes.draw do
2
- root :to => 'home#index'
3
-
4
- resources :posts do
5
- resources :comments
6
- end
7
- end
@@ -1,22 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # Your secret key is used for verifying the integrity of signed cookies.
4
- # If you change this key, all old signed cookies will become invalid!
5
-
6
- # Make sure the secret is at least 30 characters and all random,
7
- # no regular words or you'll be exposed to dictionary attacks.
8
- # You can use `rake secret` to generate a secure secret key.
9
-
10
- # Make sure the secrets in this file are kept private
11
- # if you're sharing your code publicly.
12
-
13
- development:
14
- secret_key_base: c392df63ec28b42b36b92a5b9e8603fa62d7807024d07801ab162ec7a2a165a87d27a4a8535ce09cd2bf4a82afe45e3080fb8cc56613d608e5b18335594782b3
15
-
16
- test:
17
- secret_key_base: 4b1fba0d12c53b8b21880fda47b603b3dcca117ccf41fcc70091351b88ede5d4c5c91371f407cd056efd66fa5f306c23add65a89d4304e06a4243289ee97be1d
18
-
19
- # Do not keep production secrets in the repository,
20
- # instead read values from the environment.
21
- production:
22
- secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
@@ -1,26 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>The page you were looking for doesn't exist (404)</title>
5
- <style type="text/css">
6
- body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
- div.dialog {
8
- width: 25em;
9
- padding: 0 4em;
10
- margin: 4em auto 0 auto;
11
- border: 1px solid #ccc;
12
- border-right-color: #999;
13
- border-bottom-color: #999;
14
- }
15
- h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <!-- This file lives in public/404.html -->
21
- <div class="dialog">
22
- <h1>The page you were looking for doesn't exist.</h1>
23
- <p>You may have mistyped the address or the page may have moved.</p>
24
- </div>
25
- </body>
26
- </html>
@@ -1,26 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>The change you wanted was rejected (422)</title>
5
- <style type="text/css">
6
- body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
- div.dialog {
8
- width: 25em;
9
- padding: 0 4em;
10
- margin: 4em auto 0 auto;
11
- border: 1px solid #ccc;
12
- border-right-color: #999;
13
- border-bottom-color: #999;
14
- }
15
- h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <!-- This file lives in public/422.html -->
21
- <div class="dialog">
22
- <h1>The change you wanted was rejected.</h1>
23
- <p>Maybe you tried to change something you didn't have access to.</p>
24
- </div>
25
- </body>
26
- </html>
@@ -1,26 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>We're sorry, but something went wrong (500)</title>
5
- <style type="text/css">
6
- body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
- div.dialog {
8
- width: 25em;
9
- padding: 0 4em;
10
- margin: 4em auto 0 auto;
11
- border: 1px solid #ccc;
12
- border-right-color: #999;
13
- border-bottom-color: #999;
14
- }
15
- h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <!-- This file lives in public/500.html -->
21
- <div class="dialog">
22
- <h1>We're sorry, but something went wrong.</h1>
23
- <p>We've been notified about this issue and we'll take a look at it shortly.</p>
24
- </div>
25
- </body>
26
- </html>
File without changes
@@ -1,5 +0,0 @@
1
- # See http://www.robotstxt.org/wc/norobots.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: /
@@ -1,52 +0,0 @@
1
- # encoding: utf-8
2
-
3
- if (ENV['COVERAGE'] || ENV['TRAVIS']) && RUBY_VERSION < '2.4.0'
4
- require 'simplecov'
5
- require 'coveralls'
6
-
7
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
8
- SimpleCov::Formatter::HTMLFormatter,
9
- Coveralls::SimpleCov::Formatter
10
- ])
11
-
12
- SimpleCov.start do
13
- command_name 'spec'
14
- add_filter 'spec'
15
- end
16
- end
17
-
18
- # Configure Rails Environment
19
- ENV["RAILS_ENV"] = "test"
20
-
21
- require 'rails_app/config/environment.rb'
22
- require 'rspec/rails'
23
- require 'loaf'
24
-
25
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
26
-
27
- RSpec.configure do |config|
28
- config.expect_with :rspec do |expectations|
29
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
30
- end
31
-
32
- config.mock_with :rspec do |mocks|
33
- mocks.verify_partial_doubles = true
34
- end
35
-
36
- # Limits the available syntax to the non-monkey patched syntax that is recommended.
37
- config.disable_monkey_patching!
38
-
39
- # This setting enables warnings. It's recommended, but in some cases may
40
- # be too noisy due to issues in dependencies.
41
- config.warnings = true
42
-
43
- if config.files_to_run.one?
44
- config.default_formatter = 'doc'
45
- end
46
-
47
- config.profile_examples = 2
48
-
49
- config.order = :random
50
-
51
- Kernel.srand config.seed
52
- end
@@ -1,8 +0,0 @@
1
- require 'capybara/rails'
2
- require 'capybara/dsl'
3
-
4
- RSpec.configure do |c|
5
- c.include Capybara::DSL, :file_path => /\bspec\/integration\//
6
- end
7
- Capybara.default_driver = :rack_test
8
- Capybara.default_selector = :css
@@ -1,9 +0,0 @@
1
- class DummyController < ActionController::Base
2
- def self.before_filter(options, &block)
3
- yield self.new
4
- end
5
- class << self
6
- alias before_action before_filter
7
- end
8
- include Loaf::ControllerExtensions
9
- end
@@ -1,47 +0,0 @@
1
- require 'action_view'
2
-
3
- class DummyView < ActionView::Base
4
- module FakeRequest
5
- class Request
6
- attr_accessor :path, :fullpath, :protocol, :host_with_port
7
- def get?
8
- true
9
- end
10
- end
11
- def request
12
- @request ||= Request.new
13
- end
14
- def params
15
- @params ||= {}
16
- end
17
- end
18
-
19
- include FakeRequest
20
- include ActionView::Helpers::UrlHelper
21
- include Loaf::ViewExtensions
22
-
23
- attr_reader :_breadcrumbs
24
-
25
- routes = ActionDispatch::Routing::RouteSet.new
26
- routes.draw do
27
- get "/" => "foo#bar", :as => :home
28
- get "/posts" => "foo#posts"
29
- get "/posts/:title" => "foo#posts"
30
- get "/post/:id" => "foo#post", :as => :post
31
- get "/post/:title" => "foo#title"
32
- get "/post/:id/comments" => "foo#comments"
33
-
34
- namespace :blog do
35
- get "/" => "foo#bar"
36
- end
37
- end
38
-
39
- include routes.url_helpers
40
-
41
- def set_path(path)
42
- request.path = path
43
- request.fullpath = path
44
- request.protocol = 'http://'
45
- request.host_with_port = 'www.example.com'
46
- end
47
- end
@@ -1,4 +0,0 @@
1
- RSpec.configure do |c|
2
- c.include Rails.application.routes.url_helpers,
3
- :file_path => /\bspec\/integration\//
4
- end
@@ -1,39 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Loaf::Configuration do
4
- it "allows to set and read attributes" do
5
- config = Loaf::Configuration.new
6
-
7
- config.crumb_length = 4
8
- expect(config.crumb_length).to eq(4)
9
-
10
- config.match = :exact
11
- expect(config.match).to eq(:exact)
12
- end
13
-
14
- it "accepts attributes at initialization" do
15
- options = { crumb_length: 12, match: :exact }
16
- config = Loaf::Configuration.new(options)
17
-
18
- expect(config.crumb_length).to eq(12)
19
- expect(config.match).to eq(:exact)
20
- end
21
-
22
- it "exports configuration as hash" do
23
- config = Loaf::Configuration.new
24
- expect(config.to_hash).to eq({
25
- capitalize: false,
26
- crumb_length: 30,
27
- locales_path: '/',
28
- match: :inclusive
29
- })
30
- end
31
-
32
- it "yields configuration" do
33
- conf = double(:conf)
34
- allow(Loaf).to receive(:configuration).and_return(conf)
35
- expect { |b|
36
- Loaf.configure(&b)
37
- }.to yield_with_args(conf)
38
- end
39
- end
@@ -1,54 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Loaf::ControllerExtensions do
4
-
5
- context 'when classes extend controller_extensions' do
6
- it { expect(DummyController).to respond_to(:add_breadcrumb) }
7
- it { expect(DummyController).to respond_to(:breadcrumb) }
8
- it { expect(DummyController.new).to respond_to(:add_breadcrumb) }
9
- it { expect(DummyController.new).to respond_to(:breadcrumb) }
10
- it { expect(DummyController.new).to respond_to(:clear_breadcrumbs) }
11
- end
12
-
13
- context 'class methods' do
14
- it 'invokes before_action' do
15
- allow(DummyController).to receive(:before_action)
16
- allow(DummyController).to receive(:respond_to?).and_return(true)
17
- DummyController.breadcrumb('name', 'url_path')
18
- expect(DummyController).to have_received(:before_action)
19
- end
20
-
21
- it 'delegates breadcrumb registration to controller instance' do
22
- name = 'List objects'
23
- url = :object_path
24
- options = {force: true}
25
- instance = double(:controller_instance).as_null_object
26
-
27
- allow(DummyController).to receive(:new).and_return(instance)
28
- DummyController.breadcrumb(name, url, options)
29
- expect(instance).to have_received(:breadcrumb).with(name, url, options)
30
- end
31
- end
32
-
33
- context 'instance methods' do
34
- it 'instantiates breadcrumbs container' do
35
- name = 'List objects'
36
- url = :object_path
37
- instance = DummyController.new
38
-
39
- allow(Loaf::Crumb).to receive(:new)
40
- instance.breadcrumb(name, url)
41
- expect(Loaf::Crumb).to have_received(:new).with(name, url, {})
42
- end
43
-
44
- it 'adds breadcrumb to collection' do
45
- name = 'List objects'
46
- url = :object_path
47
- instance = DummyController.new
48
-
49
- expect {
50
- instance.breadcrumb(name, url)
51
- }.to change { instance._breadcrumbs.size }.by(1)
52
- end
53
- end
54
- end
@@ -1,36 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe Loaf::CrumbFormatter, '.format_name' do
4
- let(:formatter) {
5
- Class.new do
6
- extend Loaf::CrumbFormatter
7
-
8
- def self.truncate(name, options)
9
- name
10
- end
11
- end
12
- }
13
-
14
- it 'returns name error if breadcrumb name is nil' do
15
- expect(formatter.format_name('')).to eql('')
16
- end
17
-
18
- it "doesn't capitalize by default" do
19
- name = 'some random name'
20
- formatted = formatter.format_name(name)
21
- expect(formatted).to eql(name)
22
- end
23
-
24
- it 'capitalizes crumb name with capitalize option' do
25
- name = 'some random name'
26
- formatted = formatter.format_name(name, capitalize: true)
27
- expect(formatted).to eql('Some random name')
28
- end
29
-
30
- it 'shortens crumb to provided length' do
31
- name = 'very long name that is more that 30 characters long'
32
- allow(formatter).to receive(:truncate).with(name, length: 30).
33
- and_return(name[0..30])
34
- expect(formatter.format_name(name, crumb_length: 30)).to eql(name[0..30])
35
- end
36
- end
@@ -1,15 +0,0 @@
1
- RSpec.describe Loaf::Crumb do
2
- it "fails when name is nil" do
3
- expect {
4
- Loaf::Crumb.new(nil, 'path')
5
- }.to raise_error(ArgumentError,
6
- /breadcrumb first argument, `name`, cannot be nil/)
7
- end
8
-
9
- it "fails when url is nil" do
10
- expect {
11
- Loaf::Crumb.new('name', nil)
12
- }.to raise_error(ArgumentError,
13
- /breadcrumb second argument, `url`, cannot be nil/)
14
- end
15
- end