sadie 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG ADDED
@@ -0,0 +1 @@
1
+ Up to v0.0.6: getting it all working
data/lib/sadie/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # this file sets the version of the Sadie gem
3
3
 
4
4
  class Sadie
5
- VERSION = "0.0.6"
5
+ VERSION = "0.0.7"
6
6
  end
data/lib/sadie.rb CHANGED
@@ -39,6 +39,7 @@ class Sadie
39
39
  @shortterm = Hash.new
40
40
  @flag_expensive = Hash.new
41
41
  @flag_primed = Hash.new
42
+ @flag_eachtimeprime = Hash.new
42
43
 
43
44
  # init class
44
45
  Sadie::_checkSanity
@@ -136,18 +137,44 @@ class Sadie
136
137
  # completely behind-the-scenes as directed by the resource (.res) files
137
138
  def get( k )
138
139
 
140
+ # if it's already set, return known answer
141
+ if _isset?( k )
142
+
143
+ # _get the return value
144
+ return_value = _get( k )
145
+
146
+ # unset and unprime if destructOnGet?
147
+ if destructOnGet?( k )
148
+ # puts "destructing #{k}"
149
+ unset( k )
150
+ unprime( k )
151
+ end
152
+
153
+ return return_value
154
+ end
155
+
139
156
  # prime if not yet primed
140
157
  primed?( k ) \
141
158
  or _prime( k )
142
159
 
143
160
  # if not expensive, then return what's already known
144
161
  expensive?( k ) \
145
- or return _get( k )
162
+ and return _recallExpensive( k )
146
163
 
147
- # expensive, so recall from file
148
- return _recallExpensive( k )
164
+ # _get the return value
165
+ return_value = _get( k )
166
+
167
+ # unset and unprime if destructOnGet?
168
+ if destructOnGet?( k )
169
+ # puts "destructing #{k}"
170
+ unset( k )
171
+ unprime( k )
172
+ end
173
+
174
+ return return_value
149
175
  end
150
176
 
177
+
151
178
  # ==method: setCheap
152
179
  #
153
180
  # the expensive setter. key, value pairs stored via this method are not kept in memory
@@ -162,6 +189,58 @@ class Sadie
162
189
  _primed( k, true )
163
190
  end
164
191
 
192
+ # ==method: setDestructOnGet
193
+ #
194
+ # key value will go away and key will be unprimed and unset after next get
195
+ #
196
+ # NOTE: this doesn't make sense with keys that were set via setExpensive
197
+ # so it can be set, but nothing's going to happen differently
198
+ def setDestructOnGet( key, turnon=true )
199
+ # puts "setDestructOnGet( #{key}, #{turnon} )"
200
+ if ( turnon )
201
+ # puts "turning on destructOnGet for key: #{key}"
202
+ @flag_eachtimeprime["#{key}"] = true
203
+ return true
204
+ end
205
+ @flag_eachtimeprime.has_key?( key ) \
206
+ and @flag_eachtimeprime.delete( key )
207
+ end
208
+
209
+ # ==method: destructOnGet?
210
+ #
211
+ # returns true if the destructOnGet flag is set for the key
212
+ def destructOnGet?( key )
213
+ # print "destructOnGet?> key #{key} "
214
+ @flag_eachtimeprime.has_key?( key ) \
215
+ or return _newline( false )
216
+ # print " defined-in-eachtimeprime "
217
+ @flag_eachtimeprime["#{key}"] \
218
+ and return _newline( true )
219
+ # print " defined-but-false "
220
+ return _newline(false)
221
+ end
222
+
223
+ def _newline( rval=true )
224
+ #puts
225
+ return rval
226
+ end
227
+
228
+ # ==method: unset
229
+ # unsets the value of k. Note that this does not unprime, so
230
+ # get(key) will simply return nil. Run with unprime to have the
231
+ # primer run again
232
+ def unset( key )
233
+ _unset( key )
234
+ end
235
+
236
+ # ==method: unprime
237
+ # unprimes k. Note that this does not unset the value, so
238
+ # get(key) will continue to return whatever it otherwise would have.
239
+ # run unset as well to have the primer run again.
240
+ def unprime( key )
241
+ _primed( key, false )
242
+ end
243
+
165
244
  # ==method: set
166
245
  # alias for setCheap(k,v)
167
246
  def set( k, v )
@@ -171,7 +250,7 @@ class Sadie
171
250
  # ==method: setCheap
172
251
  #
173
252
  # the cheap setter. key, value pairs stored via this method are kept in memory
174
- def setCheap(k,v)
253
+ def setCheap( k, v )
175
254
 
176
255
  # set it, mark not expensive and primed
177
256
  _set( k, v )
@@ -217,7 +296,9 @@ class Sadie
217
296
  # INTERNAL: this method should only be called the the class method, Prime
218
297
  #
219
298
  def primed?( k )
220
- @flag_primed[:"#{k}"] \
299
+ @flag_primed.has_key?( k ) \
300
+ or return false
301
+ @flag_primed["#{k}"] \
221
302
  and return true
222
303
  return false
223
304
  end
@@ -227,7 +308,8 @@ class Sadie
227
308
  # INTERNAL: this method should only be called the the class method, Prime
228
309
  #
229
310
  def expensive?( k )
230
- @flag_expensive[:"#{k}"] \
311
+ @flag_expensive.has_key?( k ) or return false;
312
+ @flag_expensive["#{k}"] \
231
313
  and return true
232
314
  return false
233
315
  end
@@ -238,12 +320,22 @@ class Sadie
238
320
 
239
321
 
240
322
  def _prime ( k )
323
+ # puts "_prime( #{k} )"
324
+ # fetch primers dirpath and validate the primer hash
241
325
  primer_dirpath = _get("sadie.primers_dirpath")
242
- if primer_filepath = @@primer_hash["#{primer_dirpath}"]["#{k}"]
326
+ @@primer_hash.has_key?(primer_dirpath) \
327
+ or @@primer_hash[primer_dirpath] = Hash.new
328
+
329
+ primers = @@primer_hash[primer_dirpath]
330
+ primers.has_key?( k ) or return true
331
+
332
+ if primer_filepath = primers[k]
333
+ # puts "loading filepath: #{primer_filepath}"
243
334
  Sadie::_setCurrentPrimerFilepath(primer_filepath)
244
335
  Sadie::_setCurrentSadieInstance( self )
245
336
  load primer_filepath
246
337
  end
338
+ return true
247
339
 
248
340
  end
249
341
 
@@ -344,7 +436,7 @@ class Sadie
344
436
 
345
437
  def _primed( k, isprimed )
346
438
  if isprimed
347
- @flag_primed[:"#{k}"] = true
439
+ @flag_primed["#{k}"] = true
348
440
  return
349
441
  end
350
442
  @flag_primed.delete( k )
@@ -352,7 +444,7 @@ class Sadie
352
444
 
353
445
  def _expensive( k, isexpensive )
354
446
  if isexpensive
355
- @flag_expensive[:"#{k}"] = true
447
+ @flag_expensive["#{k}"] = true
356
448
  return
357
449
  end
358
450
  @flag_expensive.delete( k )
@@ -360,7 +452,7 @@ class Sadie
360
452
 
361
453
  # direct access getter for shortterm memory
362
454
  def _get( key )
363
- value = @shortterm[:"#{key}"]
455
+ value = @shortterm["#{key}"]
364
456
  #puts "_get(#{key})> #{value}"
365
457
  return value
366
458
  end
@@ -369,7 +461,16 @@ class Sadie
369
461
  def _set( key, value )
370
462
 
371
463
  # puts "_set> key: #{key}, value: #{value}"
372
- @shortterm[:"#{key}"] = value
464
+ @shortterm["#{key}"] = value
465
+ end
466
+
467
+ def _unset( key )
468
+ @shortterm.has_key?( key ) \
469
+ and @shortterm.delete( key )
470
+ end
471
+
472
+ def _isset?( key )
473
+ return @shortterm.has_key?( key )
373
474
  end
374
475
 
375
476
  # init given path to session file
@@ -429,7 +530,7 @@ class Sadie
429
530
 
430
531
  def self._memorizePrimerLocation( filepath, primer_provides )
431
532
  primer_dirpath = @@mid_primer_toplevel_primer_dirpath
432
- @@primer_hash.has_key?(primer_dirpath) \
533
+ @@primer_hash.has_key?( primer_dirpath ) \
433
534
  or @@primer_hash["#{primer_dirpath}"] = Hash.new
434
535
  primer_provides.each do | key |
435
536
  Sadie::_setPrimerProvider( key, filepath )
@@ -103,14 +103,21 @@ the sadie constructor
103
103
 
104
104
  <div class="name-list">
105
105
  <a href="#M000003">Prime</a>&nbsp;&nbsp;
106
+ <a href="#M000008">_newline</a>&nbsp;&nbsp;
107
+ <a href="#M000007">destructOnGet?</a>&nbsp;&nbsp;
108
+ <a href="#M000016">expensive?</a>&nbsp;&nbsp;
106
109
  <a href="#M000004">get</a>&nbsp;&nbsp;
107
110
  <a href="#M000002">getSadieInstance</a>&nbsp;&nbsp;
108
111
  <a href="#M000001">new</a>&nbsp;&nbsp;
109
- <a href="#M000009">revert!</a>&nbsp;&nbsp;
110
- <a href="#M000008">save</a>&nbsp;&nbsp;
111
- <a href="#M000006">set</a>&nbsp;&nbsp;
112
- <a href="#M000007">setCheap</a>&nbsp;&nbsp;
112
+ <a href="#M000015">primed?</a>&nbsp;&nbsp;
113
+ <a href="#M000014">revert!</a>&nbsp;&nbsp;
114
+ <a href="#M000013">save</a>&nbsp;&nbsp;
115
+ <a href="#M000011">set</a>&nbsp;&nbsp;
116
+ <a href="#M000012">setCheap</a>&nbsp;&nbsp;
117
+ <a href="#M000006">setDestructOnGet</a>&nbsp;&nbsp;
113
118
  <a href="#M000005">setExpensive</a>&nbsp;&nbsp;
119
+ <a href="#M000010">unprime</a>&nbsp;&nbsp;
120
+ <a href="#M000009">unset</a>&nbsp;&nbsp;
114
121
  </div>
115
122
  </div>
116
123
 
@@ -130,7 +137,7 @@ the sadie constructor
130
137
  <tr class="top-aligned-row context-row">
131
138
  <td class="context-item-name">VERSION</td>
132
139
  <td>=</td>
133
- <td class="context-item-value">&quot;0.0.4&quot;</td>
140
+ <td class="context-item-value">&quot;0.0.7&quot;</td>
134
141
  </tr>
135
142
  <tr class="top-aligned-row context-row">
136
143
  <td class="context-item-name">DEFAULTS</td>
@@ -173,7 +180,7 @@ resource (.res) file will have provided after the block is evaluated
173
180
  onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
174
181
  <div class="method-source-code" id="M000003-source">
175
182
  <pre>
176
- <span class="ruby-comment cmt"># File lib/sadie.rb, line 95</span>
183
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 96</span>
177
184
  <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-constant">Prime</span> ( <span class="ruby-identifier">primer_definition</span> )
178
185
 
179
186
  <span class="ruby-comment cmt"># validate params</span>
@@ -187,14 +194,25 @@ resource (.res) file will have provided after the block is evaluated
187
194
  <span class="ruby-comment cmt"># if initializing primers, just remember how to get back to the primer later,</span>
188
195
  <span class="ruby-comment cmt"># otherwise, prime</span>
189
196
  <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Sadie</span><span class="ruby-operator">::</span><span class="ruby-identifier">_midPrimerInit?</span>
197
+
198
+ <span class="ruby-comment cmt"># mid primer init, just memorize primer location</span>
190
199
  <span class="ruby-constant">Sadie</span><span class="ruby-operator">::</span><span class="ruby-identifier">_memorizePrimerLocation</span>( <span class="ruby-ivar">@@mid_primer_filepath</span>, <span class="ruby-identifier">primer_definition</span>[<span class="ruby-value str">&quot;provides&quot;</span>] )
191
200
  <span class="ruby-keyword kw">else</span>
201
+
202
+ <span class="ruby-comment cmt"># run code block with the current sadie instance</span>
192
203
  <span class="ruby-identifier">current_sadie_instance</span> = <span class="ruby-constant">Sadie</span><span class="ruby-operator">::</span><span class="ruby-identifier">_getCurrentSadieInstance</span>
193
- <span class="ruby-identifier">current_primer_filepath</span> = <span class="ruby-constant">Sadie</span><span class="ruby-operator">::</span><span class="ruby-identifier">_getCurrentPrimerFilepath</span>
194
204
  <span class="ruby-keyword kw">yield</span>( <span class="ruby-identifier">current_sadie_instance</span> )
205
+
206
+ <span class="ruby-comment cmt"># loop thru all primer provides, ensuring each primed</span>
207
+ <span class="ruby-identifier">current_primer_filepath</span> = <span class="ruby-constant">Sadie</span><span class="ruby-operator">::</span><span class="ruby-identifier">_getCurrentPrimerFilepath</span>
195
208
  <span class="ruby-identifier">primer_definition</span>[<span class="ruby-value str">&quot;provides&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">key</span> <span class="ruby-operator">|</span>
209
+
210
+ <span class="ruby-comment cmt"># skip blank lines</span>
196
211
  <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">key</span>.<span class="ruby-identifier">match</span> <span class="ruby-regexp re">/^\s*$/</span>
212
+
197
213
  <span class="ruby-comment cmt">#puts &quot;Prime&gt; providing: #{key}&quot;</span>
214
+
215
+ <span class="ruby-comment cmt"># key primed or raise error</span>
198
216
  <span class="ruby-identifier">current_sadie_instance</span>.<span class="ruby-identifier">primed?</span> <span class="ruby-identifier">key</span> \
199
217
  <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;primer definition file: #{current_primer_filepath} was supposed to define #{key}, but did not&quot;</span>
200
218
  <span class="ruby-keyword kw">end</span>
@@ -225,7 +243,7 @@ href="Sadie.html">Sadie</a>&#8216;s constructor method
225
243
  onclick="toggleCode('M000002-source');return false;">[Source]</a></p>
226
244
  <div class="method-source-code" id="M000002-source">
227
245
  <pre>
228
- <span class="ruby-comment cmt"># File lib/sadie.rb, line 83</span>
246
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 84</span>
229
247
  <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">getSadieInstance</span>( <span class="ruby-identifier">options</span> )
230
248
  <span class="ruby-constant">Sadie</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">options</span>)
231
249
  <span class="ruby-keyword kw">end</span>
@@ -270,6 +288,7 @@ href="Sadie.html">Sadie</a>&#8216;s constructor method
270
288
  <span class="ruby-ivar">@shortterm</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>
271
289
  <span class="ruby-ivar">@flag_expensive</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>
272
290
  <span class="ruby-ivar">@flag_primed</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>
291
+ <span class="ruby-ivar">@flag_eachtimeprime</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>
273
292
 
274
293
  <span class="ruby-comment cmt"># init class</span>
275
294
  <span class="ruby-constant">Sadie</span><span class="ruby-operator">::</span><span class="ruby-identifier">_checkSanity</span>
@@ -314,6 +333,95 @@ href="Sadie.html">Sadie</a>&#8216;s constructor method
314
333
 
315
334
  <h3 class="section-bar">Public Instance methods</h3>
316
335
 
336
+ <div id="method-M000008" class="method-detail">
337
+ <a name="M000008"></a>
338
+
339
+ <div class="method-heading">
340
+ <a href="#M000008" class="method-signature">
341
+ <span class="method-name">_newline</span><span class="method-args">( rval=true )</span>
342
+ </a>
343
+ </div>
344
+
345
+ <div class="method-description">
346
+ <p><a class="source-toggle" href="#"
347
+ onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
348
+ <div class="method-source-code" id="M000008-source">
349
+ <pre>
350
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 223</span>
351
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_newline</span>( <span class="ruby-identifier">rval</span>=<span class="ruby-keyword kw">true</span> )
352
+ <span class="ruby-comment cmt">#puts</span>
353
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">rval</span>
354
+ <span class="ruby-keyword kw">end</span>
355
+ </pre>
356
+ </div>
357
+ </div>
358
+ </div>
359
+
360
+ <div id="method-M000007" class="method-detail">
361
+ <a name="M000007"></a>
362
+
363
+ <div class="method-heading">
364
+ <a href="#M000007" class="method-signature">
365
+ <span class="method-name">destructOnGet?</span><span class="method-args">( key )</span>
366
+ </a>
367
+ </div>
368
+
369
+ <div class="method-description">
370
+ <h2>method: <a href="Sadie.html#M000007">destructOnGet?</a></h2>
371
+ <p>
372
+ returns true if the destructOnGet flag is <a
373
+ href="Sadie.html#M000011">set</a> for the key
374
+ </p>
375
+ <p><a class="source-toggle" href="#"
376
+ onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
377
+ <div class="method-source-code" id="M000007-source">
378
+ <pre>
379
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 212</span>
380
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">destructOnGet?</span>( <span class="ruby-identifier">key</span> )
381
+ <span class="ruby-comment cmt"># print &quot;destructOnGet?&gt; key #{key} &quot;</span>
382
+ <span class="ruby-ivar">@flag_eachtimeprime</span>.<span class="ruby-identifier">has_key?</span>( <span class="ruby-identifier">key</span> ) \
383
+ <span class="ruby-keyword kw">or</span> <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_newline</span>( <span class="ruby-keyword kw">false</span> )
384
+ <span class="ruby-comment cmt"># print &quot; defined-in-eachtimeprime &quot;</span>
385
+ <span class="ruby-ivar">@flag_eachtimeprime</span>[<span class="ruby-node">&quot;#{key}&quot;</span>] \
386
+ <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_newline</span>( <span class="ruby-keyword kw">true</span> )
387
+ <span class="ruby-comment cmt"># print &quot; defined-but-false &quot;</span>
388
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_newline</span>(<span class="ruby-keyword kw">false</span>)
389
+ <span class="ruby-keyword kw">end</span>
390
+ </pre>
391
+ </div>
392
+ </div>
393
+ </div>
394
+
395
+ <div id="method-M000016" class="method-detail">
396
+ <a name="M000016"></a>
397
+
398
+ <div class="method-heading">
399
+ <a href="#M000016" class="method-signature">
400
+ <span class="method-name">expensive?</span><span class="method-args">( k )</span>
401
+ </a>
402
+ </div>
403
+
404
+ <div class="method-description">
405
+ <h2>method: <a href="Sadie.html#M000015">primed?</a></h2>
406
+ <pre>
407
+ INTERNAL: this method should only be called the the class method, Prime
408
+ </pre>
409
+ <p><a class="source-toggle" href="#"
410
+ onclick="toggleCode('M000016-source');return false;">[Source]</a></p>
411
+ <div class="method-source-code" id="M000016-source">
412
+ <pre>
413
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 310</span>
414
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">expensive?</span>( <span class="ruby-identifier">k</span> )
415
+ <span class="ruby-ivar">@flag_expensive</span>.<span class="ruby-identifier">has_key?</span>( <span class="ruby-identifier">k</span> ) <span class="ruby-keyword kw">or</span> <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>;
416
+ <span class="ruby-ivar">@flag_expensive</span>[<span class="ruby-node">&quot;#{k}&quot;</span>] \
417
+ <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
418
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
419
+ <span class="ruby-keyword kw">end</span>
420
+ </pre>
421
+ </div>
422
+ </div>
423
+ </div>
424
+
317
425
  <div id="method-M000004" class="method-detail">
318
426
  <a name="M000004"></a>
319
427
 
@@ -334,44 +442,100 @@ directed by the resource (.res) files
334
442
  onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
335
443
  <div class="method-source-code" id="M000004-source">
336
444
  <pre>
337
- <span class="ruby-comment cmt"># File lib/sadie.rb, line 126</span>
445
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 138</span>
338
446
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get</span>( <span class="ruby-identifier">k</span> )
339
447
 
448
+ <span class="ruby-comment cmt"># if it's already set, return known answer</span>
449
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">_isset?</span>( <span class="ruby-identifier">k</span> )
450
+
451
+ <span class="ruby-comment cmt"># _get the return value</span>
452
+ <span class="ruby-identifier">return_value</span> = <span class="ruby-identifier">_get</span>( <span class="ruby-identifier">k</span> )
453
+
454
+ <span class="ruby-comment cmt"># unset and unprime if destructOnGet?</span>
455
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">destructOnGet?</span>( <span class="ruby-identifier">k</span> )
456
+ <span class="ruby-comment cmt"># puts &quot;destructing #{k}&quot;</span>
457
+ <span class="ruby-identifier">unset</span>( <span class="ruby-identifier">k</span> )
458
+ <span class="ruby-identifier">unprime</span>( <span class="ruby-identifier">k</span> )
459
+ <span class="ruby-keyword kw">end</span>
460
+
461
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">return_value</span>
462
+ <span class="ruby-keyword kw">end</span>
463
+
340
464
  <span class="ruby-comment cmt"># prime if not yet primed</span>
341
465
  <span class="ruby-identifier">primed?</span>( <span class="ruby-identifier">k</span> ) \
342
466
  <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">_prime</span>( <span class="ruby-identifier">k</span> )
343
467
 
344
468
  <span class="ruby-comment cmt"># if not expensive, then return what's already known</span>
345
469
  <span class="ruby-identifier">expensive?</span>( <span class="ruby-identifier">k</span> ) \
346
- <span class="ruby-keyword kw">or</span> <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_get</span>( <span class="ruby-identifier">k</span> )
470
+ <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_recallExpensive</span>( <span class="ruby-identifier">k</span> )
347
471
 
348
- <span class="ruby-comment cmt"># expensive, so recall from file</span>
349
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_recallExpensive</span>( <span class="ruby-identifier">k</span> )
472
+ <span class="ruby-comment cmt"># _get the return value</span>
473
+ <span class="ruby-identifier">return_value</span> = <span class="ruby-identifier">_get</span>( <span class="ruby-identifier">k</span> )
474
+
475
+ <span class="ruby-comment cmt"># unset and unprime if destructOnGet?</span>
476
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">destructOnGet?</span>( <span class="ruby-identifier">k</span> )
477
+ <span class="ruby-comment cmt"># puts &quot;destructing #{k}&quot;</span>
478
+ <span class="ruby-identifier">unset</span>( <span class="ruby-identifier">k</span> )
479
+ <span class="ruby-identifier">unprime</span>( <span class="ruby-identifier">k</span> )
480
+ <span class="ruby-keyword kw">end</span>
481
+
482
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">return_value</span>
350
483
  <span class="ruby-keyword kw">end</span>
351
484
  </pre>
352
485
  </div>
353
486
  </div>
354
487
  </div>
355
488
 
356
- <div id="method-M000009" class="method-detail">
357
- <a name="M000009"></a>
489
+ <div id="method-M000015" class="method-detail">
490
+ <a name="M000015"></a>
358
491
 
359
492
  <div class="method-heading">
360
- <a href="#M000009" class="method-signature">
493
+ <a href="#M000015" class="method-signature">
494
+ <span class="method-name">primed?</span><span class="method-args">( k )</span>
495
+ </a>
496
+ </div>
497
+
498
+ <div class="method-description">
499
+ <h2>method: <a href="Sadie.html#M000015">primed?</a></h2>
500
+ <pre>
501
+ INTERNAL: this method should only be called the the class method, Prime
502
+ </pre>
503
+ <p><a class="source-toggle" href="#"
504
+ onclick="toggleCode('M000015-source');return false;">[Source]</a></p>
505
+ <div class="method-source-code" id="M000015-source">
506
+ <pre>
507
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 298</span>
508
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">primed?</span>( <span class="ruby-identifier">k</span> )
509
+ <span class="ruby-ivar">@flag_primed</span>.<span class="ruby-identifier">has_key?</span>( <span class="ruby-identifier">k</span> ) \
510
+ <span class="ruby-keyword kw">or</span> <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
511
+ <span class="ruby-ivar">@flag_primed</span>[<span class="ruby-node">&quot;#{k}&quot;</span>] \
512
+ <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
513
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
514
+ <span class="ruby-keyword kw">end</span>
515
+ </pre>
516
+ </div>
517
+ </div>
518
+ </div>
519
+
520
+ <div id="method-M000014" class="method-detail">
521
+ <a name="M000014"></a>
522
+
523
+ <div class="method-heading">
524
+ <a href="#M000014" class="method-signature">
361
525
  <span class="method-name">revert!</span><span class="method-args">()</span>
362
526
  </a>
363
527
  </div>
364
528
 
365
529
  <div class="method-description">
366
- <h2>method: <a href="Sadie.html#M000009">revert!</a></h2>
530
+ <h2>method: <a href="Sadie.html#M000014">revert!</a></h2>
367
531
  <p>
368
532
  return to last saved state
369
533
  </p>
370
534
  <p><a class="source-toggle" href="#"
371
- onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
372
- <div class="method-source-code" id="M000009-source">
535
+ onclick="toggleCode('M000014-source');return false;">[Source]</a></p>
536
+ <div class="method-source-code" id="M000014-source">
373
537
  <pre>
374
- <span class="ruby-comment cmt"># File lib/sadie.rb, line 194</span>
538
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 284</span>
375
539
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">revert!</span>
376
540
 
377
541
  <span class="ruby-ivar">@shortterm</span> = {
@@ -386,25 +550,25 @@ return to last saved state
386
550
  </div>
387
551
  </div>
388
552
 
389
- <div id="method-M000008" class="method-detail">
390
- <a name="M000008"></a>
553
+ <div id="method-M000013" class="method-detail">
554
+ <a name="M000013"></a>
391
555
 
392
556
  <div class="method-heading">
393
- <a href="#M000008" class="method-signature">
557
+ <a href="#M000013" class="method-signature">
394
558
  <span class="method-name">save</span><span class="method-args">()</span>
395
559
  </a>
396
560
  </div>
397
561
 
398
562
  <div class="method-description">
399
- <h2>method: <a href="Sadie.html#M000008">save</a></h2>
563
+ <h2>method: <a href="Sadie.html#M000013">save</a></h2>
400
564
  <p>
401
565
  serialize to session file
402
566
  </p>
403
567
  <p><a class="source-toggle" href="#"
404
- onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
405
- <div class="method-source-code" id="M000008-source">
568
+ onclick="toggleCode('M000013-source');return false;">[Source]</a></p>
569
+ <div class="method-source-code" id="M000013-source">
406
570
  <pre>
407
- <span class="ruby-comment cmt"># File lib/sadie.rb, line 182</span>
571
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 272</span>
408
572
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">save</span>
409
573
  <span class="ruby-identifier">session_filepath</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>( <span class="ruby-value str">&quot;session.&quot;</span><span class="ruby-operator">+</span><span class="ruby-identifier">value</span>, <span class="ruby-identifier">get</span>( <span class="ruby-value str">&quot;sadie.sessions_dirpath&quot;</span> ) )
410
574
  <span class="ruby-identifier">serialized_value</span> = <span class="ruby-constant">Marshal</span><span class="ruby-operator">::</span><span class="ruby-identifier">dump</span>( [ <span class="ruby-ivar">@shortterm</span>, <span class="ruby-ivar">@flag_primed</span>, <span class="ruby-ivar">@flag_expensive</span> ] )
@@ -417,25 +581,25 @@ serialize to session file
417
581
  </div>
418
582
  </div>
419
583
 
420
- <div id="method-M000006" class="method-detail">
421
- <a name="M000006"></a>
584
+ <div id="method-M000011" class="method-detail">
585
+ <a name="M000011"></a>
422
586
 
423
587
  <div class="method-heading">
424
- <a href="#M000006" class="method-signature">
588
+ <a href="#M000011" class="method-signature">
425
589
  <span class="method-name">set</span><span class="method-args">( k, v )</span>
426
590
  </a>
427
591
  </div>
428
592
 
429
593
  <div class="method-description">
430
- <h2>method: <a href="Sadie.html#M000006">set</a></h2>
594
+ <h2>method: <a href="Sadie.html#M000011">set</a></h2>
431
595
  <p>
432
- alias for <a href="Sadie.html#M000007">setCheap</a>(k,v)
596
+ alias for <a href="Sadie.html#M000012">setCheap</a>(k,v)
433
597
  </p>
434
598
  <p><a class="source-toggle" href="#"
435
- onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
436
- <div class="method-source-code" id="M000006-source">
599
+ onclick="toggleCode('M000011-source');return false;">[Source]</a></p>
600
+ <div class="method-source-code" id="M000011-source">
437
601
  <pre>
438
- <span class="ruby-comment cmt"># File lib/sadie.rb, line 156</span>
602
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 246</span>
439
603
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set</span>( <span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span> )
440
604
  <span class="ruby-identifier">setCheap</span>( <span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span> )
441
605
  <span class="ruby-keyword kw">end</span>
@@ -444,27 +608,27 @@ alias for <a href="Sadie.html#M000007">setCheap</a>(k,v)
444
608
  </div>
445
609
  </div>
446
610
 
447
- <div id="method-M000007" class="method-detail">
448
- <a name="M000007"></a>
611
+ <div id="method-M000012" class="method-detail">
612
+ <a name="M000012"></a>
449
613
 
450
614
  <div class="method-heading">
451
- <a href="#M000007" class="method-signature">
452
- <span class="method-name">setCheap</span><span class="method-args">(k,v)</span>
615
+ <a href="#M000012" class="method-signature">
616
+ <span class="method-name">setCheap</span><span class="method-args">( k, v )</span>
453
617
  </a>
454
618
  </div>
455
619
 
456
620
  <div class="method-description">
457
- <h2>method: <a href="Sadie.html#M000007">setCheap</a></h2>
621
+ <h2>method: <a href="Sadie.html#M000012">setCheap</a></h2>
458
622
  <p>
459
623
  the cheap setter. key, value pairs stored via this method are kept in
460
624
  memory
461
625
  </p>
462
626
  <p><a class="source-toggle" href="#"
463
- onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
464
- <div class="method-source-code" id="M000007-source">
627
+ onclick="toggleCode('M000012-source');return false;">[Source]</a></p>
628
+ <div class="method-source-code" id="M000012-source">
465
629
  <pre>
466
- <span class="ruby-comment cmt"># File lib/sadie.rb, line 163</span>
467
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setCheap</span>(<span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span>)
630
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 253</span>
631
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setCheap</span>( <span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span> )
468
632
 
469
633
  <span class="ruby-comment cmt"># set it, mark not expensive and primed</span>
470
634
  <span class="ruby-identifier">_set</span>( <span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span> )
@@ -484,6 +648,43 @@ memory
484
648
  </div>
485
649
  </div>
486
650
 
651
+ <div id="method-M000006" class="method-detail">
652
+ <a name="M000006"></a>
653
+
654
+ <div class="method-heading">
655
+ <a href="#M000006" class="method-signature">
656
+ <span class="method-name">setDestructOnGet</span><span class="method-args">( key, turnon=true )</span>
657
+ </a>
658
+ </div>
659
+
660
+ <div class="method-description">
661
+ <h2>method: <a href="Sadie.html#M000006">setDestructOnGet</a></h2>
662
+ <pre>
663
+ key value will go away and key will be unprimed and unset after next get
664
+
665
+ NOTE: this doesn't make sense with keys that were set via setExpensive
666
+ so it can be set, but nothing's going to happen differently
667
+ </pre>
668
+ <p><a class="source-toggle" href="#"
669
+ onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
670
+ <div class="method-source-code" id="M000006-source">
671
+ <pre>
672
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 198</span>
673
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setDestructOnGet</span>( <span class="ruby-identifier">key</span>, <span class="ruby-identifier">turnon</span>=<span class="ruby-keyword kw">true</span> )
674
+ <span class="ruby-comment cmt"># puts &quot;setDestructOnGet( #{key}, #{turnon} )&quot;</span>
675
+ <span class="ruby-keyword kw">if</span> ( <span class="ruby-identifier">turnon</span> )
676
+ <span class="ruby-comment cmt"># puts &quot;turning on destructOnGet for key: #{key}&quot;</span>
677
+ <span class="ruby-ivar">@flag_eachtimeprime</span>[<span class="ruby-node">&quot;#{key}&quot;</span>] = <span class="ruby-keyword kw">true</span>
678
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
679
+ <span class="ruby-keyword kw">end</span>
680
+ <span class="ruby-ivar">@flag_eachtimeprime</span>.<span class="ruby-identifier">has_key?</span>( <span class="ruby-identifier">key</span> ) \
681
+ <span class="ruby-keyword kw">and</span> <span class="ruby-ivar">@flag_eachtimeprime</span>.<span class="ruby-identifier">delete</span>( <span class="ruby-identifier">key</span> )
682
+ <span class="ruby-keyword kw">end</span>
683
+ </pre>
684
+ </div>
685
+ </div>
686
+ </div>
687
+
487
688
  <div id="method-M000005" class="method-detail">
488
689
  <a name="M000005"></a>
489
690
 
@@ -494,7 +695,7 @@ memory
494
695
  </div>
495
696
 
496
697
  <div class="method-description">
497
- <h2>method: <a href="Sadie.html#M000007">setCheap</a></h2>
698
+ <h2>method: <a href="Sadie.html#M000012">setCheap</a></h2>
498
699
  <p>
499
700
  the expensive setter. key, value pairs stored via this method are not kept
500
701
  in memory but are stored to file and recalled as needed
@@ -503,7 +704,7 @@ in memory but are stored to file and recalled as needed
503
704
  onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
504
705
  <div class="method-source-code" id="M000005-source">
505
706
  <pre>
506
- <span class="ruby-comment cmt"># File lib/sadie.rb, line 144</span>
707
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 182</span>
507
708
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setExpensive</span>(<span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span>)
508
709
  <span class="ruby-identifier">expensive_filepath</span> = <span class="ruby-identifier">_computeExpensiveFilepath</span>( <span class="ruby-identifier">k</span> )
509
710
  <span class="ruby-identifier">serialized_value</span> = <span class="ruby-constant">Marshal</span><span class="ruby-operator">::</span><span class="ruby-identifier">dump</span>( <span class="ruby-identifier">v</span> )
@@ -518,6 +719,66 @@ in memory but are stored to file and recalled as needed
518
719
  </div>
519
720
  </div>
520
721
 
722
+ <div id="method-M000010" class="method-detail">
723
+ <a name="M000010"></a>
724
+
725
+ <div class="method-heading">
726
+ <a href="#M000010" class="method-signature">
727
+ <span class="method-name">unprime</span><span class="method-args">( key )</span>
728
+ </a>
729
+ </div>
730
+
731
+ <div class="method-description">
732
+ <h2>method: <a href="Sadie.html#M000010">unprime</a></h2>
733
+ <p>
734
+ unprimes k. Note that this does not <a href="Sadie.html#M000009">unset</a>
735
+ the value, so <a href="Sadie.html#M000004">get</a>(key) will continue to
736
+ return whatever it otherwise would have. run <a
737
+ href="Sadie.html#M000009">unset</a> as well to have the primer run again.
738
+ </p>
739
+ <p><a class="source-toggle" href="#"
740
+ onclick="toggleCode('M000010-source');return false;">[Source]</a></p>
741
+ <div class="method-source-code" id="M000010-source">
742
+ <pre>
743
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 240</span>
744
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unprime</span>( <span class="ruby-identifier">key</span> )
745
+ <span class="ruby-identifier">_primed</span>( <span class="ruby-identifier">key</span>, <span class="ruby-keyword kw">false</span> )
746
+ <span class="ruby-keyword kw">end</span>
747
+ </pre>
748
+ </div>
749
+ </div>
750
+ </div>
751
+
752
+ <div id="method-M000009" class="method-detail">
753
+ <a name="M000009"></a>
754
+
755
+ <div class="method-heading">
756
+ <a href="#M000009" class="method-signature">
757
+ <span class="method-name">unset</span><span class="method-args">( key )</span>
758
+ </a>
759
+ </div>
760
+
761
+ <div class="method-description">
762
+ <h2>method: <a href="Sadie.html#M000009">unset</a></h2>
763
+ <p>
764
+ unsets the value of k. Note that this does not <a
765
+ href="Sadie.html#M000010">unprime</a>, so <a
766
+ href="Sadie.html#M000004">get</a>(key) will simply return nil. Run with <a
767
+ href="Sadie.html#M000010">unprime</a> to have the primer run again
768
+ </p>
769
+ <p><a class="source-toggle" href="#"
770
+ onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
771
+ <div class="method-source-code" id="M000009-source">
772
+ <pre>
773
+ <span class="ruby-comment cmt"># File lib/sadie.rb, line 232</span>
774
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unset</span>( <span class="ruby-identifier">key</span> )
775
+ <span class="ruby-identifier">_unset</span>( <span class="ruby-identifier">key</span> )
776
+ <span class="ruby-keyword kw">end</span>
777
+ </pre>
778
+ </div>
779
+ </div>
780
+ </div>
781
+
521
782
 
522
783
  </div>
523
784
 
data/rdoc/created.rid CHANGED
@@ -1 +1 @@
1
- Thu, 19 Jan 2012 17:31:13 -0500
1
+ Fri, 20 Jan 2012 01:26:54 -0500
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Thu Jan 19 16:26:14 -0500 2012</td>
59
+ <td>Thu Jan 19 22:57:21 -0500 2012</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Thu Jan 19 16:25:47 -0500 2012</td>
59
+ <td>Fri Jan 20 01:26:13 -0500 2012</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -21,14 +21,21 @@
21
21
  <h1 class="section-bar">Methods</h1>
22
22
  <div id="index-entries">
23
23
  <a href="classes/Sadie.html#M000003">Prime (Sadie)</a><br />
24
+ <a href="classes/Sadie.html#M000008">_newline (Sadie)</a><br />
25
+ <a href="classes/Sadie.html#M000007">destructOnGet? (Sadie)</a><br />
26
+ <a href="classes/Sadie.html#M000016">expensive? (Sadie)</a><br />
24
27
  <a href="classes/Sadie.html#M000004">get (Sadie)</a><br />
25
28
  <a href="classes/Sadie.html#M000002">getSadieInstance (Sadie)</a><br />
26
29
  <a href="classes/Sadie.html#M000001">new (Sadie)</a><br />
27
- <a href="classes/Sadie.html#M000009">revert! (Sadie)</a><br />
28
- <a href="classes/Sadie.html#M000008">save (Sadie)</a><br />
29
- <a href="classes/Sadie.html#M000006">set (Sadie)</a><br />
30
- <a href="classes/Sadie.html#M000007">setCheap (Sadie)</a><br />
30
+ <a href="classes/Sadie.html#M000015">primed? (Sadie)</a><br />
31
+ <a href="classes/Sadie.html#M000014">revert! (Sadie)</a><br />
32
+ <a href="classes/Sadie.html#M000013">save (Sadie)</a><br />
33
+ <a href="classes/Sadie.html#M000011">set (Sadie)</a><br />
34
+ <a href="classes/Sadie.html#M000012">setCheap (Sadie)</a><br />
35
+ <a href="classes/Sadie.html#M000006">setDestructOnGet (Sadie)</a><br />
31
36
  <a href="classes/Sadie.html#M000005">setExpensive (Sadie)</a><br />
37
+ <a href="classes/Sadie.html#M000010">unprime (Sadie)</a><br />
38
+ <a href="classes/Sadie.html#M000009">unset (Sadie)</a><br />
32
39
  </div>
33
40
  </div>
34
41
  </body>
@@ -16,6 +16,15 @@ class TestSadieToplevel < Test::Unit::TestCase
16
16
 
17
17
  # test top-level res
18
18
  assert_equal( sadie.get( "toplevel_single.oneprime" ), "primedit" )
19
+
20
+ # test destruct on get
21
+ dog1a = sadie.get( "toplevel_destructonget.oneprime" )
22
+ dog2a = sadie.get( "toplevel_destructonget.twoprime" )
23
+ dog2b = sadie.get( "toplevel_destructonget.twoprime" )
24
+ sleep( 2 )
25
+ dog1b = sadie.get( "toplevel_destructonget.oneprime" )
26
+ assert_equal( dog2a, dog2b )
27
+ assert_not_equal( dog1a, dog1b )
19
28
  end
20
29
  end
21
30
  end
@@ -0,0 +1,11 @@
1
+ require 'sadie'
2
+
3
+ Sadie::Prime( "provides" => %w{ toplevel_destructonget.oneprime
4
+ toplevel_destructonget.twoprime } ) do |sadie|
5
+ puts "running destructonget primer..."
6
+ timeobj = Time.now
7
+ timeinsecs = timeobj.to_f
8
+ sadie.set( "toplevel_destructonget.oneprime", "primedthem - #{timeinsecs}" )
9
+ sadie.set( "toplevel_destructonget.twoprime", "primedthem" )
10
+ sadie.setDestructOnGet("toplevel_destructonget.oneprime")
11
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sadie
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 6
10
- version: 0.0.6
9
+ - 7
10
+ version: 0.0.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Fred McDavid
@@ -29,6 +29,7 @@ extra_rdoc_files: []
29
29
 
30
30
  files:
31
31
  - .gitignore
32
+ - CHANGELOG
32
33
  - Gemfile
33
34
  - LEGAL
34
35
  - LICENSE
@@ -52,8 +53,10 @@ files:
52
53
  - sadie.gemspec
53
54
  - test/tc_sadie_toplevel.rb
54
55
  - test/tc_sadie_twodeep.rb
56
+ - test/test_primers/.toplevel_double.res.rb.kate-swp
55
57
  - test/test_primers/onedeep/multiresult.res
56
58
  - test/test_primers/toplevel.ini
59
+ - test/test_primers/toplevel_destructonget.res.rb
57
60
  - test/test_primers/toplevel_double.res.rb
58
61
  - test/test_primers/toplevel_single.res.rb
59
62
  - test/test_primers/two/deep/conf.ini