elephas 2.2.0 → 3.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.
@@ -113,13 +113,13 @@
113
113
 
114
114
 
115
115
 
116
- <h2>Class Attribute Summary <small>(<a href="#" class="summary_toggle">collapse</a>)</small></h2>
116
+ <h2>Instance Attribute Summary <small>(<a href="#" class="summary_toggle">collapse</a>)</small></h2>
117
117
  <ul class="summary">
118
118
 
119
119
  <li class="public ">
120
120
  <span class="summary_signature">
121
121
 
122
- <a href="#provider-class_method" title="provider (class method)">+ (Object) <strong>provider</strong> </a>
122
+ <a href="#backend-instance_method" title="#backend (instance method)">- (Backend) <strong>backend</strong> </a>
123
123
 
124
124
 
125
125
 
@@ -136,7 +136,33 @@
136
136
 
137
137
 
138
138
 
139
- <span class="summary_desc"><div class='inline'><p>Returns the value of attribute provider.</p>
139
+ <span class="summary_desc"><div class='inline'><p>The backend used for the caching.</p>
140
+ </div></span>
141
+
142
+ </li>
143
+
144
+
145
+ <li class="public ">
146
+ <span class="summary_signature">
147
+
148
+ <a href="#prefix-instance_method" title="#prefix (instance method)">- (String) <strong>prefix</strong> </a>
149
+
150
+
151
+
152
+ </span>
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+ <span class="summary_desc"><div class='inline'><p>The default prefix for cache entries.</p>
140
166
  </div></span>
141
167
 
142
168
  </li>
@@ -149,7 +175,7 @@
149
175
 
150
176
 
151
177
  <h2>
152
- Class Method Summary
178
+ Instance Method Summary
153
179
  <small>(<a href="#" class="summary_toggle">collapse</a>)</small>
154
180
  </h2>
155
181
 
@@ -158,7 +184,7 @@
158
184
  <li class="public ">
159
185
  <span class="summary_signature">
160
186
 
161
- <a href="#default_prefix-class_method" title="default_prefix (class method)">+ (String) <strong>default_prefix</strong> </a>
187
+ <a href="#delete-instance_method" title="#delete (instance method)">- (Boolean) <strong>delete</strong>(key, backend = nil) </a>
162
188
 
163
189
 
164
190
 
@@ -172,7 +198,7 @@
172
198
 
173
199
 
174
200
 
175
- <span class="summary_desc"><div class='inline'><p>Returns the default prefix for cache entries.</p>
201
+ <span class="summary_desc"><div class='inline'><p>Deletes a value from the cache.</p>
176
202
  </div></span>
177
203
 
178
204
  </li>
@@ -181,7 +207,7 @@
181
207
  <li class="public ">
182
208
  <span class="summary_signature">
183
209
 
184
- <a href="#delete-class_method" title="delete (class method)">+ (Boolean) <strong>delete</strong>(key) </a>
210
+ <a href="#exists%3F-instance_method" title="#exists? (instance method)">- (Boolean) <strong>exists?</strong>(key, backend = nil) </a>
185
211
 
186
212
 
187
213
 
@@ -195,7 +221,7 @@
195
221
 
196
222
 
197
223
 
198
- <span class="summary_desc"><div class='inline'><p>Deletes a value from the cache.</p>
224
+ <span class="summary_desc"><div class='inline'><p>Checks if a key exists in the cache.</p>
199
225
  </div></span>
200
226
 
201
227
  </li>
@@ -204,13 +230,15 @@
204
230
  <li class="public ">
205
231
  <span class="summary_signature">
206
232
 
207
- <a href="#exists%3F-class_method" title="exists? (class method)">+ (Boolean) <strong>exists?</strong>(key) </a>
233
+ <a href="#initialize-instance_method" title="#initialize (instance method)">- (Cache) <strong>initialize</strong>(backend = nil) </a>
208
234
 
209
235
 
210
236
 
211
237
  </span>
212
238
 
213
239
 
240
+ <span class="note title constructor">constructor</span>
241
+
214
242
 
215
243
 
216
244
 
@@ -218,7 +246,7 @@
218
246
 
219
247
 
220
248
 
221
- <span class="summary_desc"><div class='inline'><p>Checks if a key exists in the cache.</p>
249
+ <span class="summary_desc"><div class='inline'><p>Initialize the cache.</p>
222
250
  </div></span>
223
251
 
224
252
  </li>
@@ -227,7 +255,7 @@
227
255
  <li class="public ">
228
256
  <span class="summary_signature">
229
257
 
230
- <a href="#read-class_method" title="read (class method)">+ (Object|NilClass) <strong>read</strong>(key) </a>
258
+ <a href="#read-instance_method" title="#read (instance method)">- (Object|NilClass) <strong>read</strong>(key, backend = nil) </a>
231
259
 
232
260
 
233
261
 
@@ -250,7 +278,7 @@
250
278
  <li class="public ">
251
279
  <span class="summary_signature">
252
280
 
253
- <a href="#setup_options-class_method" title="setup_options (class method)">+ (Hash) <strong>setup_options</strong>(options, key) </a>
281
+ <a href="#setup_options-instance_method" title="#setup_options (instance method)">- (Hash) <strong>setup_options</strong>(options, key) </a>
254
282
 
255
283
 
256
284
 
@@ -273,7 +301,7 @@
273
301
  <li class="public ">
274
302
  <span class="summary_signature">
275
303
 
276
- <a href="#use-class_method" title="use (class method)">+ (Object|Entry) <strong>use</strong>(key, options = {}, &amp;block) </a>
304
+ <a href="#use-instance_method" title="#use (instance method)">- (Object|Entry) <strong>use</strong>(key, options = {}, &amp;block) </a>
277
305
 
278
306
 
279
307
 
@@ -296,7 +324,7 @@
296
324
  <li class="public ">
297
325
  <span class="summary_signature">
298
326
 
299
- <a href="#write-class_method" title="write (class method)">+ (Object) <strong>write</strong>(key, value, options = {}) </a>
327
+ <a href="#write-instance_method" title="#write (instance method)">- (Object) <strong>write</strong>(key, value, options = {}) </a>
300
328
 
301
329
 
302
330
 
@@ -319,16 +347,13 @@
319
347
  </ul>
320
348
 
321
349
 
322
-
323
- <div id="class_attr_details" class="attr_details">
324
- <h2>Class Attribute Details</h2>
325
-
326
-
327
- <span id="provider=-class_method"></span>
328
- <div class="method_details first">
329
- <h3 class="signature first" id="provider-class_method">
350
+ <div id="constructor_details" class="method_details_list">
351
+ <h2>Constructor Details</h2>
352
+
353
+ <div class="method_details first">
354
+ <h3 class="signature first" id="initialize-instance_method">
330
355
 
331
- + (<tt>Object</tt>) <strong>provider</strong>
356
+ - (<tt><span class='object_link'><a href="" title="Elephas::Cache (class)">Cache</a></span></tt>) <strong>initialize</strong>(backend = nil)
332
357
 
333
358
 
334
359
 
@@ -336,13 +361,34 @@
336
361
 
337
362
  </h3><div class="docstring">
338
363
  <div class="discussion">
339
- <p>Returns the value of attribute provider</p>
364
+ <p>Initialize the cache.</p>
340
365
 
341
366
 
342
367
  </div>
343
368
  </div>
344
369
  <div class="tags">
370
+ <p class="tag_title">Parameters:</p>
371
+ <ul class="param">
345
372
 
373
+ <li>
374
+
375
+ <span class='name'>backend</span>
376
+
377
+
378
+ <span class='type'>(<tt><span class='object_link'><a href="Backends/Base.html" title="Elephas::Backends::Base (class)">Backends::Base</a></span></tt>)</span>
379
+
380
+
381
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
382
+
383
+
384
+ &mdash;
385
+ <div class='inline'><p>The backend to use. By default uses an Hash backend.</p>
386
+ </div>
387
+
388
+ </li>
389
+
390
+ </ul>
391
+
346
392
 
347
393
  </div><table class="source_code">
348
394
  <tr>
@@ -350,32 +396,401 @@
350
396
  <pre class="lines">
351
397
 
352
398
 
353
- 13
354
- 14
355
- 15</pre>
399
+ 21
400
+ 22
401
+ 23
402
+ 24</pre>
356
403
  </td>
357
404
  <td>
358
- <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 13</span>
405
+ <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 21</span>
359
406
 
360
- <span class='kw'>def</span> <span class='id identifier rubyid_provider'>provider</span>
361
- <span class='ivar'>@provider</span>
407
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
408
+ <span class='ivar'>@backend</span> <span class='op'>=</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>||</span> <span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Backends</span><span class='op'>::</span><span class='const'>Hash</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
409
+ <span class='ivar'>@prefix</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>elephas-</span><span class='embexpr_beg'>#{</span><span class='op'>::</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Version</span><span class='op'>::</span><span class='const'>STRING</span><span class='rbrace'>}</span><span class='tstring_content'>-cache</span><span class='tstring_end'>&quot;</span></span>
362
410
  <span class='kw'>end</span></pre>
363
411
  </td>
364
412
  </tr>
365
413
  </table>
366
414
  </div>
415
+
416
+ </div>
417
+
418
+ <div id="instance_attr_details" class="attr_details">
419
+ <h2>Instance Attribute Details</h2>
367
420
 
421
+
422
+ <span id="backend=-instance_method"></span>
423
+ <div class="method_details first">
424
+ <h3 class="signature first" id="backend-instance_method">
425
+
426
+ - (<tt>Backend</tt>) <strong>backend</strong>
427
+
428
+
429
+
430
+
431
+
432
+ </h3><div class="docstring">
433
+ <div class="discussion">
434
+ <p>The backend used for the caching.</p>
435
+
436
+
368
437
  </div>
438
+ </div>
439
+ <div class="tags">
440
+
441
+ <p class="tag_title">Returns:</p>
442
+ <ul class="return">
443
+
444
+ <li>
445
+
446
+
447
+ <span class='type'>(<tt>Backend</tt>)</span>
448
+
449
+
450
+
451
+ &mdash;
452
+ <div class='inline'><p>The backend used for the caching.</p>
453
+ </div>
454
+
455
+ </li>
456
+
457
+ </ul>
369
458
 
459
+ </div><table class="source_code">
460
+ <tr>
461
+ <td>
462
+ <pre class="lines">
370
463
 
371
- <div id="class_method_details" class="method_details_list">
372
- <h2>Class Method Details</h2>
373
464
 
465
+ 14
466
+ 15
467
+ 16
468
+ 17
469
+ 18
470
+ 19
471
+ 20
472
+ 21
473
+ 22
474
+ 23
475
+ 24
476
+ 25
477
+ 26
478
+ 27
479
+ 28
480
+ 29
481
+ 30
482
+ 31
483
+ 32
484
+ 33
485
+ 34
486
+ 35
487
+ 36
488
+ 37
489
+ 38
490
+ 39
491
+ 40
492
+ 41
493
+ 42
494
+ 43
495
+ 44
496
+ 45
497
+ 46
498
+ 47
499
+ 48
500
+ 49
501
+ 50
502
+ 51
503
+ 52
504
+ 53
505
+ 54
506
+ 55
507
+ 56
508
+ 57
509
+ 58
510
+ 59
511
+ 60
512
+ 61
513
+ 62
514
+ 63
515
+ 64
516
+ 65
517
+ 66
518
+ 67
519
+ 68
520
+ 69
521
+ 70
522
+ 71
523
+ 72
524
+ 73
525
+ 74
526
+ 75
527
+ 76
528
+ 77
529
+ 78
530
+ 79
531
+ 80
532
+ 81
533
+ 82
534
+ 83
535
+ 84
536
+ 85
537
+ 86
538
+ 87
539
+ 88
540
+ 89
541
+ 90
542
+ 91
543
+ 92
544
+ 93
545
+ 94
546
+ 95
547
+ 96
548
+ 97
549
+ 98
550
+ 99
551
+ 100
552
+ 101
553
+ 102
554
+ 103
555
+ 104
556
+ 105
557
+ 106
558
+ 107
559
+ 108
560
+ 109
561
+ 110
562
+ 111
563
+ 112
564
+ 113
565
+ 114
566
+ 115
567
+ 116
568
+ 117
569
+ 118
570
+ 119
571
+ 120
572
+ 121
573
+ 122
574
+ 123
575
+ 124
576
+ 125
577
+ 126
578
+ 127
579
+ 128
580
+ 129
581
+ 130
582
+ 131
583
+ 132
584
+ 133
585
+ 134
586
+ 135
587
+ 136
588
+ 137
589
+ 138
590
+ 139
591
+ 140
592
+ 141
593
+ 142
594
+ 143
595
+ 144
596
+ 145
597
+ 146
598
+ 147
599
+ 148
600
+ 149
601
+ 150
602
+ 151
603
+ 152
604
+ 153
605
+ 154
606
+ 155
607
+ 156
608
+ 157
609
+ 158
610
+ 159
611
+ 160
612
+ 161
613
+ 162
614
+ 163
615
+ 164
616
+ 165
617
+ 166
618
+ 167
619
+ 168
620
+ 169
621
+ 170</pre>
622
+ </td>
623
+ <td>
624
+ <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 14</span>
625
+
626
+ <span class='kw'>class</span> <span class='const'>Cache</span>
627
+ <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:backend</span>
628
+ <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:prefix</span>
629
+
630
+ <span class='comment'># Initialize the cache.
631
+ </span> <span class='comment'>#
632
+ </span> <span class='comment'># @param backend [Backends::Base] The backend to use. By default uses an Hash backend.
633
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
634
+ <span class='ivar'>@backend</span> <span class='op'>=</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>||</span> <span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Backends</span><span class='op'>::</span><span class='const'>Hash</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
635
+ <span class='ivar'>@prefix</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>elephas-</span><span class='embexpr_beg'>#{</span><span class='op'>::</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Version</span><span class='op'>::</span><span class='const'>STRING</span><span class='rbrace'>}</span><span class='tstring_content'>-cache</span><span class='tstring_end'>&quot;</span></span>
636
+ <span class='kw'>end</span>
637
+
638
+ <span class='comment'># This is the main method of the framework.
639
+ </span> <span class='comment'>#
640
+ </span> <span class='comment'># It tries reading a key from the cache.
641
+ </span> <span class='comment'>#
642
+ </span> <span class='comment'># If it doesn't find it, it uses the provided block (which receives options as argument) to compute its value and then store it into the cache for later usages.
643
+ </span> <span class='comment'>#
644
+ </span> <span class='comment'># ```ruby
645
+ </span> <span class='comment'># cache = Elephas::Cache.new(Elephas::Backends::Hash.new)
646
+ </span> <span class='comment'>#
647
+ </span> <span class='comment'># value = cache.use(&quot;KEY&quot;) do |options|
648
+ </span> <span class='comment'># &quot;VALUE&quot;
649
+ </span> <span class='comment'># end
650
+ </span> <span class='comment'>#
651
+ </span> <span class='comment'># value
652
+ </span> <span class='comment'># # =&gt; &quot;VALUE&quot;
653
+ </span> <span class='comment'>#
654
+ </span> <span class='comment'># value = cache.use(&quot;KEY&quot;) do |options|
655
+ </span> <span class='comment'># &quot;ANOTHER VALUE&quot;
656
+ </span> <span class='comment'># end
657
+ </span> <span class='comment'>#
658
+ </span> <span class='comment'># value
659
+ </span> <span class='comment'># # =&gt; &quot;VALUE&quot;
660
+ </span> <span class='comment'># ```
661
+ </span> <span class='comment'>#
662
+ </span> <span class='comment'># @param key [String] The key to lookup.
663
+ </span> <span class='comment'># @param options [Hash] A list of options for managing this key.
664
+ </span> <span class='comment'># @param block [Proc] An optional block to run to compute the value for the key if nothing is found.
665
+ </span> <span class='comment'># @return [Object|Entry] The found or newly-set value associated to the key.
666
+ </span> <span class='comment'># @see .setup_options
667
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_use'>use</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
668
+ <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='kw'>nil</span>
669
+
670
+ <span class='comment'># Get options
671
+ </span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
672
+
673
+ <span class='comment'># Check if the storage has the value (if we don't have to skip the cache)
674
+ </span> <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:hash</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:force</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>false</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span> <span class='op'>&gt;</span> <span class='int'>0</span>
675
+ <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='id identifier rubyid_compute_value'>compute_value</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_rv'>rv</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_block'>block</span> <span class='comment'># Try to compute the value from the block
676
+ </span>
677
+ <span class='comment'># Return value
678
+ </span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:as_entry</span><span class='rbracket'>]</span> <span class='op'>?</span> <span class='id identifier rubyid_rv'>rv</span> <span class='op'>:</span> <span class='id identifier rubyid_rv'>rv</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span>
679
+ <span class='kw'>end</span>
680
+
681
+ <span class='comment'># Reads a value from the cache.
682
+ </span> <span class='comment'>#
683
+ </span> <span class='comment'># @param key [String] The key to lookup.
684
+ </span> <span class='comment'># @param backend [Backends::Base|NilClass] The backend to use. Defaults to the current backend.
685
+ </span> <span class='comment'># @return [Object|NilClass] The read value or `nil`.
686
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
687
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='label'>backend:</span> <span class='id identifier rubyid_backend'>backend</span><span class='rbrace'>}</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
688
+ <span class='kw'>end</span>
689
+
690
+ <span class='comment'># Writes a value to the cache.
691
+ </span> <span class='comment'>#
692
+ </span> <span class='comment'># @param key [String] The key to associate the value with.
693
+ </span> <span class='comment'># @param value [Object] The value to write. Setting a value to `nil` **doesn't** mean *deleting* the value.
694
+ </span> <span class='comment'># @param options [Hash] A list of options for writing.
695
+ </span> <span class='comment'># @see .setup_options
696
+ </span> <span class='comment'># @return [Object] The value itself.
697
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
698
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span><span class='rparen'>)</span>
699
+ <span class='kw'>end</span>
700
+
701
+ <span class='comment'># Deletes a value from the cache.
702
+ </span> <span class='comment'>#
703
+ </span> <span class='comment'># @param key [String] The key to delete.
704
+ </span> <span class='comment'># @param backend [Backends::Base|NilClass] The backend to use. Defaults to the current backend.
705
+ </span> <span class='comment'># @return [Boolean] `true` if the key was in the cache, `false` otherwise.
706
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
707
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='label'>backend:</span> <span class='id identifier rubyid_backend'>backend</span><span class='rbrace'>}</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
708
+ <span class='kw'>end</span>
709
+
710
+ <span class='comment'># Checks if a key exists in the cache.
711
+ </span> <span class='comment'>#
712
+ </span> <span class='comment'># @param key [String] The key to lookup.
713
+ </span> <span class='comment'># @param backend [Backends::Base|NilClass] The backend to use. Defaults to the current backend.
714
+ </span> <span class='comment'># @return [Boolean] `true` if the key is in the cache, `false` otherwise.
715
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_exists?'>exists?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
716
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='label'>backend:</span> <span class='id identifier rubyid_backend'>backend</span><span class='rbrace'>}</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_exists?'>exists?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
717
+ <span class='kw'>end</span>
718
+
719
+ <span class='comment'># Setups options for use into the framework.
720
+ </span> <span class='comment'># Valid options are:
721
+ </span> <span class='comment'>#
722
+ </span> <span class='comment'># * **:ttl**: The TTL (time to live, in milliseconds) of the entry. It means how long will the value stay in cache. Setting it to 0 or less means never cache the entry.
723
+ </span> <span class='comment'># * **:force**: Setting it to `true` will always skip the cache.
724
+ </span> <span class='comment'># * **:key**: The key associated to this value. **You should never set this option directly.**
725
+ </span> <span class='comment'># * **:prefix**: The prefix used in cache. This is used to avoid conflicts with other caching frameworks.
726
+ </span> <span class='comment'># * **:complete_key**: The complete key used for computing the hash. By default is concatenation of `:key` and `:prefix` options.
727
+ </span> <span class='comment'># * **:hash**: The hash used to store the key in the cache. Should be unique
728
+ </span> <span class='comment'># * **:as_entry**: In `Elephas::Cache.use`, setting this to `true` will return the entire `Entry` object rather than the value only.
729
+ </span> <span class='comment'>#
730
+ </span> <span class='comment'># @param options [Object] An initial setup.
731
+ </span> <span class='comment'># @param key [String] The key to associate to this options.
732
+ </span> <span class='comment'># @return [Hash] An options hash.
733
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
734
+ <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Hash</span><span class='rparen'>)</span>
735
+ <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='label'>ttl:</span> <span class='int'>1</span><span class='period'>.</span><span class='id identifier rubyid_hour'>hour</span> <span class='op'>*</span> <span class='int'>1000</span><span class='comma'>,</span> <span class='label'>force:</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='label'>as_entry:</span> <span class='kw'>false</span><span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
736
+
737
+ <span class='comment'># Sanitize options.
738
+ </span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='id identifier rubyid_sanitize_options'>sanitize_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
739
+
740
+ <span class='comment'># Wrap the final key to ensure we don't have colliding namespaces.
741
+ </span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:complete_key</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:prefix</span><span class='rbracket'>]</span><span class='rbrace'>}</span><span class='tstring_content'>[</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:key</span><span class='rbracket'>]</span><span class='rbrace'>}</span><span class='tstring_content'>]</span><span class='tstring_end'>&quot;</span></span>
742
+
743
+ <span class='comment'># Compute the hash key used for referencing this value.
744
+ </span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:hash</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='op'>::</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Entry</span><span class='period'>.</span><span class='id identifier rubyid_hashify_key'>hashify_key</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:complete_key</span><span class='rbracket'>]</span><span class='rparen'>)</span>
745
+
746
+ <span class='id identifier rubyid_options'>options</span>
747
+ <span class='kw'>end</span>
748
+
749
+ <span class='id identifier rubyid_private'>private</span>
750
+ <span class='comment'># Computes a new value and saves it to the cache.
751
+ </span> <span class='comment'>#
752
+ </span> <span class='comment'># @param options [Hash] A list of options for managing the value.
753
+ </span> <span class='comment'># @param block [Proc] The block to run to compute the value.
754
+ </span> <span class='comment'># @return [Object|Entry] The new value.
755
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_compute_value'>compute_value</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
756
+ <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
757
+ <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Entry</span><span class='period'>.</span><span class='id identifier rubyid_ensure'>ensure</span><span class='lparen'>(</span><span class='id identifier rubyid_rv'>rv</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:complete_key</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span> <span class='comment'># Make sure is an entry
758
+ </span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_rv'>rv</span><span class='period'>.</span><span class='id identifier rubyid_hash'>hash</span><span class='comma'>,</span> <span class='id identifier rubyid_rv'>rv</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_rv'>rv</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span> <span class='op'>&gt;</span> <span class='int'>0</span> <span class='comment'># We have a value and we have to store it
759
+ </span> <span class='id identifier rubyid_rv'>rv</span>
760
+ <span class='kw'>end</span>
761
+
762
+ <span class='comment'># Sanitizes options for safe usage.
763
+ </span> <span class='comment'>#
764
+ </span> <span class='comment'># @param options [Object] An initial setup.
765
+ </span> <span class='comment'># @param key [String] The key to associate to this options.
766
+ </span> <span class='comment'># @return [Hash] An options hash.
767
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_sanitize_options'>sanitize_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
768
+ <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:key</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_ensure_string'>ensure_string</span>
769
+ <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>?</span> <span class='int'>1</span><span class='period'>.</span><span class='id identifier rubyid_hour'>hour</span> <span class='op'>*</span> <span class='int'>1000</span> <span class='op'>:</span> <span class='lbracket'>[</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_integer'>to_integer</span><span class='comma'>,</span> <span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_max'>max</span>
770
+ <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:force</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:force</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_boolean'>to_boolean</span>
771
+ <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:prefix</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:prefix</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>?</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:prefix</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_prefix'>prefix</span>
772
+ <span class='id identifier rubyid_options'>options</span>
773
+ <span class='kw'>end</span>
774
+
775
+ <span class='comment'># Choose a backend to use.
776
+ </span> <span class='comment'>#
777
+ </span> <span class='comment'># @param options [Backends::Base|Hash] The backend to use. Defaults to the current backend.
778
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
779
+ <span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_symbolize_keys'>symbolize_keys</span><span class='lbracket'>[</span><span class='symbol'>:backend</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
780
+ <span class='id identifier rubyid_backend'>backend</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Backends</span><span class='op'>::</span><span class='const'>Base</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>:</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_backend'>backend</span>
781
+ <span class='kw'>end</span>
782
+ <span class='kw'>end</span></pre>
783
+ </td>
784
+ </tr>
785
+ </table>
786
+ </div>
374
787
 
375
- <div class="method_details first">
376
- <h3 class="signature first" id="default_prefix-class_method">
788
+
789
+ <span id="prefix=-instance_method"></span>
790
+ <div class="method_details ">
791
+ <h3 class="signature " id="prefix-instance_method">
377
792
 
378
- + (<tt>String</tt>) <strong>default_prefix</strong>
793
+ - (<tt>String</tt>) <strong>prefix</strong>
379
794
 
380
795
 
381
796
 
@@ -383,7 +798,7 @@
383
798
 
384
799
  </h3><div class="docstring">
385
800
  <div class="discussion">
386
- <p>Returns the default prefix for cache entries.</p>
801
+ <p>The default prefix for cache entries.</p>
387
802
 
388
803
 
389
804
  </div>
@@ -414,25 +829,340 @@
414
829
  <pre class="lines">
415
830
 
416
831
 
832
+ 14
833
+ 15
834
+ 16
835
+ 17
836
+ 18
837
+ 19
838
+ 20
839
+ 21
840
+ 22
841
+ 23
842
+ 24
843
+ 25
844
+ 26
845
+ 27
846
+ 28
847
+ 29
848
+ 30
849
+ 31
850
+ 32
851
+ 33
852
+ 34
853
+ 35
854
+ 36
855
+ 37
856
+ 38
857
+ 39
858
+ 40
859
+ 41
860
+ 42
861
+ 43
862
+ 44
863
+ 45
864
+ 46
865
+ 47
866
+ 48
867
+ 49
868
+ 50
869
+ 51
870
+ 52
871
+ 53
872
+ 54
873
+ 55
874
+ 56
875
+ 57
876
+ 58
877
+ 59
878
+ 60
879
+ 61
880
+ 62
881
+ 63
882
+ 64
883
+ 65
884
+ 66
885
+ 67
886
+ 68
887
+ 69
888
+ 70
889
+ 71
890
+ 72
891
+ 73
892
+ 74
893
+ 75
894
+ 76
895
+ 77
896
+ 78
897
+ 79
898
+ 80
899
+ 81
900
+ 82
901
+ 83
902
+ 84
903
+ 85
904
+ 86
905
+ 87
906
+ 88
907
+ 89
908
+ 90
909
+ 91
910
+ 92
911
+ 93
912
+ 94
417
913
  95
418
914
  96
419
- 97</pre>
915
+ 97
916
+ 98
917
+ 99
918
+ 100
919
+ 101
920
+ 102
921
+ 103
922
+ 104
923
+ 105
924
+ 106
925
+ 107
926
+ 108
927
+ 109
928
+ 110
929
+ 111
930
+ 112
931
+ 113
932
+ 114
933
+ 115
934
+ 116
935
+ 117
936
+ 118
937
+ 119
938
+ 120
939
+ 121
940
+ 122
941
+ 123
942
+ 124
943
+ 125
944
+ 126
945
+ 127
946
+ 128
947
+ 129
948
+ 130
949
+ 131
950
+ 132
951
+ 133
952
+ 134
953
+ 135
954
+ 136
955
+ 137
956
+ 138
957
+ 139
958
+ 140
959
+ 141
960
+ 142
961
+ 143
962
+ 144
963
+ 145
964
+ 146
965
+ 147
966
+ 148
967
+ 149
968
+ 150
969
+ 151
970
+ 152
971
+ 153
972
+ 154
973
+ 155
974
+ 156
975
+ 157
976
+ 158
977
+ 159
978
+ 160
979
+ 161
980
+ 162
981
+ 163
982
+ 164
983
+ 165
984
+ 166
985
+ 167
986
+ 168
987
+ 169
988
+ 170</pre>
420
989
  </td>
421
990
  <td>
422
- <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 95</span>
423
-
424
- <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_default_prefix'>default_prefix</span>
425
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>elephas-</span><span class='embexpr_beg'>#{</span><span class='op'>::</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Version</span><span class='op'>::</span><span class='const'>STRING</span><span class='rbrace'>}</span><span class='tstring_content'>-cache</span><span class='tstring_end'>&quot;</span></span>
991
+ <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 14</span>
992
+
993
+ <span class='kw'>class</span> <span class='const'>Cache</span>
994
+ <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:backend</span>
995
+ <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:prefix</span>
996
+
997
+ <span class='comment'># Initialize the cache.
998
+ </span> <span class='comment'>#
999
+ </span> <span class='comment'># @param backend [Backends::Base] The backend to use. By default uses an Hash backend.
1000
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
1001
+ <span class='ivar'>@backend</span> <span class='op'>=</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>||</span> <span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Backends</span><span class='op'>::</span><span class='const'>Hash</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
1002
+ <span class='ivar'>@prefix</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>elephas-</span><span class='embexpr_beg'>#{</span><span class='op'>::</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Version</span><span class='op'>::</span><span class='const'>STRING</span><span class='rbrace'>}</span><span class='tstring_content'>-cache</span><span class='tstring_end'>&quot;</span></span>
1003
+ <span class='kw'>end</span>
1004
+
1005
+ <span class='comment'># This is the main method of the framework.
1006
+ </span> <span class='comment'>#
1007
+ </span> <span class='comment'># It tries reading a key from the cache.
1008
+ </span> <span class='comment'>#
1009
+ </span> <span class='comment'># If it doesn't find it, it uses the provided block (which receives options as argument) to compute its value and then store it into the cache for later usages.
1010
+ </span> <span class='comment'>#
1011
+ </span> <span class='comment'># ```ruby
1012
+ </span> <span class='comment'># cache = Elephas::Cache.new(Elephas::Backends::Hash.new)
1013
+ </span> <span class='comment'>#
1014
+ </span> <span class='comment'># value = cache.use(&quot;KEY&quot;) do |options|
1015
+ </span> <span class='comment'># &quot;VALUE&quot;
1016
+ </span> <span class='comment'># end
1017
+ </span> <span class='comment'>#
1018
+ </span> <span class='comment'># value
1019
+ </span> <span class='comment'># # =&gt; &quot;VALUE&quot;
1020
+ </span> <span class='comment'>#
1021
+ </span> <span class='comment'># value = cache.use(&quot;KEY&quot;) do |options|
1022
+ </span> <span class='comment'># &quot;ANOTHER VALUE&quot;
1023
+ </span> <span class='comment'># end
1024
+ </span> <span class='comment'>#
1025
+ </span> <span class='comment'># value
1026
+ </span> <span class='comment'># # =&gt; &quot;VALUE&quot;
1027
+ </span> <span class='comment'># ```
1028
+ </span> <span class='comment'>#
1029
+ </span> <span class='comment'># @param key [String] The key to lookup.
1030
+ </span> <span class='comment'># @param options [Hash] A list of options for managing this key.
1031
+ </span> <span class='comment'># @param block [Proc] An optional block to run to compute the value for the key if nothing is found.
1032
+ </span> <span class='comment'># @return [Object|Entry] The found or newly-set value associated to the key.
1033
+ </span> <span class='comment'># @see .setup_options
1034
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_use'>use</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1035
+ <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='kw'>nil</span>
1036
+
1037
+ <span class='comment'># Get options
1038
+ </span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1039
+
1040
+ <span class='comment'># Check if the storage has the value (if we don't have to skip the cache)
1041
+ </span> <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:hash</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:force</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>false</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span> <span class='op'>&gt;</span> <span class='int'>0</span>
1042
+ <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='id identifier rubyid_compute_value'>compute_value</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_rv'>rv</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_block'>block</span> <span class='comment'># Try to compute the value from the block
1043
+ </span>
1044
+ <span class='comment'># Return value
1045
+ </span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:as_entry</span><span class='rbracket'>]</span> <span class='op'>?</span> <span class='id identifier rubyid_rv'>rv</span> <span class='op'>:</span> <span class='id identifier rubyid_rv'>rv</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span>
1046
+ <span class='kw'>end</span>
1047
+
1048
+ <span class='comment'># Reads a value from the cache.
1049
+ </span> <span class='comment'>#
1050
+ </span> <span class='comment'># @param key [String] The key to lookup.
1051
+ </span> <span class='comment'># @param backend [Backends::Base|NilClass] The backend to use. Defaults to the current backend.
1052
+ </span> <span class='comment'># @return [Object|NilClass] The read value or `nil`.
1053
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
1054
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='label'>backend:</span> <span class='id identifier rubyid_backend'>backend</span><span class='rbrace'>}</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1055
+ <span class='kw'>end</span>
1056
+
1057
+ <span class='comment'># Writes a value to the cache.
1058
+ </span> <span class='comment'>#
1059
+ </span> <span class='comment'># @param key [String] The key to associate the value with.
1060
+ </span> <span class='comment'># @param value [Object] The value to write. Setting a value to `nil` **doesn't** mean *deleting* the value.
1061
+ </span> <span class='comment'># @param options [Hash] A list of options for writing.
1062
+ </span> <span class='comment'># @see .setup_options
1063
+ </span> <span class='comment'># @return [Object] The value itself.
1064
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
1065
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span><span class='rparen'>)</span>
1066
+ <span class='kw'>end</span>
1067
+
1068
+ <span class='comment'># Deletes a value from the cache.
1069
+ </span> <span class='comment'>#
1070
+ </span> <span class='comment'># @param key [String] The key to delete.
1071
+ </span> <span class='comment'># @param backend [Backends::Base|NilClass] The backend to use. Defaults to the current backend.
1072
+ </span> <span class='comment'># @return [Boolean] `true` if the key was in the cache, `false` otherwise.
1073
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
1074
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='label'>backend:</span> <span class='id identifier rubyid_backend'>backend</span><span class='rbrace'>}</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1075
+ <span class='kw'>end</span>
1076
+
1077
+ <span class='comment'># Checks if a key exists in the cache.
1078
+ </span> <span class='comment'>#
1079
+ </span> <span class='comment'># @param key [String] The key to lookup.
1080
+ </span> <span class='comment'># @param backend [Backends::Base|NilClass] The backend to use. Defaults to the current backend.
1081
+ </span> <span class='comment'># @return [Boolean] `true` if the key is in the cache, `false` otherwise.
1082
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_exists?'>exists?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
1083
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='label'>backend:</span> <span class='id identifier rubyid_backend'>backend</span><span class='rbrace'>}</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_exists?'>exists?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1084
+ <span class='kw'>end</span>
1085
+
1086
+ <span class='comment'># Setups options for use into the framework.
1087
+ </span> <span class='comment'># Valid options are:
1088
+ </span> <span class='comment'>#
1089
+ </span> <span class='comment'># * **:ttl**: The TTL (time to live, in milliseconds) of the entry. It means how long will the value stay in cache. Setting it to 0 or less means never cache the entry.
1090
+ </span> <span class='comment'># * **:force**: Setting it to `true` will always skip the cache.
1091
+ </span> <span class='comment'># * **:key**: The key associated to this value. **You should never set this option directly.**
1092
+ </span> <span class='comment'># * **:prefix**: The prefix used in cache. This is used to avoid conflicts with other caching frameworks.
1093
+ </span> <span class='comment'># * **:complete_key**: The complete key used for computing the hash. By default is concatenation of `:key` and `:prefix` options.
1094
+ </span> <span class='comment'># * **:hash**: The hash used to store the key in the cache. Should be unique
1095
+ </span> <span class='comment'># * **:as_entry**: In `Elephas::Cache.use`, setting this to `true` will return the entire `Entry` object rather than the value only.
1096
+ </span> <span class='comment'>#
1097
+ </span> <span class='comment'># @param options [Object] An initial setup.
1098
+ </span> <span class='comment'># @param key [String] The key to associate to this options.
1099
+ </span> <span class='comment'># @return [Hash] An options hash.
1100
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1101
+ <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Hash</span><span class='rparen'>)</span>
1102
+ <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='label'>ttl:</span> <span class='int'>1</span><span class='period'>.</span><span class='id identifier rubyid_hour'>hour</span> <span class='op'>*</span> <span class='int'>1000</span><span class='comma'>,</span> <span class='label'>force:</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='label'>as_entry:</span> <span class='kw'>false</span><span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1103
+
1104
+ <span class='comment'># Sanitize options.
1105
+ </span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='id identifier rubyid_sanitize_options'>sanitize_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1106
+
1107
+ <span class='comment'># Wrap the final key to ensure we don't have colliding namespaces.
1108
+ </span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:complete_key</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:prefix</span><span class='rbracket'>]</span><span class='rbrace'>}</span><span class='tstring_content'>[</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:key</span><span class='rbracket'>]</span><span class='rbrace'>}</span><span class='tstring_content'>]</span><span class='tstring_end'>&quot;</span></span>
1109
+
1110
+ <span class='comment'># Compute the hash key used for referencing this value.
1111
+ </span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:hash</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='op'>::</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Entry</span><span class='period'>.</span><span class='id identifier rubyid_hashify_key'>hashify_key</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:complete_key</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1112
+
1113
+ <span class='id identifier rubyid_options'>options</span>
1114
+ <span class='kw'>end</span>
1115
+
1116
+ <span class='id identifier rubyid_private'>private</span>
1117
+ <span class='comment'># Computes a new value and saves it to the cache.
1118
+ </span> <span class='comment'>#
1119
+ </span> <span class='comment'># @param options [Hash] A list of options for managing the value.
1120
+ </span> <span class='comment'># @param block [Proc] The block to run to compute the value.
1121
+ </span> <span class='comment'># @return [Object|Entry] The new value.
1122
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_compute_value'>compute_value</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1123
+ <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1124
+ <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Entry</span><span class='period'>.</span><span class='id identifier rubyid_ensure'>ensure</span><span class='lparen'>(</span><span class='id identifier rubyid_rv'>rv</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:complete_key</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span> <span class='comment'># Make sure is an entry
1125
+ </span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_rv'>rv</span><span class='period'>.</span><span class='id identifier rubyid_hash'>hash</span><span class='comma'>,</span> <span class='id identifier rubyid_rv'>rv</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_rv'>rv</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span> <span class='op'>&gt;</span> <span class='int'>0</span> <span class='comment'># We have a value and we have to store it
1126
+ </span> <span class='id identifier rubyid_rv'>rv</span>
1127
+ <span class='kw'>end</span>
1128
+
1129
+ <span class='comment'># Sanitizes options for safe usage.
1130
+ </span> <span class='comment'>#
1131
+ </span> <span class='comment'># @param options [Object] An initial setup.
1132
+ </span> <span class='comment'># @param key [String] The key to associate to this options.
1133
+ </span> <span class='comment'># @return [Hash] An options hash.
1134
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_sanitize_options'>sanitize_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1135
+ <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:key</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_ensure_string'>ensure_string</span>
1136
+ <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>?</span> <span class='int'>1</span><span class='period'>.</span><span class='id identifier rubyid_hour'>hour</span> <span class='op'>*</span> <span class='int'>1000</span> <span class='op'>:</span> <span class='lbracket'>[</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_integer'>to_integer</span><span class='comma'>,</span> <span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_max'>max</span>
1137
+ <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:force</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:force</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_boolean'>to_boolean</span>
1138
+ <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:prefix</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:prefix</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>?</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:prefix</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_prefix'>prefix</span>
1139
+ <span class='id identifier rubyid_options'>options</span>
1140
+ <span class='kw'>end</span>
1141
+
1142
+ <span class='comment'># Choose a backend to use.
1143
+ </span> <span class='comment'>#
1144
+ </span> <span class='comment'># @param options [Backends::Base|Hash] The backend to use. Defaults to the current backend.
1145
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1146
+ <span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_symbolize_keys'>symbolize_keys</span><span class='lbracket'>[</span><span class='symbol'>:backend</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1147
+ <span class='id identifier rubyid_backend'>backend</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Backends</span><span class='op'>::</span><span class='const'>Base</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>:</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_backend'>backend</span>
1148
+ <span class='kw'>end</span>
426
1149
  <span class='kw'>end</span></pre>
427
1150
  </td>
428
1151
  </tr>
429
1152
  </table>
430
1153
  </div>
431
1154
 
432
- <div class="method_details ">
433
- <h3 class="signature " id="delete-class_method">
1155
+ </div>
1156
+
1157
+
1158
+ <div id="instance_method_details" class="method_details_list">
1159
+ <h2>Instance Method Details</h2>
1160
+
1161
+
1162
+ <div class="method_details first">
1163
+ <h3 class="signature first" id="delete-instance_method">
434
1164
 
435
- + (<tt>Boolean</tt>) <strong>delete</strong>(key)
1165
+ - (<tt>Boolean</tt>) <strong>delete</strong>(key, backend = nil)
436
1166
 
437
1167
 
438
1168
 
@@ -464,6 +1194,23 @@
464
1194
 
465
1195
  </li>
466
1196
 
1197
+ <li>
1198
+
1199
+ <span class='name'>backend</span>
1200
+
1201
+
1202
+ <span class='type'>(<tt><span class='object_link'><a href="Backends/Base.html" title="Elephas::Backends::Base (class)">Backends::Base</a></span>|NilClass</tt>)</span>
1203
+
1204
+
1205
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
1206
+
1207
+
1208
+ &mdash;
1209
+ <div class='inline'><p>The backend to use. Defaults to the current backend.</p>
1210
+ </div>
1211
+
1212
+ </li>
1213
+
467
1214
  </ul>
468
1215
 
469
1216
  <p class="tag_title">Returns:</p>
@@ -490,15 +1237,15 @@
490
1237
  <pre class="lines">
491
1238
 
492
1239
 
493
- 80
494
- 81
495
- 82</pre>
1240
+ 94
1241
+ 95
1242
+ 96</pre>
496
1243
  </td>
497
1244
  <td>
498
- <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 80</span>
1245
+ <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 94</span>
499
1246
 
500
- <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
501
- <span class='ivar'>@provider</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1247
+ <span class='kw'>def</span> <span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
1248
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='label'>backend:</span> <span class='id identifier rubyid_backend'>backend</span><span class='rbrace'>}</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
502
1249
  <span class='kw'>end</span></pre>
503
1250
  </td>
504
1251
  </tr>
@@ -506,9 +1253,9 @@
506
1253
  </div>
507
1254
 
508
1255
  <div class="method_details ">
509
- <h3 class="signature " id="exists?-class_method">
1256
+ <h3 class="signature " id="exists?-instance_method">
510
1257
 
511
- + (<tt>Boolean</tt>) <strong>exists?</strong>(key)
1258
+ - (<tt>Boolean</tt>) <strong>exists?</strong>(key, backend = nil)
512
1259
 
513
1260
 
514
1261
 
@@ -540,6 +1287,23 @@
540
1287
 
541
1288
  </li>
542
1289
 
1290
+ <li>
1291
+
1292
+ <span class='name'>backend</span>
1293
+
1294
+
1295
+ <span class='type'>(<tt><span class='object_link'><a href="Backends/Base.html" title="Elephas::Backends::Base (class)">Backends::Base</a></span>|NilClass</tt>)</span>
1296
+
1297
+
1298
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
1299
+
1300
+
1301
+ &mdash;
1302
+ <div class='inline'><p>The backend to use. Defaults to the current backend.</p>
1303
+ </div>
1304
+
1305
+ </li>
1306
+
543
1307
  </ul>
544
1308
 
545
1309
  <p class="tag_title">Returns:</p>
@@ -566,15 +1330,15 @@
566
1330
  <pre class="lines">
567
1331
 
568
1332
 
569
- 88
570
- 89
571
- 90</pre>
1333
+ 103
1334
+ 104
1335
+ 105</pre>
572
1336
  </td>
573
1337
  <td>
574
- <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 88</span>
1338
+ <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 103</span>
575
1339
 
576
- <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_exists?'>exists?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
577
- <span class='ivar'>@provider</span><span class='period'>.</span><span class='id identifier rubyid_exists?'>exists?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1340
+ <span class='kw'>def</span> <span class='id identifier rubyid_exists?'>exists?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
1341
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='label'>backend:</span> <span class='id identifier rubyid_backend'>backend</span><span class='rbrace'>}</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_exists?'>exists?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
578
1342
  <span class='kw'>end</span></pre>
579
1343
  </td>
580
1344
  </tr>
@@ -582,9 +1346,9 @@
582
1346
  </div>
583
1347
 
584
1348
  <div class="method_details ">
585
- <h3 class="signature " id="read-class_method">
1349
+ <h3 class="signature " id="read-instance_method">
586
1350
 
587
- + (<tt>Object|NilClass</tt>) <strong>read</strong>(key)
1351
+ - (<tt>Object|NilClass</tt>) <strong>read</strong>(key, backend = nil)
588
1352
 
589
1353
 
590
1354
 
@@ -616,6 +1380,23 @@
616
1380
 
617
1381
  </li>
618
1382
 
1383
+ <li>
1384
+
1385
+ <span class='name'>backend</span>
1386
+
1387
+
1388
+ <span class='type'>(<tt><span class='object_link'><a href="Backends/Base.html" title="Elephas::Backends::Base (class)">Backends::Base</a></span>|NilClass</tt>)</span>
1389
+
1390
+
1391
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
1392
+
1393
+
1394
+ &mdash;
1395
+ <div class='inline'><p>The backend to use. Defaults to the current backend.</p>
1396
+ </div>
1397
+
1398
+ </li>
1399
+
619
1400
  </ul>
620
1401
 
621
1402
  <p class="tag_title">Returns:</p>
@@ -642,15 +1423,15 @@
642
1423
  <pre class="lines">
643
1424
 
644
1425
 
645
- 61
646
- 62
647
- 63</pre>
1426
+ 74
1427
+ 75
1428
+ 76</pre>
648
1429
  </td>
649
1430
  <td>
650
- <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 61</span>
1431
+ <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 74</span>
651
1432
 
652
- <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
653
- <span class='ivar'>@provider</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1433
+ <span class='kw'>def</span> <span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_backend'>backend</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
1434
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='label'>backend:</span> <span class='id identifier rubyid_backend'>backend</span><span class='rbrace'>}</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
654
1435
  <span class='kw'>end</span></pre>
655
1436
  </td>
656
1437
  </tr>
@@ -658,9 +1439,9 @@
658
1439
  </div>
659
1440
 
660
1441
  <div class="method_details ">
661
- <h3 class="signature " id="setup_options-class_method">
1442
+ <h3 class="signature " id="setup_options-instance_method">
662
1443
 
663
- + (<tt>Hash</tt>) <strong>setup_options</strong>(options, key)
1444
+ - (<tt>Hash</tt>) <strong>setup_options</strong>(options, key)
664
1445
 
665
1446
 
666
1447
 
@@ -744,26 +1525,26 @@ Valid options are:</p>
744
1525
  <pre class="lines">
745
1526
 
746
1527
 
747
- 113
748
- 114
749
- 115
750
- 116
751
- 117
752
- 118
753
- 119
754
- 120
755
1528
  121
756
1529
  122
757
1530
  123
758
1531
  124
759
1532
  125
760
1533
  126
761
- 127</pre>
1534
+ 127
1535
+ 128
1536
+ 129
1537
+ 130
1538
+ 131
1539
+ 132
1540
+ 133
1541
+ 134
1542
+ 135</pre>
762
1543
  </td>
763
1544
  <td>
764
- <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 113</span>
1545
+ <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 121</span>
765
1546
 
766
- <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1547
+ <span class='kw'>def</span> <span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
767
1548
  <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Hash</span><span class='rparen'>)</span>
768
1549
  <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='label'>ttl:</span> <span class='int'>1</span><span class='period'>.</span><span class='id identifier rubyid_hour'>hour</span> <span class='op'>*</span> <span class='int'>1000</span><span class='comma'>,</span> <span class='label'>force:</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='label'>as_entry:</span> <span class='kw'>false</span><span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
769
1550
 
@@ -784,9 +1565,9 @@ Valid options are:</p>
784
1565
  </div>
785
1566
 
786
1567
  <div class="method_details ">
787
- <h3 class="signature " id="use-class_method">
1568
+ <h3 class="signature " id="use-instance_method">
788
1569
 
789
- + (<tt>Object|<span class='object_link'><a href="Entry.html" title="Elephas::Entry (class)">Entry</a></span></tt>) <strong>use</strong>(key, options = {}, &amp;block)
1570
+ - (<tt>Object|<span class='object_link'><a href="Entry.html" title="Elephas::Entry (class)">Entry</a></span></tt>) <strong>use</strong>(key, options = {}, &amp;block)
790
1571
 
791
1572
 
792
1573
 
@@ -801,14 +1582,16 @@ Valid options are:</p>
801
1582
  <p>If it doesn&#8217;t find it, it uses the provided block (which receives options as argument) to compute its value and then store it into the cache for later usages.</p>
802
1583
 
803
1584
  <p>```ruby
804
- value = Elephas::Cache.use(&#8220;KEY&#8221;) do |options|
1585
+ cache = Elephas::Cache.new(Elephas::Backends::Hash.new)</p>
1586
+
1587
+ <p>value = cache.use(&#8220;KEY&#8221;) do |options|
805
1588
  &#8220;VALUE&#8221;
806
1589
  end</p>
807
1590
 
808
1591
  <p>value
809
1592
  # =&gt; &#8220;VALUE&#8221;</p>
810
1593
 
811
- <p>value = Elephas::Cache.use(&#8220;KEY&#8221;) do |options|
1594
+ <p>value = cache.use(&#8220;KEY&#8221;) do |options|
812
1595
  &#8220;ANOTHER VALUE&#8221;
813
1596
  end</p>
814
1597
 
@@ -893,7 +1676,7 @@ end</p>
893
1676
  <p class="tag_title">See Also:</p>
894
1677
  <ul class="see">
895
1678
 
896
- <li><span class='object_link'><a href="#setup_options-class_method" title="Elephas::Cache.setup_options (method)">setup_options</a></span></li>
1679
+ <li>setup_options</li>
897
1680
 
898
1681
  </ul>
899
1682
 
@@ -903,31 +1686,31 @@ end</p>
903
1686
  <pre class="lines">
904
1687
 
905
1688
 
906
- 43
907
- 44
908
- 45
909
- 46
910
- 47
911
- 48
912
- 49
913
- 50
914
- 51
915
- 52
916
- 53
917
- 54
918
- 55</pre>
1689
+ 55
1690
+ 56
1691
+ 57
1692
+ 58
1693
+ 59
1694
+ 60
1695
+ 61
1696
+ 62
1697
+ 63
1698
+ 64
1699
+ 65
1700
+ 66
1701
+ 67</pre>
919
1702
  </td>
920
1703
  <td>
921
- <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 43</span>
1704
+ <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 55</span>
922
1705
 
923
- <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_use'>use</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1706
+ <span class='kw'>def</span> <span class='id identifier rubyid_use'>use</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
924
1707
  <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='kw'>nil</span>
925
1708
 
926
1709
  <span class='comment'># Get options
927
- </span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Cache</span><span class='period'>.</span><span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
1710
+ </span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
928
1711
 
929
1712
  <span class='comment'># Check if the storage has the value (if we don't have to skip the cache)
930
- </span> <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='ivar'>@provider</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:hash</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:force</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>false</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span> <span class='op'>&gt;</span> <span class='int'>0</span>
1713
+ </span> <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:hash</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:force</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>false</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:ttl</span><span class='rbracket'>]</span> <span class='op'>&gt;</span> <span class='int'>0</span>
931
1714
  <span class='id identifier rubyid_rv'>rv</span> <span class='op'>=</span> <span class='id identifier rubyid_compute_value'>compute_value</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_rv'>rv</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_block'>block</span> <span class='comment'># Try to compute the value from the block
932
1715
  </span>
933
1716
  <span class='comment'># Return value
@@ -939,9 +1722,9 @@ end</p>
939
1722
  </div>
940
1723
 
941
1724
  <div class="method_details ">
942
- <h3 class="signature " id="write-class_method">
1725
+ <h3 class="signature " id="write-instance_method">
943
1726
 
944
- + (<tt>Object</tt>) <strong>write</strong>(key, value, options = {})
1727
+ - (<tt>Object</tt>) <strong>write</strong>(key, value, options = {})
945
1728
 
946
1729
 
947
1730
 
@@ -1028,7 +1811,7 @@ end</p>
1028
1811
  <p class="tag_title">See Also:</p>
1029
1812
  <ul class="see">
1030
1813
 
1031
- <li><span class='object_link'><a href="#setup_options-class_method" title="Elephas::Cache.setup_options (method)">setup_options</a></span></li>
1814
+ <li>setup_options</li>
1032
1815
 
1033
1816
  </ul>
1034
1817
 
@@ -1038,15 +1821,15 @@ end</p>
1038
1821
  <pre class="lines">
1039
1822
 
1040
1823
 
1041
- 72
1042
- 73
1043
- 74</pre>
1824
+ 85
1825
+ 86
1826
+ 87</pre>
1044
1827
  </td>
1045
1828
  <td>
1046
- <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 72</span>
1829
+ <pre class="code"><span class="info file"># File 'lib/elephas/cache.rb', line 85</span>
1047
1830
 
1048
- <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
1049
- <span class='ivar'>@provider</span><span class='period'>.</span><span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='op'>::</span><span class='const'>Elephas</span><span class='op'>::</span><span class='const'>Cache</span><span class='period'>.</span><span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span><span class='rparen'>)</span>
1831
+ <span class='kw'>def</span> <span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
1832
+ <span class='id identifier rubyid_choose_backend'>choose_backend</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_setup_options'>setup_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span><span class='rparen'>)</span>
1050
1833
  <span class='kw'>end</span></pre>
1051
1834
  </td>
1052
1835
  </tr>
@@ -1058,7 +1841,7 @@ end</p>
1058
1841
  </div>
1059
1842
 
1060
1843
  <div id="footer">
1061
- Generated on Thu Feb 28 10:48:18 2013 by
1844
+ Generated on Sun Mar 24 12:12:02 2013 by
1062
1845
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1063
1846
  0.8.5.2 (ruby-1.9.3).
1064
1847
  </div>