crumbs 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +31 -0
  4. data/Rakefile +32 -0
  5. data/lib/crumbs/action_controller/base.rb +120 -0
  6. data/lib/crumbs/history.rb +31 -0
  7. data/lib/crumbs/railtie.rb +12 -0
  8. data/lib/crumbs/version.rb +5 -0
  9. data/lib/crumbs.rb +8 -0
  10. data/test/dummy/README.rdoc +28 -0
  11. data/test/dummy/Rakefile +6 -0
  12. data/test/dummy/app/assets/javascripts/application.js +13 -0
  13. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  14. data/test/dummy/app/controllers/application_controller.rb +5 -0
  15. data/test/dummy/app/controllers/pages_controller.rb +33 -0
  16. data/test/dummy/app/helpers/application_helper.rb +2 -0
  17. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  18. data/test/dummy/app/views/pages/crumbs.html.erb +3 -0
  19. data/test/dummy/bin/bundle +3 -0
  20. data/test/dummy/bin/rails +4 -0
  21. data/test/dummy/bin/rake +4 -0
  22. data/test/dummy/config/application.rb +23 -0
  23. data/test/dummy/config/boot.rb +5 -0
  24. data/test/dummy/config/database.yml +25 -0
  25. data/test/dummy/config/environment.rb +5 -0
  26. data/test/dummy/config/environments/development.rb +29 -0
  27. data/test/dummy/config/environments/production.rb +80 -0
  28. data/test/dummy/config/environments/test.rb +36 -0
  29. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  30. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  31. data/test/dummy/config/initializers/inflections.rb +16 -0
  32. data/test/dummy/config/initializers/mime_types.rb +5 -0
  33. data/test/dummy/config/initializers/secret_token.rb +12 -0
  34. data/test/dummy/config/initializers/session_store.rb +3 -0
  35. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  36. data/test/dummy/config/locales/en.yml +23 -0
  37. data/test/dummy/config/routes.rb +72 -0
  38. data/test/dummy/config.ru +4 -0
  39. data/test/dummy/db/development.sqlite3 +0 -0
  40. data/test/dummy/db/schema.rb +16 -0
  41. data/test/dummy/db/test.sqlite3 +0 -0
  42. data/test/dummy/log/development.log +7 -0
  43. data/test/dummy/log/test.log +788 -0
  44. data/test/dummy/public/404.html +58 -0
  45. data/test/dummy/public/422.html +58 -0
  46. data/test/dummy/public/500.html +57 -0
  47. data/test/dummy/public/favicon.ico +0 -0
  48. data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  49. data/test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  50. data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  51. data/test/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  52. data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  53. data/test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  54. data/test/test_helper.rb +21 -0
  55. data/test/with_last_test.rb +264 -0
  56. data/test/without_last_test.rb +249 -0
  57. metadata +174 -0
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/404.html -->
52
+ <div class="dialog">
53
+ <h1>The page you were looking for doesn't exist.</h1>
54
+ <p>You may have mistyped the address or the page may have moved.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/422.html -->
52
+ <div class="dialog">
53
+ <h1>The change you wanted was rejected.</h1>
54
+ <p>Maybe you tried to change something you didn't have access to.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/500.html -->
52
+ <div class="dialog">
53
+ <h1>We're sorry, but something went wrong.</h1>
54
+ </div>
55
+ <p>If you are the application owner check the logs for more information.</p>
56
+ </body>
57
+ </html>
File without changes
@@ -0,0 +1,21 @@
1
+ # Configure Rails Environment
2
+ ENV['RAILS_ENV'] = 'test'
3
+
4
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
5
+ require 'rails/test_help'
6
+
7
+ Rails.backtrace_cleaner.remove_silencers!
8
+
9
+ # Load support files
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
11
+
12
+ # Load fixtures from the engine
13
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
14
+ ActiveSupport::TestCase.fixture_path = File.expand_path('../fixtures', __FILE__)
15
+ end
16
+
17
+ # Load database
18
+ config = YAML::load(File.read(File.expand_path('../dummy/config/database.yml', __FILE__)))
19
+ config['test']['adapter'] = 'jdbcsqlite3' if RUBY_PLATFORM == 'java'
20
+ ActiveRecord::Base.establish_connection(config['test'])
21
+ load(File.expand_path('../dummy/db/schema.rb', __FILE__))
@@ -0,0 +1,264 @@
1
+ require 'test_helper'
2
+
3
+ class WithLastTest < ActionDispatch::IntegrationTest
4
+
5
+ setup do
6
+ Rails.application.config.crumbs.show_last = true
7
+ end
8
+
9
+ test "should remember last requests in the same path" do
10
+ get '/'
11
+ assert_equal [
12
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/' }
13
+ ], session[:referer]
14
+ assert_select 'a', false
15
+
16
+ get '/static'
17
+ assert_equal [
18
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/' },
19
+ { base_url: 'http://www.example.com', path: '/static', fullpath: '/static' }
20
+ ], session[:referer]
21
+ assert_select 'a', count: 2
22
+ assert_select 'a[href="/"]', 'Home'
23
+ assert_select 'a[href="/static"]', 'Static'
24
+
25
+ get '/static/nested'
26
+ assert_equal [
27
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/' },
28
+ { base_url: 'http://www.example.com', path: '/static', fullpath: '/static' },
29
+ { base_url: 'http://www.example.com', path: '/static/nested', fullpath: '/static/nested' }
30
+ ], session[:referer]
31
+ assert_select 'a', count: 3
32
+ assert_select 'a[href="/"]', 'Home'
33
+ assert_select 'a[href="/static"]', 'Static'
34
+ assert_select 'a[href="/static/nested"]', 'Nested'
35
+
36
+ get '/'
37
+ assert_equal [
38
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/' }
39
+ ], session[:referer]
40
+ assert_select 'a', false
41
+ end
42
+
43
+ test "should remember last request with parameters in the same path" do
44
+ get '/?p1=p1'
45
+ assert_equal [
46
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' }
47
+ ], session[:referer]
48
+ assert_select 'a', false
49
+
50
+ get '/static?p2=p2'
51
+ assert_equal [
52
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
53
+ { base_url: 'http://www.example.com', path: '/static', fullpath: '/static?p2=p2' }
54
+ ], session[:referer]
55
+ assert_select 'a', count: 2
56
+ assert_select 'a[href="/?p1=p1"]', 'Home'
57
+ assert_select 'a[href="/static?p2=p2"]', 'Static'
58
+
59
+ get '/static/nested?p3=p3'
60
+ assert_equal [
61
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
62
+ { base_url: 'http://www.example.com', path: '/static', fullpath: '/static?p2=p2' },
63
+ { base_url: 'http://www.example.com', path: '/static/nested', fullpath: '/static/nested?p3=p3' }
64
+ ], session[:referer]
65
+ assert_select 'a', count: 3
66
+ assert_select 'a[href="/?p1=p1"]', 'Home'
67
+ assert_select 'a[href="/static?p2=p2"]', 'Static'
68
+ assert_select 'a[href="/static/nested?p3=p3"]', 'Nested'
69
+
70
+ get '/'
71
+ assert_equal [
72
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/' }
73
+ ], session[:referer]
74
+ assert_select 'a', false
75
+ end
76
+
77
+ test "gaps shouldn't cause any error and should generate crumbs either" do
78
+ get '/?p1=p1'
79
+ assert_equal [
80
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' }
81
+ ], session[:referer]
82
+ assert_select 'a', false
83
+
84
+ get '/static/nested?p3=p3'
85
+ assert_equal [
86
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
87
+ { base_url: 'http://www.example.com', path: '/static/nested', fullpath: '/static/nested?p3=p3' }
88
+ ], session[:referer]
89
+ assert_select 'a', count: 3
90
+ assert_select 'a[href="/?p1=p1"]', 'Home'
91
+ assert_select 'a[href="/static"]', 'Static'
92
+ assert_select 'a[href="/static/nested?p3=p3"]', 'Nested'
93
+
94
+ get '/'
95
+ assert_equal [
96
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/' }
97
+ ], session[:referer]
98
+ assert_select 'a', false
99
+ end
100
+
101
+ test "empty crumbs shouldn't cause any error and should't generate crumbs" do
102
+ get '/?p1=p1'
103
+ assert_equal [
104
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' }
105
+ ], session[:referer]
106
+ assert_select 'a', false
107
+
108
+ get '/empty?p2=p2'
109
+ assert_equal [
110
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
111
+ { base_url: 'http://www.example.com', path: '/empty', fullpath: '/empty?p2=p2' }
112
+ ], session[:referer]
113
+ assert_select 'a', count: 1
114
+ assert_select 'a[href="/?p1=p1"]', 'Home'
115
+
116
+ get '/empty/nested?p3=p3'
117
+ assert_equal [
118
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
119
+ { base_url: 'http://www.example.com', path: '/empty', fullpath: '/empty?p2=p2' },
120
+ { base_url: 'http://www.example.com', path: '/empty/nested', fullpath: '/empty/nested?p3=p3' }
121
+ ], session[:referer]
122
+ assert_select 'a', count: 2
123
+ assert_select 'a[href="/?p1=p1"]', 'Home'
124
+ assert_select 'a[href="/empty/nested?p3=p3"]', 'Nested'
125
+
126
+ get '/'
127
+ assert_equal [
128
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/' }
129
+ ], session[:referer]
130
+ assert_select 'a', false
131
+ end
132
+
133
+ test "params shouldn't cause any error and can be use alter crumb name" do
134
+ get '/?p1=p1'
135
+ assert_equal [
136
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' }
137
+ ], session[:referer]
138
+ assert_select 'a', false
139
+
140
+ get '/param?p2=p2'
141
+ assert_equal [
142
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
143
+ { base_url: 'http://www.example.com', path: '/param', fullpath: '/param?p2=p2' }
144
+ ], session[:referer]
145
+ assert_select 'a', count: 2
146
+ assert_select 'a[href="/?p1=p1"]', 'Home'
147
+ assert_select 'a[href="/param?p2=p2"]', ''
148
+
149
+ get '/param/1?p3=p3'
150
+ assert_equal [
151
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
152
+ { base_url: 'http://www.example.com', path: '/param', fullpath: '/param?p2=p2' },
153
+ { base_url: 'http://www.example.com', path: '/param/1', fullpath: '/param/1?p3=p3' }
154
+ ], session[:referer]
155
+ assert_select 'a', count: 3
156
+ assert_select 'a[href="/?p1=p1"]', 'Home'
157
+ assert_select 'a[href="/param?p2=p2"]', ''
158
+ assert_select 'a[href="/param/1?p3=p3"]', '1'
159
+
160
+ get '/param/1/nested?p4=p4'
161
+ assert_equal [
162
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
163
+ { base_url: 'http://www.example.com', path: '/param', fullpath: '/param?p2=p2' },
164
+ { base_url: 'http://www.example.com', path: '/param/1', fullpath: '/param/1?p3=p3' },
165
+ { base_url: 'http://www.example.com', path: '/param/1/nested', fullpath: '/param/1/nested?p4=p4' }
166
+ ], session[:referer]
167
+ assert_select 'a', count: 4
168
+ assert_select 'a[href="/?p1=p1"]', 'Home'
169
+ assert_select 'a[href="/param?p2=p2"]', ''
170
+ assert_select 'a[href="/param/1?p3=p3"]', '1'
171
+ assert_select 'a[href="/param/1/nested?p4=p4"]', 'Nested'
172
+
173
+ get '/'
174
+ assert_equal [
175
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/' }
176
+ ], session[:referer]
177
+ assert_select 'a', false
178
+ end
179
+
180
+ test "going back shouldn't cause any error and should retain history" do
181
+ get '/?p1=p1'
182
+ assert_equal [
183
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' }
184
+ ], session[:referer]
185
+ assert_select 'a', false
186
+
187
+ get '/param?p2=p2'
188
+ assert_equal [
189
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
190
+ { base_url: 'http://www.example.com', path: '/param', fullpath: '/param?p2=p2' }
191
+ ], session[:referer]
192
+ assert_select 'a', count: 2
193
+ assert_select 'a[href="/?p1=p1"]', 'Home'
194
+ assert_select 'a[href="/param?p2=p2"]', ''
195
+
196
+ get '/param/1?p3=p3'
197
+ assert_equal [
198
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
199
+ { base_url: 'http://www.example.com', path: '/param', fullpath: '/param?p2=p2' },
200
+ { base_url: 'http://www.example.com', path: '/param/1', fullpath: '/param/1?p3=p3' }
201
+ ], session[:referer]
202
+ assert_select 'a', count: 3
203
+ assert_select 'a[href="/?p1=p1"]', 'Home'
204
+ assert_select 'a[href="/param?p2=p2"]', ''
205
+ assert_select 'a[href="/param/1?p3=p3"]', '1'
206
+
207
+ get '/param/1/nested?p4=p4'
208
+ assert_equal [
209
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
210
+ { base_url: 'http://www.example.com', path: '/param', fullpath: '/param?p2=p2' },
211
+ { base_url: 'http://www.example.com', path: '/param/1', fullpath: '/param/1?p3=p3' },
212
+ { base_url: 'http://www.example.com', path: '/param/1/nested', fullpath: '/param/1/nested?p4=p4' }
213
+ ], session[:referer]
214
+ assert_select 'a', count: 4
215
+ assert_select 'a[href="/?p1=p1"]', 'Home'
216
+ assert_select 'a[href="/param?p2=p2"]', ''
217
+ assert_select 'a[href="/param/1?p3=p3"]', '1'
218
+ assert_select 'a[href="/param/1/nested?p4=p4"]', 'Nested'
219
+
220
+ get '/param'
221
+ assert_equal [
222
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
223
+ { base_url: 'http://www.example.com', path: '/param', fullpath: '/param' }
224
+ ], session[:referer]
225
+ assert_select 'a', count: 2
226
+ assert_select 'a[href="/?p1=p1"]', 'Home'
227
+ assert_select 'a[href="/param"]', ''
228
+ end
229
+
230
+ test "using t method shouldn't cause any error" do
231
+ get '/?p1=p1'
232
+ assert_equal [
233
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' }
234
+ ], session[:referer]
235
+ assert_select 'a', false
236
+
237
+ get '/i18n?p2=p2'
238
+ assert_equal [
239
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
240
+ { base_url: 'http://www.example.com', path: '/i18n', fullpath: '/i18n?p2=p2' }
241
+ ], session[:referer]
242
+ assert_select 'a', count: 2
243
+ assert_select 'a[href="/?p1=p1"]', 'Home'
244
+ assert_select 'a[href="/i18n?p2=p2"]', 'Hello world'
245
+
246
+ get '/i18n/nested?p3=p3'
247
+ assert_equal [
248
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' },
249
+ { base_url: 'http://www.example.com', path: '/i18n', fullpath: '/i18n?p2=p2' },
250
+ { base_url: 'http://www.example.com', path: '/i18n/nested', fullpath: '/i18n/nested?p3=p3' }
251
+ ], session[:referer]
252
+ assert_select 'a', count: 3
253
+ assert_select 'a[href="/?p1=p1"]', 'Home'
254
+ assert_select 'a[href="/i18n?p2=p2"]', 'Hello world'
255
+ assert_select 'a[href="/i18n/nested?p3=p3"]', 'Nested'
256
+
257
+ get '/?p1=p1'
258
+ assert_equal [
259
+ { base_url: 'http://www.example.com', path: '/', fullpath: '/?p1=p1' }
260
+ ], session[:referer]
261
+ assert_select 'a', false
262
+ end
263
+
264
+ end