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 +2 -1
- data/lib/sadie/version.rb +1 -1
- data/lib/sadie.rb +86 -19
- data/test/tc_sadie_toplevel.rb +7 -0
- data/test/test_primers/toplevel.somegroup.somekey.each +15 -0
- data/test/test_primers/toplevel_double.oneprime.each +14 -0
- data/test/test_primers/toplevel_testeach.res.rb +4 -0
- data/test/test_primers/two/deep/testquery.test.sql2ar.each +2 -1
- metadata +8 -5
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
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 =
|
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:
|
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
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
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
|
-
#
|
413
|
-
|
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!
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
|
data/test/tc_sadie_toplevel.rb
CHANGED
@@ -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
|
+
|
@@ -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,
|
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.
|
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: &
|
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: *
|
24
|
+
version_requirements: *22657300
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: dbd-mysql
|
27
|
-
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: *
|
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
|