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,733 +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/action_controller.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:25 -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-action_controller_rb.html'>vendor/plugins/interlock/lib/interlock/action_controller.rb</a>
573
- </td>
574
- <td class='lines_total'><tt>123</tt>
575
- </td>
576
- <td class='lines_code'><tt>63</tt>
577
- </td>
578
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>94.3%</tt>
579
- &nbsp;</td>
580
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='94'/>
581
- <td class='uncovered' width='6'/>
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'>90.5%</tt>
589
- &nbsp;</td>
590
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='90'/>
591
- <td class='uncovered' width='10'/>
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 ActionController #:nodoc:
603
- </span><span class="marked0"><a name="line3"></a> 3 class Base
604
- </span><span class="inferred1"><a name="line4"></a> 4
605
- </span><span class="inferred0"><a name="line5"></a> 5 #
606
- </span><span class="inferred1"><a name="line6"></a> 6 # Build the fragment key from a particular context. This must be deterministic
607
- </span><span class="inferred0"><a name="line7"></a> 7 # and stateful except for the tag. We can't scope the key to arbitrary params
608
- </span><span class="inferred1"><a name="line8"></a> 8 # because the view doesn't have access to which are relevant and which are
609
- </span><span class="inferred0"><a name="line9"></a> 9 # not.
610
- </span><span class="inferred1"><a name="line10"></a> 10 #
611
- </span><span class="inferred0"><a name="line11"></a> 11 # Note that the tag can be pretty much any object. Define #to_interlock_tag
612
- </span><span class="inferred1"><a name="line12"></a> 12 # if you need custom tagging for some class. ActiveRecord::Base already
613
- </span><span class="inferred0"><a name="line13"></a> 13 # has it defined appropriately.
614
- </span><span class="inferred1"><a name="line14"></a> 14 #
615
- </span><span class="inferred0"><a name="line15"></a> 15 # If you pass an Array of symbols as the tag, it will get value-mapped onto
616
- </span><span class="inferred1"><a name="line16"></a> 16 # params and sorted. This makes granular scoping easier, although it doesn't
617
- </span><span class="inferred0"><a name="line17"></a> 17 # sidestep the normal blanket invalidations.
618
- </span><span class="inferred1"><a name="line18"></a> 18 #
619
- </span><span class="marked0"><a name="line19"></a> 19 def caching_key(ignore = nil, tag = nil)
620
- </span><span class="marked1"><a name="line20"></a> 20 ignore = Array(ignore)
621
- </span><span class="marked0"><a name="line21"></a> 21 ignore = Interlock::SCOPE_KEYS if ignore.include? :all
622
- </span><span class="inferred1"><a name="line22"></a> 22
623
- </span><span class="marked0"><a name="line23"></a> 23 if (Interlock::SCOPE_KEYS - ignore).empty? and !tag
624
- </span><span class="uncovered1"><a name="line24"></a> 24 raise UsageError, &quot;You must specify a :tag if you are ignoring the entire default scope.&quot;
625
- </span><span class="uncovered0"><a name="line25"></a> 25 end
626
- </span><span class="inferred1"><a name="line26"></a> 26
627
- </span><span class="marked0"><a name="line27"></a> 27 if tag.is_a? Array and tag.all? {|x| x.is_a? Symbol}
628
- </span><span class="marked1"><a name="line28"></a> 28 tag = tag.sort_by do |key|
629
- </span><span class="marked0"><a name="line29"></a> 29 key.to_s
630
- </span><span class="inferred1"><a name="line30"></a> 30 end.map do |key|
631
- </span><span class="marked0"><a name="line31"></a> 31 params[key].to_interlock_tag
632
- </span><span class="uncovered1"><a name="line32"></a> 32 end.join(&quot;;&quot;)
633
- </span><span class="uncovered0"><a name="line33"></a> 33 end
634
- </span><span class="inferred1"><a name="line34"></a> 34
635
- </span><span class="marked0"><a name="line35"></a> 35 Interlock.caching_key(
636
- </span><span class="marked1"><a name="line36"></a> 36 ignore.include?(:controller) ? 'any' : controller_name,
637
- </span><span class="marked0"><a name="line37"></a> 37 ignore.include?(:action) ? 'any' : action_name,
638
- </span><span class="marked1"><a name="line38"></a> 38 ignore.include?(:id) ? 'all' : params[:id],
639
- </span><span class="inferred0"><a name="line39"></a> 39 tag
640
- </span><span class="inferred1"><a name="line40"></a> 40 )
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="inferred0"><a name="line43"></a> 43 #
644
- </span><span class="inferred1"><a name="line44"></a> 44 # Mark a controller block for caching. Accepts a list of class dependencies for
645
- </span><span class="inferred0"><a name="line45"></a> 45 # invalidation, as well as a :tag key for explicit fragment scoping.
646
- </span><span class="inferred1"><a name="line46"></a> 46 #
647
- </span><span class="marked0"><a name="line47"></a> 47 def behavior_cache(*args)
648
- </span><span class="marked1"><a name="line48"></a> 48 conventional_class = begin; controller_name.classify.constantize; rescue NameError; end
649
- </span><span class="marked0"><a name="line49"></a> 49 options, dependencies = Interlock.extract_options_and_dependencies(args, conventional_class)
650
- </span><span class="inferred1"><a name="line50"></a> 50
651
- </span><span class="marked0"><a name="line51"></a> 51 raise UsageError, &quot;:ttl has no effect in a behavior_cache block&quot; if options[:ttl]
652
- </span><span class="inferred1"><a name="line52"></a> 52
653
- </span><span class="marked0"><a name="line53"></a> 53 key = caching_key(options.value_for_indifferent_key(:ignore), options.value_for_indifferent_key(:tag))
654
- </span><span class="marked1"><a name="line54"></a> 54 Interlock.register_dependencies(dependencies, key)
655
- </span><span class="inferred0"><a name="line55"></a> 55
656
- </span><span class="inferred1"><a name="line56"></a> 56 # See if the fragment exists, and run the block if it doesn't.
657
- </span><span class="marked0"><a name="line57"></a> 57 unless read_fragment(key)
658
- </span><span class="marked1"><a name="line58"></a> 58 Interlock.say key, &quot;is running the controller block&quot;
659
- </span><span class="marked0"><a name="line59"></a> 59 yield
660
- </span><span class="inferred1"><a name="line60"></a> 60 end
661
- </span><span class="inferred0"><a name="line61"></a> 61 end
662
- </span><span class="inferred1"><a name="line62"></a> 62
663
- </span><span class="inferred0"><a name="line63"></a> 63 #:stopdoc:
664
- </span><span class="marked1"><a name="line64"></a> 64 alias :caching :behavior_cache # Deprecated
665
- </span><span class="inferred0"><a name="line65"></a> 65 #:startdoc:
666
- </span><span class="inferred1"><a name="line66"></a> 66
667
- </span><span class="marked0"><a name="line67"></a> 67 private
668
- </span><span class="inferred1"><a name="line68"></a> 68
669
- </span><span class="inferred0"><a name="line69"></a> 69 #
670
- </span><span class="inferred1"><a name="line70"></a> 70 # Callback to reset the local cache.
671
- </span><span class="inferred0"><a name="line71"></a> 71 #
672
- </span><span class="marked1"><a name="line72"></a> 72 def clear_interlock_local_cache
673
- </span><span class="marked0"><a name="line73"></a> 73 Interlock.local_cache = ActionController::Base::MemoryStore.new
674
- </span><span class="marked1"><a name="line74"></a> 74 RAILS_DEFAULT_LOGGER.warn &quot;** cleared interlock local cache&quot;
675
- </span><span class="inferred0"><a name="line75"></a> 75 end
676
- </span><span class="inferred1"><a name="line76"></a> 76
677
- </span><span class="inferred0"><a name="line77"></a> 77 # Should be registered first in the chain
678
- </span><span class="marked1"><a name="line78"></a> 78 prepend_before_filter :clear_interlock_local_cache
679
- </span><span class="inferred0"><a name="line79"></a> 79
680
- </span><span class="inferred1"><a name="line80"></a> 80 end
681
- </span><span class="inferred0"><a name="line81"></a> 81
682
- </span><span class="marked1"><a name="line82"></a> 82 module Caching #:nodoc:
683
- </span><span class="marked0"><a name="line83"></a> 83 module Fragments
684
- </span><span class="inferred1"><a name="line84"></a> 84
685
- </span><span class="inferred0"><a name="line85"></a> 85 #
686
- </span><span class="inferred1"><a name="line86"></a> 86 # Replaces Rail's write_fragment method. Avoids extra checks for regex keys,
687
- </span><span class="inferred0"><a name="line87"></a> 87 # which are unsupported, adds more detailed logging information, and stores
688
- </span><span class="inferred1"><a name="line88"></a> 88 # writes in the local process cache too to avoid duplicate memcached requests.
689
- </span><span class="inferred0"><a name="line89"></a> 89 #
690
- </span><span class="marked1"><a name="line90"></a> 90 def write_fragment(key, content, options = nil)
691
- </span><span class="marked0"><a name="line91"></a> 91 return unless perform_caching
692
- </span><span class="inferred1"><a name="line92"></a> 92
693
- </span><span class="marked0"><a name="line93"></a> 93 fragment_cache_store.write(key, content, options)
694
- </span><span class="marked1"><a name="line94"></a> 94 Interlock.local_cache.write(key, content, options)
695
- </span><span class="inferred0"><a name="line95"></a> 95
696
- </span><span class="marked1"><a name="line96"></a> 96 Interlock.say key, &quot;wrote&quot;
697
- </span><span class="inferred0"><a name="line97"></a> 97
698
- </span><span class="marked1"><a name="line98"></a> 98 content
699
- </span><span class="inferred0"><a name="line99"></a> 99 end
700
- </span><span class="inferred1"><a name="line100"></a>100
701
- </span><span class="inferred0"><a name="line101"></a>101 #
702
- </span><span class="inferred1"><a name="line102"></a>102 # Replaces Rail's read_fragment method. Avoids checks for regex keys,
703
- </span><span class="inferred0"><a name="line103"></a>103 # which are unsupported, adds more detailed logging information, and
704
- </span><span class="inferred1"><a name="line104"></a>104 # checks the local process cache before hitting memcached. Hits on
705
- </span><span class="inferred0"><a name="line105"></a>105 # memcached are then stored back locally to avoid duplicate requests.
706
- </span><span class="inferred1"><a name="line106"></a>106 #
707
- </span><span class="marked0"><a name="line107"></a>107 def read_fragment(key, options = nil)
708
- </span><span class="marked1"><a name="line108"></a>108 return unless perform_caching
709
- </span><span class="inferred0"><a name="line109"></a>109
710
- </span><span class="marked1"><a name="line110"></a>110 if content = Interlock.local_cache.read(key, options)
711
- </span><span class="inferred0"><a name="line111"></a>111 # Interlock.say key, &quot;read from local cache&quot;
712
- </span><span class="marked1"><a name="line112"></a>112 elsif content = fragment_cache_store.read(key, options)
713
- </span><span class="marked0"><a name="line113"></a>113 Interlock.say key, &quot;read from memcached&quot;
714
- </span><span class="marked1"><a name="line114"></a>114 Interlock.local_cache.write(key, content, options)
715
- </span><span class="uncovered0"><a name="line115"></a>115 else
716
- </span><span class="uncovered1"><a name="line116"></a>116 # Interlock.say key, &quot;not found&quot;
717
- </span><span class="uncovered0"><a name="line117"></a>117 end
718
- </span><span class="marked1"><a name="line118"></a>118 content
719
- </span><span class="inferred0"><a name="line119"></a>119 end
720
- </span><span class="inferred1"><a name="line120"></a>120
721
- </span><span class="inferred0"><a name="line121"></a>121 end
722
- </span><span class="inferred1"><a name="line122"></a>122 end
723
- </span><span class="inferred0"><a name="line123"></a>123 end
724
- </span></pre><hr/>
725
- <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
726
- version 0.8.1.2.</p>
727
- <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'/>
728
- </a>
729
- <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'/>
730
- </a>
731
- </p>
732
- </body>
733
- </html>