friendly_id 1.9.9 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data.tar.gz.sig +0 -0
- data/History.txt +5 -4
- data/Manifest.txt +1 -10
- data/README.rdoc +13 -8
- data/Rakefile +5 -3
- data/friendly_id.gemspec +3 -3
- data/lib/friendly_id.rb +15 -8
- data/lib/friendly_id/helpers.rb +13 -0
- data/lib/friendly_id/non_sluggable_class_methods.rb +14 -15
- data/lib/friendly_id/slug.rb +2 -3
- data/lib/friendly_id/sluggable_class_methods.rb +3 -9
- data/lib/friendly_id/sluggable_instance_methods.rb +18 -18
- data/lib/friendly_id/version.rb +3 -3
- data/lib/tasks/friendly_id.rake +1 -1
- data/test/fixtures/posts.yml +5 -1
- data/test/fixtures/slugs.yml +8 -0
- data/test/non_slugged_test.rb +29 -7
- data/test/sluggable_test.rb +4 -0
- metadata +16 -14
- metadata.gz.sig +0 -0
- data/coverage/index.html +0 -409
- data/coverage/lib-friendly_id-non_sluggable_class_methods_rb.html +0 -646
- data/coverage/lib-friendly_id-non_sluggable_instance_methods_rb.html +0 -638
- data/coverage/lib-friendly_id-shoulda_macros_rb.html +0 -641
- data/coverage/lib-friendly_id-sluggable_class_methods_rb.html +0 -714
- data/coverage/lib-friendly_id-sluggable_instance_methods_rb.html +0 -710
- data/coverage/lib-friendly_id-string_helpers_rb.html +0 -685
- data/coverage/lib-friendly_id_rb.html +0 -665
- data/coverage/lib-slug_rb.html +0 -695
- data/coverage/rails-init_rb.html +0 -606
@@ -1,710 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
-
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'><head><title>lib/friendly_id/sluggable_instance_methods.rb - C0 code coverage information</title>
|
3
|
-
<style type='text/css'>body { background-color: rgb(240, 240, 245); }</style>
|
4
|
-
<style type='text/css'>span.cross-ref-title {
|
5
|
-
font-size: 140%;
|
6
|
-
}
|
7
|
-
span.cross-ref a {
|
8
|
-
text-decoration: none;
|
9
|
-
}
|
10
|
-
span.cross-ref {
|
11
|
-
background-color:#f3f7fa;
|
12
|
-
border: 1px dashed #333;
|
13
|
-
margin: 1em;
|
14
|
-
padding: 0.5em;
|
15
|
-
overflow: hidden;
|
16
|
-
}
|
17
|
-
a.crossref-toggle {
|
18
|
-
text-decoration: none;
|
19
|
-
}
|
20
|
-
span.marked0 {
|
21
|
-
background-color: rgb(185, 210, 200);
|
22
|
-
display: block;
|
23
|
-
}
|
24
|
-
span.marked1 {
|
25
|
-
background-color: rgb(190, 215, 205);
|
26
|
-
display: block;
|
27
|
-
}
|
28
|
-
span.inferred0 {
|
29
|
-
background-color: rgb(255, 255, 240);
|
30
|
-
display: block;
|
31
|
-
}
|
32
|
-
span.inferred1 {
|
33
|
-
background-color: rgb(255, 255, 240);
|
34
|
-
display: block;
|
35
|
-
}
|
36
|
-
span.uncovered0 {
|
37
|
-
background-color: rgb(225, 110, 110);
|
38
|
-
display: block;
|
39
|
-
}
|
40
|
-
span.uncovered1 {
|
41
|
-
background-color: rgb(235, 120, 120);
|
42
|
-
display: block;
|
43
|
-
}
|
44
|
-
span.overview {
|
45
|
-
border-bottom: 8px solid black;
|
46
|
-
}
|
47
|
-
div.overview {
|
48
|
-
border-bottom: 8px solid black;
|
49
|
-
}
|
50
|
-
body {
|
51
|
-
font-family: verdana, arial, helvetica;
|
52
|
-
}
|
53
|
-
div.footer {
|
54
|
-
font-size: 68%;
|
55
|
-
margin-top: 1.5em;
|
56
|
-
}
|
57
|
-
h1, h2, h3, h4, h5, h6 {
|
58
|
-
margin-bottom: 0.5em;
|
59
|
-
}
|
60
|
-
h5 {
|
61
|
-
margin-top: 0.5em;
|
62
|
-
}
|
63
|
-
.hidden {
|
64
|
-
display: none;
|
65
|
-
}
|
66
|
-
div.separator {
|
67
|
-
height: 10px;
|
68
|
-
}
|
69
|
-
/* Commented out for better readability, esp. on IE */
|
70
|
-
/*
|
71
|
-
table tr td, table tr th {
|
72
|
-
font-size: 68%;
|
73
|
-
}
|
74
|
-
td.value table tr td {
|
75
|
-
font-size: 11px;
|
76
|
-
}
|
77
|
-
*/
|
78
|
-
table.percent_graph {
|
79
|
-
height: 12px;
|
80
|
-
border: #808080 1px solid;
|
81
|
-
empty-cells: show;
|
82
|
-
}
|
83
|
-
table.percent_graph td.covered {
|
84
|
-
height: 10px;
|
85
|
-
background: #00f000;
|
86
|
-
}
|
87
|
-
table.percent_graph td.uncovered {
|
88
|
-
height: 10px;
|
89
|
-
background: #e00000;
|
90
|
-
}
|
91
|
-
table.percent_graph td.NA {
|
92
|
-
height: 10px;
|
93
|
-
background: #eaeaea;
|
94
|
-
}
|
95
|
-
table.report {
|
96
|
-
border-collapse: collapse;
|
97
|
-
width: 100%;
|
98
|
-
}
|
99
|
-
table.report td.heading {
|
100
|
-
background: #dcecff;
|
101
|
-
border: #d0d0d0 1px solid;
|
102
|
-
font-weight: bold;
|
103
|
-
text-align: center;
|
104
|
-
}
|
105
|
-
table.report td.heading:hover {
|
106
|
-
background: #c0ffc0;
|
107
|
-
}
|
108
|
-
table.report td.text {
|
109
|
-
border: #d0d0d0 1px solid;
|
110
|
-
}
|
111
|
-
table.report td.value,
|
112
|
-
table.report td.lines_total,
|
113
|
-
table.report td.lines_code {
|
114
|
-
text-align: right;
|
115
|
-
border: #d0d0d0 1px solid;
|
116
|
-
}
|
117
|
-
table.report tr.light {
|
118
|
-
background-color: rgb(240, 240, 245);
|
119
|
-
}
|
120
|
-
table.report tr.dark {
|
121
|
-
background-color: rgb(230, 230, 235);
|
122
|
-
}
|
123
|
-
</style>
|
124
|
-
<script type='text/javascript'>
|
125
|
-
// <![CDATA[
|
126
|
-
function toggleCode( id ) {
|
127
|
-
if ( document.getElementById )
|
128
|
-
elem = document.getElementById( id );
|
129
|
-
else if ( document.all )
|
130
|
-
elem = eval( "document.all." + id );
|
131
|
-
else
|
132
|
-
return false;
|
133
|
-
|
134
|
-
elemStyle = elem.style;
|
135
|
-
|
136
|
-
if ( elemStyle.display != "block" ) {
|
137
|
-
elemStyle.display = "block"
|
138
|
-
} else {
|
139
|
-
elemStyle.display = "none"
|
140
|
-
}
|
141
|
-
|
142
|
-
return true;
|
143
|
-
}
|
144
|
-
|
145
|
-
// Make cross-references hidden by default
|
146
|
-
document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" )
|
147
|
-
// ]]>
|
148
|
-
</script>
|
149
|
-
<style type='text/css'>span.run0 {
|
150
|
-
background-color: rgb(178, 204, 255);
|
151
|
-
display: block;
|
152
|
-
}
|
153
|
-
span.run1 {
|
154
|
-
background-color: rgb(178, 206, 255);
|
155
|
-
display: block;
|
156
|
-
}
|
157
|
-
span.run2 {
|
158
|
-
background-color: rgb(178, 209, 255);
|
159
|
-
display: block;
|
160
|
-
}
|
161
|
-
span.run3 {
|
162
|
-
background-color: rgb(178, 211, 255);
|
163
|
-
display: block;
|
164
|
-
}
|
165
|
-
span.run4 {
|
166
|
-
background-color: rgb(178, 214, 255);
|
167
|
-
display: block;
|
168
|
-
}
|
169
|
-
span.run5 {
|
170
|
-
background-color: rgb(178, 218, 255);
|
171
|
-
display: block;
|
172
|
-
}
|
173
|
-
span.run6 {
|
174
|
-
background-color: rgb(178, 220, 255);
|
175
|
-
display: block;
|
176
|
-
}
|
177
|
-
span.run7 {
|
178
|
-
background-color: rgb(178, 223, 255);
|
179
|
-
display: block;
|
180
|
-
}
|
181
|
-
span.run8 {
|
182
|
-
background-color: rgb(178, 225, 255);
|
183
|
-
display: block;
|
184
|
-
}
|
185
|
-
span.run9 {
|
186
|
-
background-color: rgb(178, 228, 255);
|
187
|
-
display: block;
|
188
|
-
}
|
189
|
-
span.run10 {
|
190
|
-
background-color: rgb(178, 232, 255);
|
191
|
-
display: block;
|
192
|
-
}
|
193
|
-
span.run11 {
|
194
|
-
background-color: rgb(178, 234, 255);
|
195
|
-
display: block;
|
196
|
-
}
|
197
|
-
span.run12 {
|
198
|
-
background-color: rgb(178, 237, 255);
|
199
|
-
display: block;
|
200
|
-
}
|
201
|
-
span.run13 {
|
202
|
-
background-color: rgb(178, 239, 255);
|
203
|
-
display: block;
|
204
|
-
}
|
205
|
-
span.run14 {
|
206
|
-
background-color: rgb(178, 242, 255);
|
207
|
-
display: block;
|
208
|
-
}
|
209
|
-
span.run15 {
|
210
|
-
background-color: rgb(178, 246, 255);
|
211
|
-
display: block;
|
212
|
-
}
|
213
|
-
span.run16 {
|
214
|
-
background-color: rgb(178, 248, 255);
|
215
|
-
display: block;
|
216
|
-
}
|
217
|
-
span.run17 {
|
218
|
-
background-color: rgb(178, 251, 255);
|
219
|
-
display: block;
|
220
|
-
}
|
221
|
-
span.run18 {
|
222
|
-
background-color: rgb(178, 253, 255);
|
223
|
-
display: block;
|
224
|
-
}
|
225
|
-
span.run19 {
|
226
|
-
background-color: rgb(178, 255, 253);
|
227
|
-
display: block;
|
228
|
-
}
|
229
|
-
span.run20 {
|
230
|
-
background-color: rgb(178, 255, 249);
|
231
|
-
display: block;
|
232
|
-
}
|
233
|
-
span.run21 {
|
234
|
-
background-color: rgb(178, 255, 247);
|
235
|
-
display: block;
|
236
|
-
}
|
237
|
-
span.run22 {
|
238
|
-
background-color: rgb(178, 255, 244);
|
239
|
-
display: block;
|
240
|
-
}
|
241
|
-
span.run23 {
|
242
|
-
background-color: rgb(178, 255, 242);
|
243
|
-
display: block;
|
244
|
-
}
|
245
|
-
span.run24 {
|
246
|
-
background-color: rgb(178, 255, 239);
|
247
|
-
display: block;
|
248
|
-
}
|
249
|
-
span.run25 {
|
250
|
-
background-color: rgb(178, 255, 235);
|
251
|
-
display: block;
|
252
|
-
}
|
253
|
-
span.run26 {
|
254
|
-
background-color: rgb(178, 255, 233);
|
255
|
-
display: block;
|
256
|
-
}
|
257
|
-
span.run27 {
|
258
|
-
background-color: rgb(178, 255, 230);
|
259
|
-
display: block;
|
260
|
-
}
|
261
|
-
span.run28 {
|
262
|
-
background-color: rgb(178, 255, 228);
|
263
|
-
display: block;
|
264
|
-
}
|
265
|
-
span.run29 {
|
266
|
-
background-color: rgb(178, 255, 225);
|
267
|
-
display: block;
|
268
|
-
}
|
269
|
-
span.run30 {
|
270
|
-
background-color: rgb(178, 255, 221);
|
271
|
-
display: block;
|
272
|
-
}
|
273
|
-
span.run31 {
|
274
|
-
background-color: rgb(178, 255, 219);
|
275
|
-
display: block;
|
276
|
-
}
|
277
|
-
span.run32 {
|
278
|
-
background-color: rgb(178, 255, 216);
|
279
|
-
display: block;
|
280
|
-
}
|
281
|
-
span.run33 {
|
282
|
-
background-color: rgb(178, 255, 214);
|
283
|
-
display: block;
|
284
|
-
}
|
285
|
-
span.run34 {
|
286
|
-
background-color: rgb(178, 255, 211);
|
287
|
-
display: block;
|
288
|
-
}
|
289
|
-
span.run35 {
|
290
|
-
background-color: rgb(178, 255, 207);
|
291
|
-
display: block;
|
292
|
-
}
|
293
|
-
span.run36 {
|
294
|
-
background-color: rgb(178, 255, 205);
|
295
|
-
display: block;
|
296
|
-
}
|
297
|
-
span.run37 {
|
298
|
-
background-color: rgb(178, 255, 202);
|
299
|
-
display: block;
|
300
|
-
}
|
301
|
-
span.run38 {
|
302
|
-
background-color: rgb(178, 255, 200);
|
303
|
-
display: block;
|
304
|
-
}
|
305
|
-
span.run39 {
|
306
|
-
background-color: rgb(178, 255, 197);
|
307
|
-
display: block;
|
308
|
-
}
|
309
|
-
span.run40 {
|
310
|
-
background-color: rgb(178, 255, 193);
|
311
|
-
display: block;
|
312
|
-
}
|
313
|
-
span.run41 {
|
314
|
-
background-color: rgb(178, 255, 191);
|
315
|
-
display: block;
|
316
|
-
}
|
317
|
-
span.run42 {
|
318
|
-
background-color: rgb(178, 255, 188);
|
319
|
-
display: block;
|
320
|
-
}
|
321
|
-
span.run43 {
|
322
|
-
background-color: rgb(178, 255, 186);
|
323
|
-
display: block;
|
324
|
-
}
|
325
|
-
span.run44 {
|
326
|
-
background-color: rgb(178, 255, 183);
|
327
|
-
display: block;
|
328
|
-
}
|
329
|
-
span.run45 {
|
330
|
-
background-color: rgb(178, 255, 179);
|
331
|
-
display: block;
|
332
|
-
}
|
333
|
-
span.run46 {
|
334
|
-
background-color: rgb(179, 255, 178);
|
335
|
-
display: block;
|
336
|
-
}
|
337
|
-
span.run47 {
|
338
|
-
background-color: rgb(182, 255, 178);
|
339
|
-
display: block;
|
340
|
-
}
|
341
|
-
span.run48 {
|
342
|
-
background-color: rgb(184, 255, 178);
|
343
|
-
display: block;
|
344
|
-
}
|
345
|
-
span.run49 {
|
346
|
-
background-color: rgb(187, 255, 178);
|
347
|
-
display: block;
|
348
|
-
}
|
349
|
-
span.run50 {
|
350
|
-
background-color: rgb(191, 255, 178);
|
351
|
-
display: block;
|
352
|
-
}
|
353
|
-
span.run51 {
|
354
|
-
background-color: rgb(193, 255, 178);
|
355
|
-
display: block;
|
356
|
-
}
|
357
|
-
span.run52 {
|
358
|
-
background-color: rgb(196, 255, 178);
|
359
|
-
display: block;
|
360
|
-
}
|
361
|
-
span.run53 {
|
362
|
-
background-color: rgb(198, 255, 178);
|
363
|
-
display: block;
|
364
|
-
}
|
365
|
-
span.run54 {
|
366
|
-
background-color: rgb(201, 255, 178);
|
367
|
-
display: block;
|
368
|
-
}
|
369
|
-
span.run55 {
|
370
|
-
background-color: rgb(205, 255, 178);
|
371
|
-
display: block;
|
372
|
-
}
|
373
|
-
span.run56 {
|
374
|
-
background-color: rgb(207, 255, 178);
|
375
|
-
display: block;
|
376
|
-
}
|
377
|
-
span.run57 {
|
378
|
-
background-color: rgb(210, 255, 178);
|
379
|
-
display: block;
|
380
|
-
}
|
381
|
-
span.run58 {
|
382
|
-
background-color: rgb(212, 255, 178);
|
383
|
-
display: block;
|
384
|
-
}
|
385
|
-
span.run59 {
|
386
|
-
background-color: rgb(215, 255, 178);
|
387
|
-
display: block;
|
388
|
-
}
|
389
|
-
span.run60 {
|
390
|
-
background-color: rgb(219, 255, 178);
|
391
|
-
display: block;
|
392
|
-
}
|
393
|
-
span.run61 {
|
394
|
-
background-color: rgb(221, 255, 178);
|
395
|
-
display: block;
|
396
|
-
}
|
397
|
-
span.run62 {
|
398
|
-
background-color: rgb(224, 255, 178);
|
399
|
-
display: block;
|
400
|
-
}
|
401
|
-
span.run63 {
|
402
|
-
background-color: rgb(226, 255, 178);
|
403
|
-
display: block;
|
404
|
-
}
|
405
|
-
span.run64 {
|
406
|
-
background-color: rgb(229, 255, 178);
|
407
|
-
display: block;
|
408
|
-
}
|
409
|
-
span.run65 {
|
410
|
-
background-color: rgb(233, 255, 178);
|
411
|
-
display: block;
|
412
|
-
}
|
413
|
-
span.run66 {
|
414
|
-
background-color: rgb(235, 255, 178);
|
415
|
-
display: block;
|
416
|
-
}
|
417
|
-
span.run67 {
|
418
|
-
background-color: rgb(238, 255, 178);
|
419
|
-
display: block;
|
420
|
-
}
|
421
|
-
span.run68 {
|
422
|
-
background-color: rgb(240, 255, 178);
|
423
|
-
display: block;
|
424
|
-
}
|
425
|
-
span.run69 {
|
426
|
-
background-color: rgb(243, 255, 178);
|
427
|
-
display: block;
|
428
|
-
}
|
429
|
-
span.run70 {
|
430
|
-
background-color: rgb(247, 255, 178);
|
431
|
-
display: block;
|
432
|
-
}
|
433
|
-
span.run71 {
|
434
|
-
background-color: rgb(249, 255, 178);
|
435
|
-
display: block;
|
436
|
-
}
|
437
|
-
span.run72 {
|
438
|
-
background-color: rgb(252, 255, 178);
|
439
|
-
display: block;
|
440
|
-
}
|
441
|
-
span.run73 {
|
442
|
-
background-color: rgb(255, 255, 178);
|
443
|
-
display: block;
|
444
|
-
}
|
445
|
-
span.run74 {
|
446
|
-
background-color: rgb(255, 252, 178);
|
447
|
-
display: block;
|
448
|
-
}
|
449
|
-
span.run75 {
|
450
|
-
background-color: rgb(255, 248, 178);
|
451
|
-
display: block;
|
452
|
-
}
|
453
|
-
span.run76 {
|
454
|
-
background-color: rgb(255, 246, 178);
|
455
|
-
display: block;
|
456
|
-
}
|
457
|
-
span.run77 {
|
458
|
-
background-color: rgb(255, 243, 178);
|
459
|
-
display: block;
|
460
|
-
}
|
461
|
-
span.run78 {
|
462
|
-
background-color: rgb(255, 240, 178);
|
463
|
-
display: block;
|
464
|
-
}
|
465
|
-
span.run79 {
|
466
|
-
background-color: rgb(255, 238, 178);
|
467
|
-
display: block;
|
468
|
-
}
|
469
|
-
span.run80 {
|
470
|
-
background-color: rgb(255, 234, 178);
|
471
|
-
display: block;
|
472
|
-
}
|
473
|
-
span.run81 {
|
474
|
-
background-color: rgb(255, 232, 178);
|
475
|
-
display: block;
|
476
|
-
}
|
477
|
-
span.run82 {
|
478
|
-
background-color: rgb(255, 229, 178);
|
479
|
-
display: block;
|
480
|
-
}
|
481
|
-
span.run83 {
|
482
|
-
background-color: rgb(255, 226, 178);
|
483
|
-
display: block;
|
484
|
-
}
|
485
|
-
span.run84 {
|
486
|
-
background-color: rgb(255, 224, 178);
|
487
|
-
display: block;
|
488
|
-
}
|
489
|
-
span.run85 {
|
490
|
-
background-color: rgb(255, 220, 178);
|
491
|
-
display: block;
|
492
|
-
}
|
493
|
-
span.run86 {
|
494
|
-
background-color: rgb(255, 218, 178);
|
495
|
-
display: block;
|
496
|
-
}
|
497
|
-
span.run87 {
|
498
|
-
background-color: rgb(255, 215, 178);
|
499
|
-
display: block;
|
500
|
-
}
|
501
|
-
span.run88 {
|
502
|
-
background-color: rgb(255, 212, 178);
|
503
|
-
display: block;
|
504
|
-
}
|
505
|
-
span.run89 {
|
506
|
-
background-color: rgb(255, 210, 178);
|
507
|
-
display: block;
|
508
|
-
}
|
509
|
-
span.run90 {
|
510
|
-
background-color: rgb(255, 206, 178);
|
511
|
-
display: block;
|
512
|
-
}
|
513
|
-
span.run91 {
|
514
|
-
background-color: rgb(255, 204, 178);
|
515
|
-
display: block;
|
516
|
-
}
|
517
|
-
span.run92 {
|
518
|
-
background-color: rgb(255, 201, 178);
|
519
|
-
display: block;
|
520
|
-
}
|
521
|
-
span.run93 {
|
522
|
-
background-color: rgb(255, 198, 178);
|
523
|
-
display: block;
|
524
|
-
}
|
525
|
-
span.run94 {
|
526
|
-
background-color: rgb(255, 196, 178);
|
527
|
-
display: block;
|
528
|
-
}
|
529
|
-
span.run95 {
|
530
|
-
background-color: rgb(255, 192, 178);
|
531
|
-
display: block;
|
532
|
-
}
|
533
|
-
span.run96 {
|
534
|
-
background-color: rgb(255, 189, 178);
|
535
|
-
display: block;
|
536
|
-
}
|
537
|
-
span.run97 {
|
538
|
-
background-color: rgb(255, 187, 178);
|
539
|
-
display: block;
|
540
|
-
}
|
541
|
-
span.run98 {
|
542
|
-
background-color: rgb(255, 184, 178);
|
543
|
-
display: block;
|
544
|
-
}
|
545
|
-
span.run99 {
|
546
|
-
background-color: rgb(255, 182, 178);
|
547
|
-
display: block;
|
548
|
-
}
|
549
|
-
span.run100 {
|
550
|
-
background-color: rgb(255, 178, 178);
|
551
|
-
display: block;
|
552
|
-
}
|
553
|
-
</style>
|
554
|
-
</head>
|
555
|
-
<body><h3>C0 code coverage information</h3>
|
556
|
-
<p>Generated on Tue Dec 16 16:57:16 -0200 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.3</a>
|
557
|
-
</p>
|
558
|
-
<hr/>
|
559
|
-
<pre><span class='marked0'>Code reported as executed by Ruby looks like this...
|
560
|
-
</span><span class='marked1'>and this: this line is also marked as covered.
|
561
|
-
</span><span class='inferred0'>Lines considered as run by rcov, but not reported by Ruby, look like this,
|
562
|
-
</span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).
|
563
|
-
</span><span class='uncovered0'>Finally, here's a line marked as not executed.
|
564
|
-
</span></pre>
|
565
|
-
<table class='report'><thead><tr><td class='heading'>Name</td>
|
566
|
-
<td class='heading'>Total lines</td>
|
567
|
-
<td class='heading'>Lines of code</td>
|
568
|
-
<td class='heading'>Total coverage</td>
|
569
|
-
<td class='heading'>Code coverage</td>
|
570
|
-
</tr>
|
571
|
-
</thead>
|
572
|
-
<tbody><tr class='light'><td><a href='lib-friendly_id-sluggable_instance_methods_rb.html'>lib/friendly_id/sluggable_instance_methods.rb</a>
|
573
|
-
</td>
|
574
|
-
<td class='lines_total'><tt>105</tt>
|
575
|
-
</td>
|
576
|
-
<td class='lines_code'><tt>74</tt>
|
577
|
-
</td>
|
578
|
-
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
|
579
|
-
</td>
|
580
|
-
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
|
581
|
-
<td class='uncovered' width='0'/>
|
582
|
-
</tr>
|
583
|
-
</table>
|
584
|
-
</td>
|
585
|
-
</tr>
|
586
|
-
</table>
|
587
|
-
</td>
|
588
|
-
<td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>100.0%</tt>
|
589
|
-
</td>
|
590
|
-
<td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='100'/>
|
591
|
-
<td class='uncovered' width='0'/>
|
592
|
-
</tr>
|
593
|
-
</table>
|
594
|
-
</td>
|
595
|
-
</tr>
|
596
|
-
</table>
|
597
|
-
</td>
|
598
|
-
</tr>
|
599
|
-
</tbody>
|
600
|
-
</table>
|
601
|
-
<pre><span class="marked1"><a name="line1"></a> 1 module FriendlyId::SluggableInstanceMethods
|
602
|
-
</span><span class="inferred0"><a name="line2"></a> 2
|
603
|
-
</span><span class="marked1"><a name="line3"></a> 3 NUM_CHARS_RESERVED_FOR_FRIENDLY_ID_EXTENSION = 2
|
604
|
-
</span><span class="inferred0"><a name="line4"></a> 4
|
605
|
-
</span><span class="marked1"><a name="line5"></a> 5 attr :finder_slug
|
606
|
-
</span><span class="marked0"><a name="line6"></a> 6 attr_accessor :finder_slug_name
|
607
|
-
</span><span class="inferred1"><a name="line7"></a> 7
|
608
|
-
</span><span class="marked0"><a name="line8"></a> 8 def finder_slug
|
609
|
-
</span><span class="marked1"><a name="line9"></a> 9 @finder_slug ||= init_finder_slug
|
610
|
-
</span><span class="marked0"><a name="line10"></a> 10 end
|
611
|
-
</span><span class="inferred1"><a name="line11"></a> 11
|
612
|
-
</span><span class="inferred0"><a name="line12"></a> 12 # Was the record found using one of its friendly ids?
|
613
|
-
</span><span class="marked1"><a name="line13"></a> 13 def found_using_friendly_id?
|
614
|
-
</span><span class="marked0"><a name="line14"></a> 14 finder_slug
|
615
|
-
</span><span class="marked1"><a name="line15"></a> 15 end
|
616
|
-
</span><span class="inferred0"><a name="line16"></a> 16
|
617
|
-
</span><span class="inferred1"><a name="line17"></a> 17 # Was the record found using its numeric id?
|
618
|
-
</span><span class="marked0"><a name="line18"></a> 18 def found_using_numeric_id?
|
619
|
-
</span><span class="marked1"><a name="line19"></a> 19 !found_using_friendly_id?
|
620
|
-
</span><span class="marked0"><a name="line20"></a> 20 end
|
621
|
-
</span><span class="inferred1"><a name="line21"></a> 21
|
622
|
-
</span><span class="inferred0"><a name="line22"></a> 22 # Was the record found using an old friendly id?
|
623
|
-
</span><span class="marked1"><a name="line23"></a> 23 def found_using_outdated_friendly_id?
|
624
|
-
</span><span class="marked0"><a name="line24"></a> 24 finder_slug.id != slug.id
|
625
|
-
</span><span class="marked1"><a name="line25"></a> 25 end
|
626
|
-
</span><span class="inferred0"><a name="line26"></a> 26
|
627
|
-
</span><span class="inferred1"><a name="line27"></a> 27 # Was the record found using an old friendly id, or its numeric id?
|
628
|
-
</span><span class="marked0"><a name="line28"></a> 28 def has_better_id?
|
629
|
-
</span><span class="marked1"><a name="line29"></a> 29 slug and found_using_numeric_id? || found_using_outdated_friendly_id?
|
630
|
-
</span><span class="marked0"><a name="line30"></a> 30 end
|
631
|
-
</span><span class="inferred1"><a name="line31"></a> 31
|
632
|
-
</span><span class="inferred0"><a name="line32"></a> 32 # Returns the friendly id.
|
633
|
-
</span><span class="marked1"><a name="line33"></a> 33 def friendly_id
|
634
|
-
</span><span class="marked0"><a name="line34"></a> 34 slug(true).to_friendly_id
|
635
|
-
</span><span class="marked1"><a name="line35"></a> 35 end
|
636
|
-
</span><span class="marked0"><a name="line36"></a> 36 alias best_id friendly_id
|
637
|
-
</span><span class="inferred1"><a name="line37"></a> 37
|
638
|
-
</span><span class="inferred0"><a name="line38"></a> 38 # Has the basis of our friendly id changed, requiring the generation of a
|
639
|
-
</span><span class="inferred1"><a name="line39"></a> 39 # new slug?
|
640
|
-
</span><span class="marked0"><a name="line40"></a> 40 def new_slug_needed?
|
641
|
-
</span><span class="marked1"><a name="line41"></a> 41 !slug || slug_text != slug.name
|
642
|
-
</span><span class="marked0"><a name="line42"></a> 42 end
|
643
|
-
</span><span class="inferred1"><a name="line43"></a> 43
|
644
|
-
</span><span class="inferred0"><a name="line44"></a> 44 # Returns the most recent slug, which is used to determine the friendly
|
645
|
-
</span><span class="inferred1"><a name="line45"></a> 45 # id.
|
646
|
-
</span><span class="marked0"><a name="line46"></a> 46 def slug(reload = false)
|
647
|
-
</span><span class="marked1"><a name="line47"></a> 47 @most_recent_slug = nil if reload
|
648
|
-
</span><span class="marked0"><a name="line48"></a> 48 @most_recent_slug ||= slugs.first
|
649
|
-
</span><span class="inferred1"><a name="line49"></a> 49 end
|
650
|
-
</span><span class="inferred0"><a name="line50"></a> 50
|
651
|
-
</span><span class="inferred1"><a name="line51"></a> 51 # Returns the friendly id, or if none is available, the numeric id.
|
652
|
-
</span><span class="marked0"><a name="line52"></a> 52 def to_param
|
653
|
-
</span><span class="marked1"><a name="line53"></a> 53 slug ? slug.to_friendly_id : id.to_s
|
654
|
-
</span><span class="marked0"><a name="line54"></a> 54 end
|
655
|
-
</span><span class="inferred1"><a name="line55"></a> 55
|
656
|
-
</span><span class="inferred0"><a name="line56"></a> 56 # Set the slug using the generated friendly id.
|
657
|
-
</span><span class="marked1"><a name="line57"></a> 57 def set_slug
|
658
|
-
</span><span class="marked0"><a name="line58"></a> 58 if self.class.friendly_id_options[:use_slug] && new_slug_needed?
|
659
|
-
</span><span class="marked1"><a name="line59"></a> 59 @most_recent_slug = nil
|
660
|
-
</span><span class="marked0"><a name="line60"></a> 60 slug_attributes = {:name => slug_text}
|
661
|
-
</span><span class="marked1"><a name="line61"></a> 61 if friendly_id_options[:scope]
|
662
|
-
</span><span class="marked0"><a name="line62"></a> 62 scope = send(friendly_id_options[:scope])
|
663
|
-
</span><span class="marked1"><a name="line63"></a> 63 slug_attributes[:scope] = scope.respond_to?(:to_param) ? scope.to_param : scope.to_s
|
664
|
-
</span><span class="inferred0"><a name="line64"></a> 64 end
|
665
|
-
</span><span class="inferred1"><a name="line65"></a> 65 # If we're renaming back to a previously used friendly_id, delete the
|
666
|
-
</span><span class="inferred0"><a name="line66"></a> 66 # slug so that we can recycle the name without having to use a sequence.
|
667
|
-
</span><span class="marked1"><a name="line67"></a> 67 slugs.find(:all, :conditions => {:name => slug_text, :scope => scope}).each { |s| s.destroy }
|
668
|
-
</span><span class="marked0"><a name="line68"></a> 68 s = slugs.build slug_attributes
|
669
|
-
</span><span class="marked1"><a name="line69"></a> 69 s.send(:set_sequence)
|
670
|
-
</span><span class="inferred0"><a name="line70"></a> 70 end
|
671
|
-
</span><span class="marked1"><a name="line71"></a> 71 end
|
672
|
-
</span><span class="inferred0"><a name="line72"></a> 72
|
673
|
-
</span><span class="inferred1"><a name="line73"></a> 73 # Get the processed string used as the basis of the friendly id.
|
674
|
-
</span><span class="marked0"><a name="line74"></a> 74 def slug_text
|
675
|
-
</span><span class="marked1"><a name="line75"></a> 75 base = send friendly_id_options[:column]
|
676
|
-
</span><span class="marked0"><a name="line76"></a> 76 if self.friendly_id_options[:strip_diacritics]
|
677
|
-
</span><span class="marked1"><a name="line77"></a> 77 base = Slug::normalize(Slug::strip_diacritics(base))
|
678
|
-
</span><span class="inferred0"><a name="line78"></a> 78 else
|
679
|
-
</span><span class="marked1"><a name="line79"></a> 79 base = Slug::normalize(base)
|
680
|
-
</span><span class="inferred0"><a name="line80"></a> 80 end
|
681
|
-
</span><span class="marked1"><a name="line81"></a> 81 if base.length > friendly_id_options[:max_length]
|
682
|
-
</span><span class="marked0"><a name="line82"></a> 82 base = base[0...friendly_id_options[:max_length]]
|
683
|
-
</span><span class="inferred1"><a name="line83"></a> 83 end
|
684
|
-
</span><span class="marked0"><a name="line84"></a> 84 if friendly_id_options[:reserved].include?(base)
|
685
|
-
</span><span class="marked1"><a name="line85"></a> 85 raise FriendlyId::SlugGenerationError.new("The slug text is a reserved value")
|
686
|
-
</span><span class="inferred0"><a name="line86"></a> 86 end
|
687
|
-
</span><span class="marked1"><a name="line87"></a> 87 return base
|
688
|
-
</span><span class="inferred0"><a name="line88"></a> 88 end
|
689
|
-
</span><span class="inferred1"><a name="line89"></a> 89
|
690
|
-
</span><span class="marked0"><a name="line90"></a> 90 private
|
691
|
-
</span><span class="inferred1"><a name="line91"></a> 91
|
692
|
-
</span><span class="marked0"><a name="line92"></a> 92 def finder_slug=(finder_slug)
|
693
|
-
</span><span class="marked1"><a name="line93"></a> 93 @finder_slug_name = finder_slug.name
|
694
|
-
</span><span class="marked0"><a name="line94"></a> 94 slug = finder_slug
|
695
|
-
</span><span class="marked1"><a name="line95"></a> 95 slug.sluggable = self
|
696
|
-
</span><span class="marked0"><a name="line96"></a> 96 slug
|
697
|
-
</span><span class="inferred1"><a name="line97"></a> 97 end
|
698
|
-
</span><span class="inferred0"><a name="line98"></a> 98
|
699
|
-
</span><span class="marked1"><a name="line99"></a> 99 def init_finder_slug
|
700
|
-
</span><span class="marked0"><a name="line100"></a>100 return false if !@finder_slug_name
|
701
|
-
</span><span class="marked1"><a name="line101"></a>101 slug = Slug.find(:first, :conditions => {:sluggable_id => id, :name => @finder_slug_name})
|
702
|
-
</span><span class="marked0"><a name="line102"></a>102 finder_slug = slug
|
703
|
-
</span><span class="inferred1"><a name="line103"></a>103 end
|
704
|
-
</span><span class="inferred0"><a name="line104"></a>104
|
705
|
-
</span><span class="inferred1"><a name="line105"></a>105 end
|
706
|
-
</span></pre><hr/>
|
707
|
-
<p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
|
708
|
-
version 0.8.1.3.</p>
|
709
|
-
</body>
|
710
|
-
</html>
|