sadie 0.0.46 → 0.0.47

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 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