gretel 3.0.8 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +11 -7
  3. data/.travis.yml +12 -8
  4. data/CHANGELOG.md +33 -1
  5. data/Gemfile +2 -13
  6. data/LICENSE.txt +2 -2
  7. data/README.md +31 -62
  8. data/Rakefile +3 -7
  9. data/coverage/coverage.txt +5 -0
  10. data/gretel.gemspec +13 -11
  11. data/lib/gretel.rb +2 -29
  12. data/lib/gretel/crumb.rb +5 -2
  13. data/lib/gretel/crumbs.rb +26 -7
  14. data/lib/gretel/railtie.rb +11 -0
  15. data/lib/gretel/renderer.rb +46 -27
  16. data/lib/gretel/version.rb +2 -2
  17. data/lib/gretel/view_helpers.rb +2 -0
  18. metadata +83 -109
  19. data/gemfiles/Gemfile-rails.3.2.x +0 -17
  20. data/gemfiles/Gemfile-rails.4.0.x +0 -17
  21. data/gemfiles/Gemfile-rails.4.1.x +0 -17
  22. data/lib/gretel/deprecated.rb +0 -1
  23. data/lib/gretel/deprecated/default_style_key.rb +0 -11
  24. data/lib/gretel/deprecated/layout.rb +0 -15
  25. data/lib/gretel/deprecated/show_root_alone.rb +0 -12
  26. data/lib/gretel/deprecated/yield_links.rb +0 -20
  27. data/test/deprecated_test.rb +0 -45
  28. data/test/dummy/Rakefile +0 -7
  29. data/test/dummy/app/assets/javascripts/application.js +0 -15
  30. data/test/dummy/app/assets/stylesheets/application.css +0 -13
  31. data/test/dummy/app/controllers/application_controller.rb +0 -3
  32. data/test/dummy/app/helpers/application_helper.rb +0 -5
  33. data/test/dummy/app/mailers/.gitkeep +0 -0
  34. data/test/dummy/app/models/.gitkeep +0 -0
  35. data/test/dummy/app/models/issue.rb +0 -3
  36. data/test/dummy/app/models/project.rb +0 -3
  37. data/test/dummy/app/views/breadcrumbs/site.rb +0 -3
  38. data/test/dummy/config.ru +0 -4
  39. data/test/dummy/config/application.rb +0 -14
  40. data/test/dummy/config/boot.rb +0 -10
  41. data/test/dummy/config/breadcrumbs.rb +0 -3
  42. data/test/dummy/config/breadcrumbs/test_crumbs.rb +0 -85
  43. data/test/dummy/config/database.yml +0 -25
  44. data/test/dummy/config/environment.rb +0 -5
  45. data/test/dummy/config/environments/development.rb +0 -2
  46. data/test/dummy/config/environments/production.rb +0 -2
  47. data/test/dummy/config/environments/test.rb +0 -2
  48. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  49. data/test/dummy/config/initializers/inflections.rb +0 -15
  50. data/test/dummy/config/initializers/mime_types.rb +0 -5
  51. data/test/dummy/config/initializers/secret_token.rb +0 -7
  52. data/test/dummy/config/initializers/session_store.rb +0 -8
  53. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  54. data/test/dummy/config/locales/en.yml +0 -5
  55. data/test/dummy/config/routes.rb +0 -11
  56. data/test/dummy/db/migrate/20130122163007_create_projects.rb +0 -9
  57. data/test/dummy/db/migrate/20130122163051_create_issues.rb +0 -10
  58. data/test/dummy/db/schema.rb +0 -29
  59. data/test/dummy/lib/assets/.gitkeep +0 -0
  60. data/test/dummy/log/.gitkeep +0 -0
  61. data/test/dummy/public/404.html +0 -26
  62. data/test/dummy/public/422.html +0 -26
  63. data/test/dummy/public/500.html +0 -25
  64. data/test/dummy/public/favicon.ico +0 -0
  65. data/test/dummy/script/rails +0 -6
  66. data/test/fixtures/issues.yml +0 -4
  67. data/test/fixtures/projects.yml +0 -3
  68. data/test/gretel_test.rb +0 -24
  69. data/test/helper_methods_test.rb +0 -539
  70. data/test/test_helper.rb +0 -15
@@ -1,8 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- Dummy::Application.config.session_store :cookie_store, key: '_dummy_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
- # Dummy::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,11 +0,0 @@
1
- Dummy::Application.routes.draw do
2
- root to: "dummy#dummy"
3
-
4
- get "about" => "dummy#dummy", as: :about
5
- get "about/contact" => "dummy#dummy", as: :contact
6
- get "about/contact/form" => "dummy#dummy", as: :contact_form
7
-
8
- resources :projects do
9
- resources :issues
10
- end
11
- end
@@ -1,9 +0,0 @@
1
- class CreateProjects < ActiveRecord::Migration
2
- def change
3
- create_table :projects do |t|
4
- t.string :name
5
-
6
- t.timestamps
7
- end
8
- end
9
- end
@@ -1,10 +0,0 @@
1
- class CreateIssues < ActiveRecord::Migration
2
- def change
3
- create_table :issues do |t|
4
- t.string :title
5
- t.integer :project_id
6
-
7
- t.timestamps
8
- end
9
- end
10
- end
@@ -1,29 +0,0 @@
1
- # encoding: UTF-8
2
- # This file is auto-generated from the current state of the database. Instead
3
- # of editing this file, please use the migrations feature of Active Record to
4
- # incrementally modify your database, and then regenerate this schema definition.
5
- #
6
- # Note that this schema.rb definition is the authoritative source for your
7
- # database schema. If you need to create the application database on another
8
- # system, you should be using db:schema:load, not running all the migrations
9
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
- # you'll amass, the slower it'll run and the greater likelihood for issues).
11
- #
12
- # It's strongly recommended to check this file into your version control system.
13
-
14
- ActiveRecord::Schema.define(:version => 20130122163051) do
15
-
16
- create_table "issues", :force => true do |t|
17
- t.string "title"
18
- t.integer "project_id"
19
- t.datetime "created_at", :null => false
20
- t.datetime "updated_at", :null => false
21
- end
22
-
23
- create_table "projects", :force => true do |t|
24
- t.string "name"
25
- t.datetime "created_at", :null => false
26
- t.datetime "updated_at", :null => false
27
- end
28
-
29
- end
File without changes
File without changes
@@ -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,25 +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
- </div>
24
- </body>
25
- </html>
File without changes
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
-
4
- APP_PATH = File.expand_path('../../config/application', __FILE__)
5
- require File.expand_path('../../config/boot', __FILE__)
6
- require 'rails/commands'
@@ -1,4 +0,0 @@
1
- one:
2
- id: 1
3
- project_id: 1
4
- title: Test Issue
@@ -1,3 +0,0 @@
1
- one:
2
- id: 1
3
- name: Test Project
@@ -1,24 +0,0 @@
1
- require 'test_helper'
2
-
3
- class GretelTest < ActiveSupport::TestCase
4
- setup do
5
- Gretel.reset!
6
- end
7
-
8
- test "defaults" do
9
- assert_equal [Rails.root.join("config", "breadcrumbs.rb"),
10
- Rails.root.join("config", "breadcrumbs", "**", "*.rb"),
11
- Rails.root.join("app", "views", "breadcrumbs", "**", "*.rb")],
12
- Gretel.breadcrumb_paths[-3..-1]
13
- assert_equal ["development"], Gretel.reload_environments
14
- assert !Gretel.suppress_deprecation_warnings?
15
- end
16
-
17
- test "configuration block" do
18
- Gretel.configure do |config|
19
- config.reload_environments << "staging"
20
- end
21
-
22
- assert_equal ["development", "staging"], Gretel.reload_environments
23
- end
24
- end
@@ -1,539 +0,0 @@
1
- require 'test_helper'
2
-
3
- class HelperMethodsTest < ActionView::TestCase
4
- include Gretel::ViewHelpers
5
-
6
- self.fixture_path = File.expand_path("../../test/fixtures", __FILE__)
7
- fixtures :all
8
-
9
- helper :application
10
-
11
- setup do
12
- Gretel.reset!
13
- end
14
-
15
- def itemscope_value
16
- ActionView::Helpers::TagHelper::BOOLEAN_ATTRIBUTES.include?("itemscope") ?
17
- "itemscope" : ""
18
- end
19
-
20
- # Breadcrumb generation
21
-
22
- test "basic breadcrumb" do
23
- breadcrumb :basic
24
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">About</span></div>},
25
- breadcrumbs.to_s
26
- end
27
-
28
- test "breadcrumb with root" do
29
- breadcrumb :with_root
30
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">About</span></div>},
31
- breadcrumbs.to_s
32
- end
33
-
34
- test "breadcrumb with parent" do
35
- breadcrumb :with_parent
36
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <a href="/about">About</a> &rsaquo; <span class="current">Contact</span></div>},
37
- breadcrumbs.to_s
38
- end
39
-
40
- test "breadcrumb with autopath" do
41
- breadcrumb :with_autopath, projects(:one)
42
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">Test Project</span></div>},
43
- breadcrumbs.to_s
44
- end
45
-
46
- test "breadcrumb with parent object" do
47
- breadcrumb :with_parent_object, issues(:one)
48
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <a href="/projects/1">Test Project</a> &rsaquo; <span class="current">Test Issue</span></div>},
49
- breadcrumbs.to_s
50
- end
51
-
52
- test "multiple links" do
53
- breadcrumb :multiple_links
54
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <a href="/about/contact">Contact</a> &rsaquo; <span class="current">Contact form</span></div>},
55
- breadcrumbs.to_s
56
- end
57
-
58
- test "multiple links with parent" do
59
- breadcrumb :multiple_links_with_parent
60
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <a href="/about">About</a> &rsaquo; <a href="/about/contact">Contact</a> &rsaquo; <span class="current">Contact form</span></div>},
61
- breadcrumbs.to_s
62
- end
63
-
64
- test "semantic breadcrumb" do
65
- breadcrumb :with_root
66
- assert_dom_equal %Q{<div class="breadcrumbs"><span itemscope="#{itemscope_value}" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/" itemprop="url"><span itemprop="title">Home</span></a></span> &rsaquo; <span itemscope="#{itemscope_value}" itemtype="http://data-vocabulary.org/Breadcrumb"><span class="current" itemprop="title">About</span></span></div>},
67
- breadcrumbs(semantic: true).to_s
68
- end
69
-
70
- test "doesn't show root alone" do
71
- breadcrumb :root
72
- assert_dom_equal "", breadcrumbs.to_s
73
- end
74
-
75
- test "displays single fragment" do
76
- breadcrumb :root
77
- assert_dom_equal %{<div class="breadcrumbs"><span class="current">Home</span></div>},
78
- breadcrumbs(display_single_fragment: true).to_s
79
- end
80
-
81
- test "displays single non-root fragment" do
82
- breadcrumb :basic
83
- assert_dom_equal %{<div class="breadcrumbs"><span class="current">About</span></div>},
84
- breadcrumbs(autoroot: false, display_single_fragment: true).to_s
85
- end
86
-
87
- test "no breadcrumb" do
88
- assert_dom_equal "", breadcrumbs.to_s
89
- end
90
-
91
- test "links current breadcrumb" do
92
- breadcrumb :with_root
93
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <a href="/about" class="current">About</a></div>},
94
- breadcrumbs(link_current: true).to_s
95
- end
96
-
97
- test "pretext" do
98
- breadcrumb :basic
99
- assert_dom_equal %{<div class="breadcrumbs"><span class="pretext">You are here:</span> <a href="/">Home</a> &rsaquo; <span class="current">About</span></div>},
100
- breadcrumbs(pretext: "You are here:").to_s
101
- end
102
-
103
- test "posttext" do
104
- breadcrumb :basic
105
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">About</span> <span class="posttext">text after breadcrumbs</span></div>},
106
- breadcrumbs(posttext: "text after breadcrumbs").to_s
107
- end
108
-
109
- test "autoroot disabled" do
110
- breadcrumb :basic
111
- assert_dom_equal "", breadcrumbs(autoroot: false).to_s
112
- end
113
-
114
- test "separator" do
115
- breadcrumb :with_root
116
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &raquo; <span class="current">About</span></div>},
117
- breadcrumbs(separator: " &raquo; ").to_s
118
- end
119
-
120
- test "element id" do
121
- breadcrumb :basic
122
- assert_dom_equal %{<div class="breadcrumbs" id="custom_id"><a href="/">Home</a> &rsaquo; <span class="current">About</span></div>},
123
- breadcrumbs(id: "custom_id").to_s
124
- end
125
-
126
- test "custom container class" do
127
- breadcrumb :basic
128
- assert_dom_equal %{<div class="custom_class"><a href="/">Home</a> &rsaquo; <span class="current">About</span></div>},
129
- breadcrumbs(class: "custom_class").to_s
130
- end
131
-
132
- test "custom current class" do
133
- breadcrumb :basic
134
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="custom_current_class">About</span></div>},
135
- breadcrumbs(current_class: "custom_current_class").to_s
136
- end
137
-
138
- test "custom pretext class" do
139
- breadcrumb :basic
140
- assert_dom_equal %{<div class="breadcrumbs"><span class="custom_pretext_class">You are here:</span> <a href="/">Home</a> &rsaquo; <span class="current">About</span></div>},
141
- breadcrumbs(pretext: "You are here:", pretext_class: "custom_pretext_class").to_s
142
- end
143
-
144
- test "custom posttext class" do
145
- breadcrumb :basic
146
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">About</span> <span class="custom_posttext_class">after breadcrumbs</span></div>},
147
- breadcrumbs(posttext: "after breadcrumbs", posttext_class: "custom_posttext_class").to_s
148
- end
149
-
150
- test "unsafe html" do
151
- breadcrumb :with_unsafe_html
152
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">Test &lt;strong&gt;bold text&lt;/strong&gt;</span></div>},
153
- breadcrumbs.to_s
154
- end
155
-
156
- test "safe html" do
157
- breadcrumb :with_safe_html
158
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">Test <strong>bold text</strong></span></div>},
159
- breadcrumbs.to_s
160
- end
161
-
162
- test "parent breadcrumb" do
163
- breadcrumb :multiple_links_with_parent
164
-
165
- parent = parent_breadcrumb
166
- assert_equal [:multiple_links_with_parent, "Contact", "/about/contact"],
167
- [parent.key, parent.text, parent.url]
168
- end
169
-
170
- test "yields parent breadcrumb" do
171
- breadcrumb :multiple_links_with_parent
172
-
173
- out = parent_breadcrumb do |parent|
174
- [parent.key, parent.text, parent.url]
175
- end
176
- assert_equal [:multiple_links_with_parent, "Contact", "/about/contact"],
177
- out
178
- end
179
-
180
- test "parent breadcrumb returns nil if not present" do
181
- breadcrumb :basic
182
-
183
- assert_nil parent_breadcrumb(autoroot: false)
184
- end
185
-
186
- test "parent breadcrumb yields only if present" do
187
- breadcrumb :basic
188
-
189
- out = parent_breadcrumb(autoroot: false) do
190
- "yielded"
191
- end
192
-
193
- assert_nil out
194
- end
195
-
196
- test "link keys" do
197
- breadcrumb :basic
198
- assert_equal [:root, :basic], breadcrumbs.keys
199
- end
200
-
201
- test "using breadcrumbs as array" do
202
- breadcrumb :basic
203
-
204
- breadcrumbs.tap do |links|
205
- assert_kind_of Array, links
206
- assert_equal 2, links.count
207
- end
208
- end
209
-
210
- test "sets current on last link in array" do
211
- breadcrumb :multiple_links_with_parent
212
- assert_equal [false, false, false, true], breadcrumbs.map(&:current?)
213
- end
214
-
215
- test "passing options to links" do
216
- breadcrumb :with_link_options
217
-
218
- breadcrumbs(autoroot: false).tap do |links|
219
- links[0].tap do |link|
220
- assert link.title?
221
- assert_equal "My Title", link.title
222
-
223
- assert link.other?
224
- assert_equal "Other Option", link.other
225
-
226
- assert !link.nonexistent?
227
- assert_nil link.nonexistent
228
- end
229
-
230
- links[1].tap do |link|
231
- assert link.some_option?
232
- assert_equal "Test", link.some_option
233
- end
234
- end
235
-
236
- assert_dom_equal %{<div class="breadcrumbs"><a href="/about">Test</a> &rsaquo; <span class="current">Other Link</span></div>},
237
- breadcrumbs(autoroot: false).to_s
238
- end
239
-
240
- test "without link" do
241
- breadcrumb :without_link
242
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; Also without link &rsaquo; <span class="current">Without link</span></div>},
243
- breadcrumbs.to_s
244
- end
245
-
246
- test "view context" do
247
- breadcrumb :using_view_helper
248
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">TestTest</span></div>},
249
- breadcrumbs.to_s
250
- end
251
-
252
- test "multiple arguments" do
253
- breadcrumb :with_multiple_arguments, "One", "Two", "Three"
254
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <a href="/about">First OneOne then TwoTwo then ThreeThree</a> &rsaquo; <span class="current">One and Two and Three</span></div>},
255
- breadcrumbs.to_s
256
- end
257
-
258
- test "from views folder" do
259
- breadcrumb :from_views
260
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">Breadcrumb From View</span></div>},
261
- breadcrumbs.to_s
262
- end
263
-
264
- test "with_breadcrumb" do
265
- breadcrumb :basic
266
-
267
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">About</span></div>},
268
- breadcrumbs.to_s
269
-
270
- with_breadcrumb(:with_parent_object, issues(:one)) do
271
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <a href="/projects/1">Test Project</a> &rsaquo; <span class="current">Test Issue</span></div>},
272
- breadcrumbs.to_s
273
- end
274
-
275
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">About</span></div>},
276
- breadcrumbs.to_s
277
- end
278
-
279
- test "calling breadcrumbs helper twice" do
280
- breadcrumb :with_parent
281
- 2.times do
282
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <a href="/about">About</a> &rsaquo; <span class="current">Contact</span></div>},
283
- breadcrumbs.to_s
284
- end
285
- end
286
-
287
- test "breadcrumb not found" do
288
- assert_raises ArgumentError do
289
- breadcrumb :nonexistent
290
- breadcrumbs
291
- end
292
- end
293
-
294
- test "current link url is set to fullpath" do
295
- self.request = OpenStruct.new(fullpath: "/testpath?a=1&b=2")
296
-
297
- breadcrumb :basic
298
- assert_equal "/testpath?a=1&b=2", breadcrumbs.last.url
299
- end
300
-
301
- test "calling the breadcrumb method with wrong arguments" do
302
- assert_nothing_raised do
303
- breadcrumb :basic, test: 1
304
- end
305
-
306
- assert_raises ArgumentError do
307
- breadcrumb
308
- end
309
-
310
- assert_raises ArgumentError do
311
- breadcrumb(pretext: "bla")
312
- end
313
- end
314
-
315
- test "inferred breadcrumb" do
316
- breadcrumb Project.first
317
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">Test Project</span></div>},
318
- breadcrumbs.to_s
319
- end
320
-
321
- test "inferred parent" do
322
- breadcrumb :with_inferred_parent
323
-
324
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <a href="/projects/1">Test Project</a> &rsaquo; <span class="current">Test</span></div>},
325
- breadcrumbs.to_s
326
- end
327
-
328
- # Styles
329
-
330
- test "default style" do
331
- breadcrumb :basic
332
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; <span class="current">About</span></div>},
333
- breadcrumbs.to_s
334
- end
335
-
336
- test "ordered list style" do
337
- breadcrumb :basic
338
- assert_dom_equal %{<ol class="breadcrumbs"><li><a href="/">Home</a></li><li class="current">About</li></ol>},
339
- breadcrumbs(style: :ol).to_s
340
- end
341
-
342
- test "unordered list style" do
343
- breadcrumb :basic
344
- assert_dom_equal %{<ul class="breadcrumbs"><li><a href="/">Home</a></li><li class="current">About</li></ul>},
345
- breadcrumbs(style: :ul).to_s
346
- end
347
-
348
- test "bootstrap style" do
349
- breadcrumb :basic
350
- assert_dom_equal %{<ol class="breadcrumb"><li><a href="/">Home</a></li><li class="active">About</li></ol>},
351
- breadcrumbs(style: :bootstrap).to_s
352
- end
353
-
354
- test "foundation5 style" do
355
- breadcrumb :basic
356
- assert_dom_equal %{<ul class="breadcrumbs"><li><a href="/">Home</a></li><li class="current">About</li></ul>},
357
- breadcrumbs(style: :foundation5).to_s
358
- end
359
-
360
- test "custom container and fragment tags" do
361
- breadcrumb :basic
362
- assert_dom_equal %{<c class="breadcrumbs"><f><a href="/">Home</a></f> &rsaquo; <f class="current">About</f></c>},
363
- breadcrumbs(container_tag: :c, fragment_tag: :f).to_s
364
- end
365
-
366
- test "custom semantic container and fragment tags" do
367
- breadcrumb :basic
368
- assert_dom_equal %Q{<c class="breadcrumbs"><f itemscope="#{itemscope_value}" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/" itemprop="url"><span itemprop="title">Home</span></a></f> &rsaquo; <f class="current" itemscope="#{itemscope_value}" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">About</span></f></c>},
369
- breadcrumbs(container_tag: :c, fragment_tag: :f, semantic: true).to_s
370
- end
371
-
372
- test "unknown style" do
373
- breadcrumb :basic
374
- assert_raises ArgumentError do
375
- breadcrumbs(style: :nonexistent)
376
- end
377
- end
378
-
379
- test "register style" do
380
- Gretel.register_style :test_style, { container_tag: :one, fragment_tag: :two }
381
-
382
- breadcrumb :basic
383
-
384
- assert_dom_equal %{<one class="breadcrumbs"><two><a href="/">Home</a></two><two class="current">About</two></one>},
385
- breadcrumbs(style: :test_style).to_s
386
- end
387
-
388
- # Configuration reload
389
-
390
- test "reload configuration when file is changed" do
391
- path = setup_loading_from_tmp_folder
392
- Gretel.reload_environments << "test"
393
-
394
- File.open(path.join("site.rb"), "w") do |f|
395
- f.write <<-EOT
396
- crumb :root do
397
- link "Home (loaded)", root_path
398
- end
399
- crumb :about do
400
- link "About (loaded)", about_path
401
- end
402
- EOT
403
- end
404
-
405
- breadcrumb :about
406
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &rsaquo; <span class="current">About (loaded)</span></div>}, breadcrumbs.to_s
407
-
408
- sleep 1 # File change interval is 1 second
409
-
410
- File.open(path.join("site.rb"), "w") do |f|
411
- f.write <<-EOT
412
- crumb :root do
413
- link "Home (reloaded)", "/test"
414
- end
415
- crumb :about do
416
- link "About (reloaded)", "/reloaded"
417
- end
418
- EOT
419
- end
420
-
421
- breadcrumb :about
422
- assert_dom_equal %{<div class="breadcrumbs"><a href="/test">Home (reloaded)</a> &rsaquo; <span class="current">About (reloaded)</span></div>}, breadcrumbs.to_s
423
- end
424
-
425
- test "reload configuration when file is added" do
426
- path = setup_loading_from_tmp_folder
427
- Gretel.reload_environments << "test"
428
-
429
- File.open(path.join("site.rb"), "w") do |f|
430
- f.write <<-EOT
431
- crumb :root do
432
- link "Home (loaded)", root_path
433
- end
434
- EOT
435
- end
436
-
437
- assert_raises ArgumentError do
438
- breadcrumb :about
439
- breadcrumbs
440
- end
441
-
442
- File.open(path.join("pages.rb"), "w") do |f|
443
- f.write <<-EOT
444
- crumb :about do
445
- link "About (loaded)", about_path
446
- end
447
- EOT
448
- end
449
-
450
- breadcrumb :about
451
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &rsaquo; <span class="current">About (loaded)</span></div>}, breadcrumbs.to_s
452
- end
453
-
454
- test "reload configuration when file is deleted" do
455
- path = setup_loading_from_tmp_folder
456
- Gretel.reload_environments << "test"
457
-
458
- File.open(path.join("site.rb"), "w") do |f|
459
- f.write <<-EOT
460
- crumb :root do
461
- link "Home (loaded)", root_path
462
- end
463
- crumb :about do
464
- link "About (loaded)", about_path
465
- end
466
- EOT
467
- end
468
-
469
- File.open(path.join("pages.rb"), "w") do |f|
470
- f.write <<-EOT
471
- crumb :contact do
472
- link "Contact (loaded)", "/contact"
473
- parent :about
474
- end
475
- EOT
476
- end
477
-
478
- breadcrumb :contact
479
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &rsaquo; <a href="/about">About (loaded)</a> &rsaquo; <span class="current">Contact (loaded)</span></div>}, breadcrumbs.to_s
480
-
481
- File.delete path.join("pages.rb")
482
-
483
- assert_raises ArgumentError do
484
- breadcrumb :contact
485
- breadcrumbs
486
- end
487
-
488
- breadcrumb :about
489
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &rsaquo; <span class="current">About (loaded)</span></div>}, breadcrumbs.to_s
490
- end
491
-
492
- test "reloads only in development environment" do
493
- path = setup_loading_from_tmp_folder
494
-
495
- assert_equal ["development"], Gretel.reload_environments
496
-
497
- File.open(path.join("site.rb"), "w") do |f|
498
- f.write <<-EOT
499
- crumb :root do
500
- link "Home (loaded)", root_path
501
- end
502
- crumb :about do
503
- link "About (loaded)", about_path
504
- end
505
- EOT
506
- end
507
-
508
- breadcrumb :about
509
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &rsaquo; <span class="current">About (loaded)</span></div>}, breadcrumbs.to_s
510
-
511
- sleep 1
512
-
513
- File.open(path.join("site.rb"), "w") do |f|
514
- f.write <<-EOT
515
- crumb :root do
516
- link "Home (reloaded)", "/test"
517
- end
518
- crumb :about do
519
- link "About (reloaded)", "/reloaded"
520
- end
521
- EOT
522
- end
523
-
524
- breadcrumb :about
525
- assert_dom_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &rsaquo; <span class="current">About (loaded)</span></div>}, breadcrumbs.to_s
526
- end
527
-
528
- private
529
-
530
- def setup_loading_from_tmp_folder
531
- path = Rails.root.join("tmp", "testcrumbs")
532
- FileUtils.rm_rf path
533
- FileUtils.mkdir_p path
534
-
535
- Gretel.breadcrumb_paths = [path.join("*.rb")]
536
-
537
- path
538
- end
539
- end