sadie 0.0.46 → 0.0.47

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -18,4 +18,5 @@
18
18
  [0.0.41] minor bugfix
19
19
  [0.0.42,0.0.43] minor bugfix (hopefully), file now closing before method exit (a punt)
20
20
  [0.0.45] bugfix (punt worked!) in templated file handling
21
- [0.0.46] massive code cleanup. moved lots of things to private. documented all public methods.
21
+ [0.0.46] massive code cleanup. moved lots of things to private. documented all public methods.
22
+ [0.0.47] eachers now sane and can be set on any key, even other eacher provided keys
data/lib/sadie/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Sadie
2
- VERSION = "0.0.46"
2
+ VERSION = "0.0.47"
3
3
  end
data/lib/sadie.rb CHANGED
@@ -255,16 +255,21 @@ class Sadie
255
255
 
256
256
  # gen sadie key
257
257
  basefilename = filepath.gsub(/^.*\//,"")
258
- sadiekey = key_prefix + "." + basefilename.gsub(/\.each(?:\..*)*$/,"")
258
+ sadiekey = key_prefix + "." + basefilename.gsub(/\.each(?:\..*)*$/,"")
259
+ sadiekey = sadiekey.gsub( /^\.+/,"" )
259
260
  if params.has_key? "sadiekey"
260
261
  sadiekey = params["sadiekey"]
261
262
  end
262
263
 
263
264
  if midEacherInit?
265
+
266
+ debug! 10, "in mid eacher init (#{sadiekey})"
267
+
264
268
  memorizeEacherFileLocation( sadiekey, filepath )
265
269
 
266
270
  if params.has_key? :provides
267
271
 
272
+ # make sure we're passing an array
268
273
  provide_array = params[:provides]
269
274
  provide_array.respond_to? "each" or provide_array = [provide_array]
270
275
 
@@ -282,7 +287,7 @@ class Sadie
282
287
  end
283
288
  end
284
289
 
285
- # ==method: eacher
290
+ # ==method: eacherFrame
286
291
  #
287
292
  # ( usually this will be called by the class method...it looks better )
288
293
  #
@@ -290,17 +295,20 @@ class Sadie
290
295
  #
291
296
  def eacherFrame( sadiekey, occur_at, param=nil )
292
297
 
298
+ debug! 8, "eacherFrame(#{occur_at}): #{sadiekey}"
299
+
293
300
  key = sadiekey
294
- if defined? @eacher_frame_redirect
295
- if @eacher_frame_redirect.has_key? key
296
- key = @eacher_frame_redirect[key]
297
- end
298
- end
301
+ # if defined? @eacher_frame_redirect
302
+ # if @eacher_frame_redirect.has_key? key
303
+ # key = @eacher_frame_redirect[key]
304
+ # end
305
+ # end
299
306
 
300
307
  setEacherFrame( occur_at )
301
308
  defined? param and setEacherParam( param )
302
309
  if filepaths = eacherFilepaths( key )
303
310
  filepaths.each do |filepath|
311
+ debug! 10, "each frame loading: #{filepath} for key: #{key}"
304
312
  load filepath
305
313
  end
306
314
  end
@@ -408,9 +416,23 @@ class Sadie
408
416
 
409
417
  debug! 10, "get(#{k})"
410
418
 
419
+ defined? @eacher_frame_redirect or @eacher_frame_redirect = Hash.new
420
+
411
421
  if ! isset?( k )
412
- # prime if not yet primed
413
- primed?( k ) or _prime( k )
422
+ debug! 10, "#{k} is not set"
423
+ if isEacherKey?( k )
424
+ debug! 10, "sadiekey: #[k} is eacher, fetching: #{@eacher_frame_redirect[k]}"
425
+ get @eacher_frame_redirect[k]
426
+
427
+ elsif primeable?( k )
428
+
429
+ debug! 10, "calling eacher from get method for #{k}"
430
+ setUnbalancedEacher k
431
+ Sadie::eacherFrame( k, BEFORE )
432
+
433
+ # prime if not yet primed
434
+ primed?( k ) or _prime( k )
435
+ end
414
436
  end
415
437
 
416
438
  return _recallExpensive( k ) if expensive?( k )
@@ -485,14 +507,22 @@ class Sadie
485
507
  # the cheap setter. key, value pairs stored via this method are kept in memory
486
508
  def setCheap( k, v )
487
509
 
488
- debug! 10, "setting: #{k}"
510
+ debug! 9, "setting cheap: #{k}"
511
+ Sadie::eacherFrame( k, BEFORE ) if ! eacherUnbalanced?( k )
512
+ setUnbalancedEacher k
513
+
514
+ if getDebugLevel == 10
515
+ debug! 10, "dumping value:"
516
+ pp v
517
+ end
489
518
 
490
519
  # set it, mark not expensive and primed
491
520
  _set( k, v )
492
521
  _expensive( k, false )
522
+ _primed( k, true )
493
523
 
494
-
495
- _primed( k, true )
524
+ Sadie::eacherFrame( k, AFTER, v )
525
+ clearUnbalancedEacher k
496
526
 
497
527
  end
498
528
 
@@ -501,6 +531,12 @@ class Sadie
501
531
  # the expensive setter. key, value pairs stored via this method are not kept in memory
502
532
  # but are stored to file and recalled as needed
503
533
  def setExpensive(k,v)
534
+
535
+ debug! 9, "setting expensive: #{k}"
536
+ Sadie::eacherFrame( k, BEFORE ) if ! eacherUnbalanced?( k )
537
+ setUnbalancedEacher k
538
+
539
+
504
540
  expensive_filepath = _computeExpensiveFilepath( k )
505
541
  serialized_value = Marshal::dump( v )
506
542
 
@@ -512,6 +548,9 @@ class Sadie
512
548
  }
513
549
  _expensive( k, true )
514
550
  _primed( k, true )
551
+
552
+ Sadie::eacherFrame( k, AFTER, v )
553
+ clearUnbalancedEacher k
515
554
  end
516
555
 
517
556
 
@@ -572,9 +611,28 @@ class Sadie
572
611
  end
573
612
 
574
613
 
575
-
614
+ # ------------------------------------------------------------------------------------------------
615
+ # ------------------------------------------------------------------------------------------------
616
+
576
617
  private
577
618
 
619
+ def setUnbalancedEacher( k )
620
+ debug! 10, "setting eacher unbalanced: #{k}"
621
+ defined? @eacher_unbalanced or @eacher_unbalanced = Hash.new
622
+ @eacher_unbalanced[k] = true
623
+ end
624
+
625
+ def clearUnbalancedEacher( k )
626
+ debug! 10, "clearing eacher unbalanced: #{k}"
627
+ @eacher_unbalanced[k] = false if defined? @eacher_unbalanced
628
+ end
629
+
630
+ def eacherUnbalanced?( k )
631
+ return false if ! defined? @eacher_unbalanced
632
+ return false if ! @eacher_unbalanced.has_key?( k )
633
+ return @eacher_unbalanced[k]
634
+ end
635
+
578
636
  def cheap?( k )
579
637
  ! expensive? ( k )
580
638
  end
@@ -613,7 +671,7 @@ class Sadie
613
671
 
614
672
  def initializeEacherDirectory( key_prefix, current_dirpath )
615
673
 
616
- puts "initializing eacher directory: #{current_dirpath}"
674
+ debug! 3, "initializing eacher directory: #{current_dirpath}"
617
675
  Dir.foreach( current_dirpath ) do |filename|
618
676
 
619
677
  # skip the dit dirs
@@ -635,7 +693,7 @@ class Sadie
635
693
  end
636
694
 
637
695
  def initializeEacherFile( key_prefix, filepath )
638
- puts "initializing eacher file (#{key_prefix}): #{filepath}"
696
+ debug! 8, "initializing eacher file (#{key_prefix}): #{filepath}"
639
697
  setCurrentPrimerFilepath filepath
640
698
  setCurrentPrimerKeyPrefix key_prefix
641
699
  load filepath
@@ -676,9 +734,10 @@ class Sadie
676
734
 
677
735
 
678
736
  def isEacherKey?( key )
737
+
679
738
  defined? @eacher_frame_redirect or return false
680
739
  @eacher_frame_redirect.has_key? key or return false
681
- true
740
+ return true
682
741
  end
683
742
 
684
743
  def getEacherDependency( key )
@@ -722,6 +781,7 @@ class Sadie
722
781
  defined? @eacher_frame_redirect \
723
782
  or @eacher_frame_redirect = Hash.new
724
783
  providers.each do |provider|
784
+ debug! 10, "setting provider reverse map for #{provider} to #{sadiekey}"
725
785
  @eacher_frame_redirect[provider] = sadiekey
726
786
  end
727
787
 
@@ -736,7 +796,7 @@ class Sadie
736
796
 
737
797
 
738
798
  def memorizeEacherFileLocation( sadiekey, filepath )
739
-
799
+ debug! 10, "memorizing eacher file location: #{filepath} for #{sadiekey}"
740
800
  # store the file path
741
801
  defined? @eacher_filepaths or @eacher_filepaths = Hash.new
742
802
  if ! @eacher_filepaths.has_key? sadiekey
@@ -1009,6 +1069,13 @@ class Sadie
1009
1069
 
1010
1070
  end
1011
1071
 
1072
+ def primeable?( key )
1073
+ p = getPrimerProvider( key )
1074
+ return nil if ! defined? (p )
1075
+ return nil if p == nil
1076
+ return true
1077
+ end
1078
+
1012
1079
  def getPrimerProvider( key )
1013
1080
 
1014
1081
  # fetch primers dirpath and validate the primer hash
@@ -1047,7 +1114,7 @@ class Sadie
1047
1114
  get( getEacherDependency( k ) )
1048
1115
  else
1049
1116
 
1050
- Sadie::eacherFrame( k, BEFORE )
1117
+ #Sadie::eacherFrame( k, BEFORE )
1051
1118
  if provider = getPrimerProvider( k )
1052
1119
  primer_filepath, plugin_filepath, key_prefix = provider
1053
1120
 
@@ -1063,7 +1130,7 @@ class Sadie
1063
1130
  setCurrentPrimerFilepath currfilepath
1064
1131
  end
1065
1132
  end
1066
- Sadie::eacherFrame( k, AFTER )
1133
+ #Sadie::eacherFrame( k, AFTER )
1067
1134
  end
1068
1135
  end
1069
1136
 
@@ -16,6 +16,13 @@ class TestSadieToplevel < Test::Unit::TestCase
16
16
  "sadie.primer_plugins_dirpath" => "lib/sadie/primer_plugins" } )
17
17
  sadie.initializePrimers
18
18
 
19
+ # test eacher on non-intentional non-prime
20
+
21
+ # te = sadie.get( "toplevel_testeach" )
22
+ # puts "TE: #{te}"
23
+ assert_equal( sadie.get( "toplevel_testeach" ), "blahbloo" )
24
+ assert_equal( sadie.get( "toplevel_somegroup.eachtest" ), "blooblah" )
25
+
19
26
  # test top-level ini
20
27
  assert_equal( sadie.get( "toplevel.somegroup.somekey" ), "someval" )
21
28
  assert_equal( sadie.get( "toplevel.anothergroup.anotherkey" ), "anotherval" )
@@ -0,0 +1,15 @@
1
+ Sadie::eacher( :when => Sadie::BEFORE ) do |sadie|
2
+ @testeach_toplevel2 = "bloo"
3
+ sadie.debug! 9, "here!!!"
4
+ end
5
+
6
+ Sadie::eacher( :when => Sadie::AFTER,
7
+ :provides => ["toplevel_somegroup.eachtest"] ) do |sadie,val|
8
+
9
+ @testeach_toplevel2 = "#{@testeach_toplevel2}blah"
10
+ sadie.debug! 9, "and!!!"
11
+ sadie.set "toplevel_somegroup.eachtest", @testeach_toplevel2
12
+ sadie.debug! 9, "there!!!"
13
+
14
+ end
15
+
@@ -0,0 +1,14 @@
1
+ Sadie::eacher( :when => Sadie::BEFORE ) do |sadie|
2
+ @testeach_topleveldouble = "blah"
3
+ sadie.debug! 10, ">>>>HERE!!!"
4
+ end
5
+
6
+ Sadie::eacher( :when => Sadie::AFTER,
7
+ :provides => ["toplevel_double.eachtest"] ) do |sadie,val|
8
+
9
+ @testeach_topleveldouble = "#{@testeach_topleveldouble}bloo"
10
+ sadie.set "toplevel_double.eachtest", @testeach_topleveldouble
11
+ sadie.debug! 10, ">>>>THERE!!!"
12
+
13
+ end
14
+
@@ -0,0 +1,4 @@
1
+ Sadie::prime( "provides" => %w{ toplevel_testeach } ) do |sadie|
2
+ sadie.get "toplevel_double.twoprime"
3
+ sadie.set( "toplevel_testeach", sadie.get( "toplevel_double.eachtest" ) )
4
+ end
@@ -4,7 +4,8 @@ Sadie::eacher( :when => Sadie::BEFORE ) do |sadie|
4
4
  @testeach = "start"
5
5
  end
6
6
 
7
- Sadie::eacher( :when => Sadie::EACH, :sadiekey => "two.deep.testquery.test.sql2ar" ) do |sadie,param|
7
+ Sadie::eacher( :when => Sadie::EACH,
8
+ :sadiekey => "two.deep.testquery.test.sql2ar" ) do |sadie,param|
8
9
  @testeach = "#{@testeach}#{param[0]}"
9
10
  end
10
11
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sadie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.46
4
+ version: 0.0.47
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-04-29 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: dbi
16
- requirement: &16171300 !ruby/object:Gem::Requirement
16
+ requirement: &22657300 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *16171300
24
+ version_requirements: *22657300
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: dbd-mysql
27
- requirement: &16170880 !ruby/object:Gem::Requirement
27
+ requirement: &22656880 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *16170880
35
+ version_requirements: *22656880
36
36
  description: Sadie is a data framework intended to ease the pain of managing related
37
37
  data.
38
38
  email:
@@ -80,9 +80,12 @@ files:
80
80
  - test/test_primers/.gitignore
81
81
  - test/test_primers/onedeep/multiresult.res
82
82
  - test/test_primers/toplevel.ini
83
+ - test/test_primers/toplevel.somegroup.somekey.each
83
84
  - test/test_primers/toplevel_destructonget.res.rb
85
+ - test/test_primers/toplevel_double.oneprime.each
84
86
  - test/test_primers/toplevel_double.res.rb
85
87
  - test/test_primers/toplevel_single.res.rb
88
+ - test/test_primers/toplevel_testeach.res.rb
86
89
  - test/test_primers/two/deep/conf.ini
87
90
  - test/test_primers/two/deep/expensive.res
88
91
  - test/test_primers/two/deep/test.dbi.conx