sadie 0.0.35 → 0.0.39

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -10,4 +10,7 @@
10
10
  [0.0.15] actually committed changes to code this time...doh
11
11
  [0.0.16] bugfixes, updated tests
12
12
  [0.0.17] bugfixes, updated tests
13
- [0.0.18] initializePrimers is no longer called by constructor...must now call manually before using get method
13
+ [0.0.18...0.0.34] bugfixes, working on more natural integration with olsen
14
+ [0.0.35] initializePrimers is no longer called by constructor...must now call manually before using get method
15
+ [0.0.36] added lots of debugging that's going to need to come out, but also added eachers, a VERY cool
16
+ enhancement that offers a huge optimization path with very low developer resources
data/README CHANGED
@@ -12,6 +12,8 @@ Valid primers currently are:
12
12
  .res, .res.rb - provides access to general-purpose, programatic manipulation of data (i.e. just use sadie instance for input and output of data)
13
13
  .tmpl - simple templating engine for text-based file types
14
14
 
15
+ There's also another file type that can be found in the primer directory called "eacher files". These are simple files which allow for certain tasks to be performed before, after and during the priming of a key/value pair. Currently, the only plugin that makes effective use of eachers is sql2ar and it provides a way for developers to iterate on the rows of a query result as it is initially processed into the resultant array.
16
+
15
17
  It's very simple to add new primer types, so it would be simple to create primers for html, xml, csv, xls, pointers to all of the above on remote machines, or any- and everything else.
16
18
 
17
19
  At Landmetrics, we use a predecessor to Sadie to power perimetercomps[http://perimetercomps.com], producing each 50+ page report with charts, graphs and tables with only 12 queries to the database.
@@ -4,27 +4,28 @@ Sadie::registerPrimerPlugin( { "match" => /\.sql2ar$/,
4
4
  primer_file_basename = File.basename( primer_file_filepath )
5
5
  sadie_key = key_prefix + '.' + primer_file_basename
6
6
  sadie_key = sadie_key.gsub(/^\./,"")
7
-
7
+ puts "DEFINING sql2ar primer for: #{sadie_key}"
8
8
  Sadie::prime( { "provides" => [ sadie_key ] }) do |sadie|
9
-
9
+ puts "priming via sql2ar for: #{sadie_key}"
10
10
  if ( matches = primer_file_basename.match( /^(.*)\.([^\.]+)\.sql2ar$/ ) )
11
11
  dbi_sadie_key = key_prefix + '.' + matches[2] + ".dbi.conx"
12
- # puts "dbi_sadie_key: #{dbi_sadie_key}, connecting..."
13
12
  dbconx = sadie.get( dbi_sadie_key )
14
- # puts "dbconx: #{dbconx}"
15
13
  if ( dbconx = sadie.get( dbi_sadie_key ) )
16
- # puts " connected."
17
14
  if sql_query = Sadie::templatedFileToString( primer_file_filepath )
18
15
 
19
16
  sth = dbconx.prepare(sql_query)
20
17
  sth.execute
21
18
 
19
+
20
+ puts "looping thru db query results"
22
21
  result = Array.new
23
22
  while row = sth.fetch
24
- result.push row.to_a
23
+ row_as_array = row.to_a
24
+ puts "calling eacherFrame each for sadiekey: #{sadie_key}"
25
+ Sadie::eacherFrame sadie_key, Sadie::EACH, row_as_array
26
+ result.push row_as_array
25
27
  end
26
28
 
27
-
28
29
  sadie.setExpensive( sadie_key, result )
29
30
 
30
31
  # Close the statement handle when done
data/lib/sadie/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Sadie
2
- VERSION = "0.0.35"
2
+ VERSION = "0.0.39"
3
3
  end
data/lib/sadie.rb CHANGED
@@ -23,6 +23,10 @@ end
23
23
 
24
24
  class Sadie
25
25
 
26
+ BEFORE = 1
27
+ AFTER = 2
28
+ EACH = 3
29
+
26
30
  # ==method: Sadie::getSadieInstance
27
31
  #
28
32
  # returns a new Sadie instance. Options match those of Sadie's constructor method
@@ -58,6 +62,252 @@ class Sadie
58
62
  current_sadie_instance.prime( primer_definition, &block )
59
63
  end
60
64
 
65
+ def memorizeEacherFileLocation( sadiekey, filepath )
66
+
67
+ # store the file path
68
+ defined? @eacher_filepaths or @eacher_filepaths = Hash.new
69
+ if ! @eacher_filepaths.has_key? sadiekey
70
+ puts "memorizing eacher filepath #{filepath} for sadiekey: #{sadiekey}"
71
+ @eacher_filepaths[sadiekey] = [filepath]
72
+ elsif ! @eacher_filepaths[sadiekey].include? filepath
73
+ puts "memorizing eacher filepath #{filepath} for sadiekey: #{sadiekey}"
74
+ @eacher_filepaths[sadiekey].push filepath
75
+ end
76
+ end
77
+
78
+ def eacherFilepaths( sadiekey )
79
+ defined? @eacher_filepaths or return nil
80
+ @eacher_filepaths.has_key? sadiekey or return nil
81
+ @eacher_filepaths[sadiekey]
82
+ end
83
+
84
+ def midEacherInit?
85
+ defined? @eacher_init or return false
86
+ @eacher_init or return false
87
+ true
88
+ end
89
+
90
+ def setEacherInit
91
+ @eacher_init = true
92
+ end
93
+
94
+ def clearEacherInit
95
+ @eacher_init = nil
96
+ end
97
+
98
+ # ==method: Sadie::eacher
99
+ #
100
+ # called by eacher files to hook into priming operations
101
+ # def self.eacher( eacher_params, &block )
102
+ # puts "HERE!!!"
103
+ # current_sadie_instance = Sadie::getCurrentSadieInstance
104
+ # filepath = current_sadie_instance.getCurrentPrimerFilepath
105
+ # key_prefix = current_sadie_instance.getCurrentPrimerKeyPrefix
106
+ #
107
+ # occur_at = eacher_params[:when]
108
+ # puts "eacher, occur_at: #{occur_at}"
109
+ #
110
+ # # gen sadie key
111
+ # basefilename = filepath.gsub(/^.*\//,"")
112
+ # sadiekey = key_prefix + "." + basefilename.gsub(/\.each(?:\..*)$/,"")
113
+ # if eacher_params.has_key? "sadiekey"
114
+ # sadiekey = eacher_params["sadiekey"]
115
+ # end
116
+ #
117
+ # if current_sadie_instance.midEacherInit?
118
+ # memorizeEacherFileLocation( sadiekey, filepath )
119
+ # elsif current_sadie_instance.whichEacherFrame == occur_at
120
+ # current_sadie_instance.eacher( eacher_params, &block )
121
+ # end
122
+ # end
123
+
124
+ def eacher( params, &block )
125
+ filepath = getCurrentPrimerFilepath
126
+ key_prefix = getCurrentPrimerKeyPrefix
127
+ occur_at = params[:when]
128
+ # puts "eacher, occur_at: #{occur_at}"
129
+
130
+ # gen sadie key
131
+ basefilename = filepath.gsub(/^.*\//,"")
132
+ sadiekey = key_prefix + "." + basefilename.gsub(/\.each(?:\..*)*$/,"")
133
+ if params.has_key? "sadiekey"
134
+ sadiekey = params["sadiekey"]
135
+ end
136
+
137
+ if midEacherInit?
138
+ memorizeEacherFileLocation( sadiekey, filepath )
139
+
140
+ if params.has_key? :provides
141
+ #puts "> got provides!"
142
+ provide_array = params[:provides]
143
+ provide_array.respond_to? "each" or provide_array = [provide_array]
144
+
145
+ # tell sadie that the sadiekey primer also provides everything in the provide array
146
+ setEachersProvidedByPrimer( sadiekey, provide_array )
147
+
148
+
149
+ end
150
+
151
+ elsif whichEacherFrame == occur_at
152
+ if block.arity == 0
153
+ yield self
154
+ else
155
+ yield self, getEacherParam
156
+ end
157
+ end
158
+ end
159
+
160
+ def setEachersProvidedByPrimer( sadiekey, providers )
161
+ puts "setting eachers to be provided by #{sadiekey} primer to #{providers}"
162
+
163
+ # record reverse map for use by eacherFrame
164
+ defined? @eacher_frame_redirect \
165
+ or @eacher_frame_redirect = Hash.new
166
+ providers.each do |provider|
167
+ @eacher_frame_redirect[provider] = sadiekey
168
+ end
169
+
170
+ defined? @eachers_provided or @eachers_provided = Hash.new
171
+ if @eachers_provided.has_key? sadiekey
172
+ @eachers_provided[sadiekey] = @eachers_provided[sadiekey].concat( providers )
173
+ else
174
+ @eachers_provided[sadiekey] = providers
175
+ end
176
+ end
177
+
178
+ def isEacherKey?( key )
179
+ defined? @eacher_frame_redirect or return false
180
+ @eacher_frame_redirect.has_key? key or return false
181
+ true
182
+ end
183
+
184
+ def getEacherDependency( key )
185
+ defined? @eacher_frame_redirect or return nil
186
+ @eacher_frame_redirect.has_key? key or return nil
187
+ @eacher_frame_redirect[key]
188
+ end
189
+
190
+ def getEachersProvidedByPrimer( sadiekey )
191
+ puts "looking for eachers provided by: #{sadiekey}"
192
+ defined? @eachers_provided or return nil
193
+ @eachers_provided.has_key? sadiekey or return nil
194
+ puts "found eachers for #{sadiekey}"
195
+ @eachers_provided[sadiekey]
196
+ end
197
+
198
+ def self.eacher( eacher_params, &block )
199
+ current_sadie_instance = Sadie::getCurrentSadieInstance
200
+ current_sadie_instance.eacher( eacher_params, &block )
201
+ end
202
+
203
+
204
+ def self.eacherFrame( sadiekey, occur_at, param=nil )
205
+ current_sadie_instance = Sadie::getCurrentSadieInstance
206
+ current_sadie_instance.eacherFrame( sadiekey, occur_at, param )
207
+ end
208
+
209
+ def eacherFrame( sadiekey, occur_at, param=nil )
210
+
211
+ key = sadiekey
212
+ if defined? @eacher_frame_redirect
213
+ if @eacher_frame_redirect.has_key? key
214
+ key = @eacher_frame_redirect[key]
215
+ end
216
+ end
217
+
218
+ puts "eacherFrame (#{key},#{occur_at})"
219
+ setEacherFrame( occur_at )
220
+ defined? param and setEacherParam( param )
221
+ if filepaths = eacherFilepaths( key )
222
+ # puts "found each file paths for key: #{key}, filepaths: #{filepaths}"
223
+ filepaths.each do |filepath|
224
+ load filepath
225
+ end
226
+ end
227
+ unsetEacherParam
228
+ unsetEacherFrame
229
+ end
230
+
231
+ def whichEacherFrame
232
+ @eacher_frame
233
+ end
234
+
235
+ def setEacherFrame( f )
236
+ @eacher_frame = f
237
+ end
238
+
239
+ def unsetEacherFrame
240
+ @eacher_frame = nil
241
+ end
242
+
243
+ def setEacherParam( p )
244
+ @eacher_param = p
245
+ end
246
+
247
+ def unsetEacherParam
248
+ @eacher_param = nil
249
+ end
250
+
251
+ def getEacherParam
252
+ @eacher_param
253
+ end
254
+ # == initialize eachers
255
+ #
256
+ # register all the eachers
257
+ #
258
+ # called by initializePrimers so it's not necessary to call this separate from that
259
+ def initializeEachers
260
+
261
+ primers_dirpath = get( "sadie.primers_dirpath" ) \
262
+ or raise "sadie.primers_dirpath not set"
263
+
264
+ puts "Initializing eachers..."
265
+ setEacherInit
266
+ initializeEacherDirectory( "", primers_dirpath )
267
+ clearEacherInit
268
+ puts "...finished initializing eachers."
269
+
270
+
271
+ @@eachers_initialized = true
272
+ end
273
+
274
+ def initializeEacherDirectory( key_prefix, current_dirpath )
275
+
276
+ puts "initializing eacher directory: #{current_dirpath}"
277
+ Dir.foreach( current_dirpath ) do |filename|
278
+
279
+ # skip the dit dirs
280
+ next if filename.eql?(".") || filename.eql?("..") || filename =~ /\~$/
281
+
282
+
283
+ filepath = File.expand_path( filename, current_dirpath )
284
+
285
+ if File.directory? filepath
286
+ new_key_prefix = key_prefix + '.' + filename
287
+ new_key_prefix = new_key_prefix.gsub(/^\.+/,"")
288
+ initializeEacherDirectory( new_key_prefix, filepath )
289
+ else
290
+ if filename =~ /\.each(?:\..*)*$/
291
+ initializeEacherFile( key_prefix, filepath )
292
+ end
293
+ end
294
+ end
295
+ end
296
+
297
+ def initializeEacherFile( key_prefix, filepath )
298
+ puts "initializing eacher file (#{key_prefix}): #{filepath}"
299
+ setCurrentPrimerFilepath filepath
300
+ setCurrentPrimerKeyPrefix key_prefix
301
+ load filepath
302
+ end
303
+
304
+ def eachersInitialized?
305
+ defined? @@eachers_initialized or return false
306
+ @@eachers_initialized and return true
307
+ return false
308
+ end
309
+
310
+
61
311
  # ==method: Sadie::registerPrimerPlugin
62
312
  #
63
313
  # this method is called in the .plugin.rb files to register new plugin types
@@ -132,32 +382,15 @@ class Sadie
132
382
 
133
383
  # internalize defaults to shortterm
134
384
  DEFAULTS.each do |key, value|
135
- # if key.eql? "sadie.primer_plugins_dirpath"
136
- # addPrimerPluginsDirPath value
137
- # else
138
385
  _set( key, value )
139
- # end
140
386
  end
141
387
 
142
- # internalize supplied defaults, postponing a set of sadie.primers_dirpath
143
- # until the end if one is supplied. The reason for this is that the setter
144
- # attempts to read the plugins and if the primer plugin dirpath has not
145
- # yet been set, then it'll choke if it processes the wrong one first
146
- # delay_set_primers_dirpath = nil
147
-
148
388
  # iterate over constructor args, but do primers_dirpath last since it
149
389
  # causes a call to initializePrimers
150
390
  options.each do |key, value|
151
- # if key.eql? "sadie.primers_dirpath"
152
- # delay_set_primers_dirpath = value
153
- # else
154
391
  set( key, value )
155
- # end
156
392
  end
157
-
158
- # defined? delay_set_primers_dirpath \
159
- # and set( "sadie.primers_dirpath", delay_set_primers_dirpath )
160
-
393
+
161
394
  # if a path to a session is given, init using session file
162
395
  if options.has_key?( "sadie.session_filepath" )
163
396
  set( "sadie.session_filepath", options["sadie.session_filepath"] )
@@ -170,13 +403,14 @@ class Sadie
170
403
  end
171
404
 
172
405
  # add the default sadie plugins dir
173
- plugins_dirpath = File.join(
174
- ENV['GEM_HOME'],
175
- "gems/sadie-#{Sadie::VERSION}",
176
- "lib/sadie/primer_plugins"
177
- )
178
- if ! File.exists? plugins_dirpath # for dev
179
- plugins_dirpath = "lib/sadie/primer_plugins"
406
+ plugins_dirpath = "lib/sadie/primer_plugins" # for dev
407
+ if ! File.exists? plugins_dirpath
408
+ plugins_dirpath = File.join(
409
+ ENV['GEM_HOME'],
410
+ "gems/sadie-#{Sadie::VERSION}",
411
+ "lib/sadie/primer_plugins"
412
+ )
413
+
180
414
  end
181
415
  addPrimerPluginsDirPath plugins_dirpath
182
416
 
@@ -197,6 +431,7 @@ class Sadie
197
431
  or @plugins_dir_paths.unshift(exppath)
198
432
 
199
433
  @@primer_plugins_initialized = nil
434
+ return self
200
435
  end
201
436
 
202
437
 
@@ -228,8 +463,6 @@ class Sadie
228
463
  # skip blank lines
229
464
  next if key.match /^\s*$/
230
465
 
231
- #puts "Prime> providing: #{key}"
232
-
233
466
  # key primed or raise error
234
467
  primed? key \
235
468
  or raise "primer definition file: #{current_primer_filepath} was supposed to define #{key}, but did not"
@@ -245,10 +478,6 @@ class Sadie
245
478
  accepts_block = arghash.has_key?( "accepts-block" ) && arghash["accepts-block"] ? true : false
246
479
  prime_on_init = arghash.has_key?( "prime-on-init" ) && arghash["prime-on-init"] ? true : false
247
480
 
248
-
249
-
250
-
251
-
252
481
  # if mid plugin init, register the plugin params with the match
253
482
  if midPluginInit?
254
483
 
@@ -257,7 +486,7 @@ class Sadie
257
486
  # midplugininit returned false, we're actually in the process of either initializing
258
487
  # a primer or actually priming
259
488
  else
260
- yield( self, getCurrentPrimerKeyPrefix, @@current_primer_filepath ) \
489
+ yield self, getCurrentPrimerKeyPrefix, @@current_primer_filepath
261
490
  end
262
491
  end
263
492
 
@@ -334,11 +563,6 @@ class Sadie
334
563
  # returns true if the destructOnGet flag is set for the key
335
564
  def destroyOnGet?( key )
336
565
  ( @flag_destroyonget.has_key?( key ) && @flag_destroyonget["#{key}"] )
337
- # @flag_destroyonget.has_key?( key ) \
338
- # or return _newline( false )
339
- # @flag_destroyonget["#{key}"] \
340
- # and return _newline( true )
341
- # return _newline(false)
342
566
  end
343
567
 
344
568
  # ==method: set
@@ -352,38 +576,13 @@ class Sadie
352
576
  # the cheap setter. key, value pairs stored via this method are kept in memory
353
577
  def setCheap( k, v )
354
578
 
355
- # puts "setCheap( #{k}, #{v} )"
356
-
357
- # if k.eql? "sadie.primer_plugins_dirpath"
358
- # puts "adding primer plugins dirpath via setCheap"
359
- # if v.respond_to? "each"
360
- # v.each do |plugindir|
361
- # addPrimerPluginsDirPath plugindir
362
- # end
363
- # else
364
- # addPrimerPluginsDirPath v
365
- # end
366
- # v = @plugins_dir_paths
367
- # end
368
-
369
-
370
-
371
579
  # set it, mark not expensive and primed
372
580
  _set( k, v )
373
581
  _expensive( k, false )
374
582
 
375
- # if we've reset the primers dirpath, init the primers
376
- # if k.eql?( "sadie.primers_dirpath" )
377
- # initializePrimers
378
- # end
379
583
 
380
584
  _primed( k, true )
381
585
 
382
- # if we've reset the primers dirpath, init the primers
383
- #if k.eql?( "sadie.primers_dirpath" )
384
- # Sadie::setCurrentSadieInstance( self )
385
- #end
386
-
387
586
  end
388
587
 
389
588
  def cheap?( k )
@@ -395,7 +594,6 @@ class Sadie
395
594
  # the expensive setter. key, value pairs stored via this method are not kept in memory
396
595
  # but are stored to file and recalled as needed
397
596
  def setExpensive(k,v)
398
- # puts "setting expensive, key: #{k}"
399
597
  expensive_filepath = _computeExpensiveFilepath( k )
400
598
  serialized_value = Marshal::dump( v )
401
599
  File.open(expensive_filepath, 'w') { |f|
@@ -452,6 +650,8 @@ class Sadie
452
650
  primerPluginsInitialized? \
453
651
  or initializePrimerPlugins
454
652
 
653
+ eachersInitialized? \
654
+ or initializeEachers
455
655
 
456
656
  primers_dirpath = get( "sadie.primers_dirpath" ) \
457
657
  or raise "sadie.primers_dirpath not set"
@@ -602,7 +802,7 @@ class Sadie
602
802
  Dir.foreach( current_dirpath ) do |filename|
603
803
 
604
804
  # skip the dit dirs
605
- next if filename.eql?(".") || filename.eql?("..")
805
+ next if filename.eql?(".") || filename.eql?("..") || filename =~ /\~$/
606
806
 
607
807
  filepath = File.expand_path( filename, current_dirpath )
608
808
 
@@ -706,7 +906,22 @@ class Sadie
706
906
  # interate over provides setting primer providers for each
707
907
  primer_provides.each do | key |
708
908
  setPrimerProvider( key, filepath, plugin_filepath, getCurrentPrimerKeyPrefix )
909
+
910
+ # # handle eachers
911
+ # if eachers_provided = getEachersProvidedByPrimer( key )
912
+ # eachers_provided.each do |eacherkey|
913
+ #
914
+ # # Sadie::prime( { "provides" => [ eacherkey ] }) do |sadie|
915
+ # # puts "calling sadie.get(#{key} to produce #{eacherkey}"
916
+ # # sadie.get key
917
+ # # end
918
+ #
919
+ # # puts "setting eacher #{eacherkey} to be provided by file: #{filepath}"
920
+ # # setPrimerProvider( eacherkey, filepath, plugin_filepath, getCurrentPrimerKeyPrefix )
921
+ # end
922
+ # end
709
923
  end
924
+
710
925
  end
711
926
 
712
927
 
@@ -754,19 +969,25 @@ class Sadie
754
969
  end
755
970
 
756
971
  def _prime ( k )
972
+ puts ">>>priming: #{k}"
757
973
 
758
- if provider = getPrimerProvider( k )
759
- primer_filepath, plugin_filepath, key_prefix = provider
974
+ if isEacherKey? k
975
+ get( getEacherDependency( k ) )
976
+ else
760
977
 
761
- setCurrentPrimerFilepath(primer_filepath)
762
- setCurrentPrimerKeyPrefix( key_prefix )
763
- Sadie::setCurrentSadieInstance( self )
978
+ Sadie::eacherFrame( k, BEFORE )
979
+ if provider = getPrimerProvider( k )
980
+ puts "got provider for sadiekey: #{k}"
981
+ primer_filepath, plugin_filepath, key_prefix = provider
764
982
 
765
- # puts "_prime( #{k} ) loading #{provider}"
766
-
767
- load plugin_filepath
983
+ setCurrentPrimerFilepath(primer_filepath)
984
+ setCurrentPrimerKeyPrefix( key_prefix )
985
+ Sadie::setCurrentSadieInstance( self )
986
+
987
+ load plugin_filepath
988
+ end
989
+ Sadie::eacherFrame( k, AFTER )
768
990
  end
769
-
770
991
  end
771
992
 
772
993
 
@@ -807,9 +1028,7 @@ class Sadie
807
1028
 
808
1029
  # direct access setter for shortterm memory
809
1030
  def _set( key, value )
810
- # puts "_set> key: #{key}, value: #{value}"
811
1031
  @shortterm["#{key}"] = value
812
- # end
813
1032
  end
814
1033
 
815
1034
  def _unset( key )
@@ -26,16 +26,25 @@ class TestSadieTwoDeep < Test::Unit::TestCase
26
26
  dbconx = sadie.get( "two.deep.test.dbi.conx" )
27
27
  assert_not_nil( dbconx )
28
28
 
29
- # test sql22darray
29
+ # test eacher
30
+ puts "!!!"
31
+ puts "!!!"
32
+ eachertest = sadie.get("simple.eacher.test")
33
+ #assert_equal( eachertest, "start12end")
34
+
35
+ # test sqlTo2DArray
30
36
  tablearray = sadie.get( "two.deep.testquery.test.sql2ar" )
37
+ puts "!!!"
38
+ puts "!!!"
31
39
  assert_not_nil( tablearray )
40
+ puts "tablearray: #{tablearray}"
32
41
  assert_equal( tablearray[0][0], 1 )
33
42
  assert_equal( tablearray[1][1], "testing456" )
34
43
 
35
44
  # test templating
36
45
  template_text = sadie.get( "two.deep.test_template.txt.tmpl" )
37
46
  template_text = template_text.gsub(/\s+/," ").gsub(/^\s*/,"").gsub(/\s*$/,"")
38
- # puts "template text\n#{template_text}"
47
+ puts "template text\n#{template_text}"
39
48
  assert( (template_text.match(/later\s+gator/)), "incorrect match on template text" )
40
49
  assert( (template_text.match(/test\/test\_primers/)), "incorrect match on template text" )
41
50
  end
@@ -0,0 +1,19 @@
1
+ require 'sadie'
2
+
3
+ Sadie::eacher( :when => Sadie::BEFORE ) do |sadie|
4
+ @testeach = "start"
5
+ puts "testeach[start]: #{@testeach}"
6
+ end
7
+
8
+ Sadie::eacher( :when => Sadie::EACH, :sadiekey => "two.deep.testquery.test.sql2ar" ) do |sadie,param|
9
+ @testeach = "#{@testeach}#{param[0]}"
10
+ puts "testeach[each]: #{@testeach}"
11
+ end
12
+
13
+ Sadie::eacher( :when => Sadie::AFTER, :provides => ["simple.eacher.test"] ) do |sadie|
14
+ @testeach = "#{@testeach}end"
15
+ sadie.set "simple.eacher.test", @testeach
16
+ puts "testeach[end]: #{@testeach}"
17
+ end
18
+
19
+ #def dsl_correct?; ( bitch_to_wrap_head_around? ) && ( rewritten_atleast_three_times? ) && ( seems_easy_now_that_its_done? ) && ( have_less_hair_now? ); end
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.35
4
+ version: 0.0.39
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-18 00:00:00.000000000Z
12
+ date: 2012-04-20 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: dbi
16
- requirement: &20670980 !ruby/object:Gem::Requirement
16
+ requirement: &11389960 !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: *20670980
24
+ version_requirements: *11389960
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mysql
27
- requirement: &20670560 !ruby/object:Gem::Requirement
27
+ requirement: &11439500 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *20670560
35
+ version_requirements: *11439500
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: dbd-mysql
38
- requirement: &20670140 !ruby/object:Gem::Requirement
38
+ requirement: &11439080 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *20670140
46
+ version_requirements: *11439080
47
47
  description: Sadie is a data framework intended to ease the pain of managing related
48
48
  data.
49
49
  email:
@@ -55,7 +55,6 @@ extra_rdoc_files:
55
55
  - CHANGELOG
56
56
  - TODO
57
57
  files:
58
- - .README.kate-swp
59
58
  - .gitignore
60
59
  - CHANGELOG
61
60
  - Gemfile
@@ -99,6 +98,7 @@ files:
99
98
  - test/test_primers/two/deep/test.dbi.conx
100
99
  - test/test_primers/two/deep/test_template.txt.tmpl
101
100
  - test/test_primers/two/deep/testquery.test.sql2ar
101
+ - test/test_primers/two/deep/testquery.test.sql2ar.each
102
102
  - test/test_primers/two/deep/two_results.res
103
103
  homepage: http://www.landmetrics.com/Sadie
104
104
  licenses: []
data/.README.kate-swp DELETED
Binary file