interlock 1.0 → 1.1

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.
Files changed (40) hide show
  1. data/CHANGELOG +2 -0
  2. data/Manifest +8 -15
  3. data/README +16 -73
  4. data/TODO +3 -0
  5. data/interlock.gemspec +16 -9
  6. data/lib/interlock/action_controller.rb +135 -36
  7. data/lib/interlock/action_view.rb +85 -18
  8. data/lib/interlock/active_record.rb +1 -1
  9. data/lib/interlock/config.rb +1 -1
  10. data/lib/interlock/interlock.rb +22 -3
  11. data/tasks/interlock.rake +10 -0
  12. data/test/integration/app/app/controllers/application.rb +2 -2
  13. data/test/integration/app/app/controllers/items_controller.rb +19 -1
  14. data/test/integration/app/app/views/items/detail.rhtml +20 -0
  15. data/test/integration/app/app/views/items/{list.html.erb → list.rhtml} +6 -0
  16. data/test/integration/app/app/views/items/{recent.html.erb → recent.rhtml} +0 -0
  17. data/test/integration/app/app/views/items/{show.html.erb → show.rhtml} +1 -1
  18. data/test/integration/app/app/views/layouts/application.html.erb +9 -0
  19. data/test/integration/app/app/views/shared/{_related.html.erb → _related.rhtml} +0 -0
  20. data/test/integration/app/config/boot.rb +2 -0
  21. data/test/integration/app/config/environment.rb +1 -3
  22. data/test/integration/server_test.rb +53 -6
  23. data/test/setup.rb +5 -0
  24. data/test/teardown.rb +0 -4
  25. data/test/test_helper.rb +9 -2
  26. data/test/unit/interlock_test.rb +21 -0
  27. data.tar.gz.sig +0 -0
  28. metadata +14 -20
  29. metadata.gz.sig +0 -0
  30. data/test/integration/app/coverage/cache-43041 +0 -0
  31. data/test/integration/app/coverage/index.html +0 -414
  32. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-action_controller_rb.html +0 -733
  33. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-action_view_rb.html +0 -644
  34. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-active_record_rb.html +0 -639
  35. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-config_rb.html +0 -688
  36. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-core_extensions_rb.html +0 -674
  37. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-interlock_rb.html +0 -722
  38. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-memcached_rb.html +0 -640
  39. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock_rb.html +0 -635
  40. data/test/integration/app/db/schema.rb +0 -21
@@ -1,722 +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>vendor/plugins/interlock/lib/interlock/interlock.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(175, 200, 200);
30
- display: block;
31
- }
32
- span.inferred1 {
33
- background-color: rgb(180, 205, 205);
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 Thu Dec 13 04:51:26 -0500 2007 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</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&apos;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='vendor-plugins-interlock-lib-interlock-interlock_rb.html'>vendor/plugins/interlock/lib/interlock/interlock.rb</a>
573
- </td>
574
- <td class='lines_total'><tt>112</tt>
575
- </td>
576
- <td class='lines_code'><tt>54</tt>
577
- </td>
578
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>100.0%</tt>
579
- &nbsp;</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
- &nbsp;</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="inferred0"><a name="line1"></a> 1
602
- </span><span class="marked1"><a name="line2"></a> 2 module Interlock
603
- </span><span class="inferred0"><a name="line3"></a> 3
604
- </span><span class="marked1"><a name="line4"></a> 4 class InterlockError &lt; StandardError #:nodoc:
605
- </span><span class="inferred0"><a name="line5"></a> 5 end
606
- </span><span class="marked1"><a name="line6"></a> 6 class DependencyError &lt; InterlockError #:nodoc:
607
- </span><span class="inferred0"><a name="line7"></a> 7 end
608
- </span><span class="marked1"><a name="line8"></a> 8 class UsageError &lt; InterlockError #:nodoc:
609
- </span><span class="inferred0"><a name="line9"></a> 9 end
610
- </span><span class="inferred1"><a name="line10"></a> 10
611
- </span><span class="marked0"><a name="line11"></a> 11 SCOPE_KEYS = [:controller, :action, :id]
612
- </span><span class="inferred1"><a name="line12"></a> 12
613
- </span><span class="marked0"><a name="line13"></a> 13 mattr_accessor :local_cache
614
- </span><span class="inferred1"><a name="line14"></a> 14
615
- </span><span class="marked0"><a name="line15"></a> 15 class &lt;&lt; self
616
- </span><span class="inferred1"><a name="line16"></a> 16 #
617
- </span><span class="inferred0"><a name="line17"></a> 17 # Extract the dependencies from the rest of the arguments and registers
618
- </span><span class="inferred1"><a name="line18"></a> 18 # them with the appropriate models.
619
- </span><span class="inferred0"><a name="line19"></a> 19 #
620
- </span><span class="marked1"><a name="line20"></a> 20 def extract_options_and_dependencies(dependencies, default = nil)
621
- </span><span class="marked0"><a name="line21"></a> 21 options = dependencies.extract_options!
622
- </span><span class="inferred1"><a name="line22"></a> 22
623
- </span><span class="inferred0"><a name="line23"></a> 23 # Hook up the dependencies nested array.
624
- </span><span class="marked1"><a name="line24"></a> 24 dependencies.map! { |klass| [klass, :all] }
625
- </span><span class="marked0"><a name="line25"></a> 25 options.each do |klass, scope|
626
- </span><span class="marked1"><a name="line26"></a> 26 if klass.is_a? Class
627
- </span><span class="inferred0"><a name="line27"></a> 27 #
628
- </span><span class="inferred1"><a name="line28"></a> 28 # Beware! Scoping to :id means that a request's params[:id] must equal
629
- </span><span class="inferred0"><a name="line29"></a> 29 # klass#id or the rule will not trigger. This is because params[:id] is the
630
- </span><span class="inferred1"><a name="line30"></a> 30 # only record-specific scope include in the key.
631
- </span><span class="inferred0"><a name="line31"></a> 31 #
632
- </span><span class="inferred1"><a name="line32"></a> 32 # If you want fancier invalidation, think hard about whether it really
633
- </span><span class="inferred0"><a name="line33"></a> 33 # matters. Over-invalidation is rarely a problem, but under-invalidation
634
- </span><span class="inferred1"><a name="line34"></a> 34 # frequently is.
635
- </span><span class="inferred0"><a name="line35"></a> 35 #
636
- </span><span class="inferred1"><a name="line36"></a> 36 # &quot;But I need it!&quot; you say. All right, then start using key tags.
637
- </span><span class="inferred0"><a name="line37"></a> 37 #
638
- </span><span class="marked1"><a name="line38"></a> 38 raise Interlock::DependencyError, &quot;#{scope.inspect} is not a valid scope&quot; unless [:all, :id].include?(scope)
639
- </span><span class="marked0"><a name="line39"></a> 39 dependencies &lt;&lt; [klass, scope.to_sym]
640
- </span><span class="inferred1"><a name="line40"></a> 40 end
641
- </span><span class="inferred0"><a name="line41"></a> 41 end
642
- </span><span class="inferred1"><a name="line42"></a> 42
643
- </span><span class="marked0"><a name="line43"></a> 43 unless dependencies.any?
644
- </span><span class="inferred1"><a name="line44"></a> 44 # Use the conventional controller/model association if none are provided
645
- </span><span class="inferred0"><a name="line45"></a> 45 # Can be skipped by calling caching(nil)
646
- </span><span class="marked1"><a name="line46"></a> 46 dependencies = [[default, :all]]
647
- </span><span class="inferred0"><a name="line47"></a> 47 end
648
- </span><span class="inferred1"><a name="line48"></a> 48
649
- </span><span class="inferred0"><a name="line49"></a> 49 # Remove nils
650
- </span><span class="marked1"><a name="line50"></a> 50 dependencies.reject! {|klass, scope| klass.nil? }
651
- </span><span class="inferred0"><a name="line51"></a> 51
652
- </span><span class="marked1"><a name="line52"></a> 52 [options.indifferentiate, dependencies]
653
- </span><span class="inferred0"><a name="line53"></a> 53 end
654
- </span><span class="inferred1"><a name="line54"></a> 54
655
- </span><span class="inferred0"><a name="line55"></a> 55 #
656
- </span><span class="inferred1"><a name="line56"></a> 56 # Add each key with scope to the appropriate dependencies array.
657
- </span><span class="inferred0"><a name="line57"></a> 57 #
658
- </span><span class="marked1"><a name="line58"></a> 58 def register_dependencies(dependencies, key)
659
- </span><span class="marked0"><a name="line59"></a> 59 Array(dependencies).each do |klass, scope|
660
- </span><span class="marked1"><a name="line60"></a> 60 dep_key = dependency_key(klass)
661
- </span><span class="inferred0"><a name="line61"></a> 61
662
- </span><span class="inferred1"><a name="line62"></a> 62 # Get the value for this class/key out of the global store.
663
- </span><span class="marked0"><a name="line63"></a> 63 this = (CACHE.get(dep_key) || {})[key]
664
- </span><span class="inferred1"><a name="line64"></a> 64
665
- </span><span class="inferred0"><a name="line65"></a> 65 # Make sure to not overwrite broader scopes.
666
- </span><span class="marked1"><a name="line66"></a> 66 unless this == :all or this == scope
667
- </span><span class="inferred0"><a name="line67"></a> 67 # We need to write, so acquire the lock.
668
- </span><span class="marked1"><a name="line68"></a> 68 CACHE.lock(dep_key) do |hash|
669
- </span><span class="marked0"><a name="line69"></a> 69 Interlock.say key, &quot;registered a dependency on #{klass} -&gt; #{scope.inspect}.&quot;
670
- </span><span class="marked1"><a name="line70"></a> 70 (hash || {}).merge({key =&gt; scope})
671
- </span><span class="inferred0"><a name="line71"></a> 71 end
672
- </span><span class="inferred1"><a name="line72"></a> 72 end
673
- </span><span class="inferred0"><a name="line73"></a> 73
674
- </span><span class="inferred1"><a name="line74"></a> 74 end
675
- </span><span class="marked0"><a name="line75"></a> 75 end
676
- </span><span class="inferred1"><a name="line76"></a> 76
677
- </span><span class="marked0"><a name="line77"></a> 77 def say(key, msg) #:nodoc:
678
- </span><span class="marked1"><a name="line78"></a> 78 RAILS_DEFAULT_LOGGER.warn &quot;** fragment #{key.inspect[1..-2]} #{msg}&quot;
679
- </span><span class="marked0"><a name="line79"></a> 79 end
680
- </span><span class="inferred1"><a name="line80"></a> 80
681
- </span><span class="inferred0"><a name="line81"></a> 81 #
682
- </span><span class="inferred1"><a name="line82"></a> 82 # Get the Memcached key for a class's dependency list. We store per-class
683
- </span><span class="inferred0"><a name="line83"></a> 83 # to reduce lock contention.
684
- </span><span class="inferred1"><a name="line84"></a> 84 #
685
- </span><span class="marked0"><a name="line85"></a> 85 def dependency_key(klass)
686
- </span><span class="marked1"><a name="line86"></a> 86 &quot;interlock:#{ENV['RAILS_ASSET_ID']}:dependency:#{klass.name}&quot;
687
- </span><span class="marked0"><a name="line87"></a> 87 end
688
- </span><span class="inferred1"><a name="line88"></a> 88
689
- </span><span class="inferred0"><a name="line89"></a> 89 #
690
- </span><span class="inferred1"><a name="line90"></a> 90 # Build a fragment key for an explicitly passed context. Shouldn't be called
691
- </span><span class="inferred0"><a name="line91"></a> 91 # unless you need to write your own fine-grained invalidation rules. Make sure
692
- </span><span class="inferred1"><a name="line92"></a> 92 # the default ones are really unacceptable before you go to the trouble of
693
- </span><span class="inferred0"><a name="line93"></a> 93 # rolling your own.
694
- </span><span class="inferred1"><a name="line94"></a> 94 #
695
- </span><span class="marked0"><a name="line95"></a> 95 def caching_key(controller, action, id, tag)
696
- </span><span class="marked1"><a name="line96"></a> 96 raise ArgumentError, &quot;Both controller and action must be specified&quot; unless controller and action
697
- </span><span class="inferred0"><a name="line97"></a> 97
698
- </span><span class="marked1"><a name="line98"></a> 98 id = (id or 'all').to_interlock_tag
699
- </span><span class="marked0"><a name="line99"></a> 99 tag = tag.to_interlock_tag
700
- </span><span class="inferred1"><a name="line100"></a>100
701
- </span><span class="marked0"><a name="line101"></a>101 &quot;interlock:#{ENV['RAILS_ASSET_ID']}:#{controller}:#{action}:#{id}:#{tag}&quot;
702
- </span><span class="inferred1"><a name="line102"></a>102 end
703
- </span><span class="inferred0"><a name="line103"></a>103
704
- </span><span class="inferred1"><a name="line104"></a>104 #
705
- </span><span class="inferred0"><a name="line105"></a>105 # Invalidate a particular key.
706
- </span><span class="inferred1"><a name="line106"></a>106 #
707
- </span><span class="marked0"><a name="line107"></a>107 def invalidate(key)
708
- </span><span class="marked1"><a name="line108"></a>108 ActionController::Base.fragment_cache_store.delete key
709
- </span><span class="marked0"><a name="line109"></a>109 end
710
- </span><span class="inferred1"><a name="line110"></a>110
711
- </span><span class="inferred0"><a name="line111"></a>111 end
712
- </span><span class="inferred1"><a name="line112"></a>112 end
713
- </span></pre><hr/>
714
- <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
715
- version 0.8.1.2.</p>
716
- <p><a href='http://validator.w3.org/check/referer'><img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88'/>
717
- </a>
718
- <a href='http://jigsaw.w3.org/css-validator/check/referer'><img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px'/>
719
- </a>
720
- </p>
721
- </body>
722
- </html>