sadie 0.0.52 → 0.1.6

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.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +2 -1
  3. data/README +76 -22
  4. data/Rakefile +41 -1
  5. data/TODO +2 -31
  6. data/bin/sadie +17 -0
  7. data/bin/sadie_query_server +15 -0
  8. data/bin/sadie_server +27 -0
  9. data/bin/sadie_server.rb +23 -0
  10. data/doc/v2 +161 -0
  11. data/lib/primer.rb +201 -0
  12. data/lib/sadie/version.rb +1 -1
  13. data/lib/sadie_server.rb +59 -0
  14. data/lib/sadie_session.rb +194 -0
  15. data/lib/sadie_storage_manager.rb +60 -0
  16. data/lib/sadie_storage_mechanism.rb +18 -0
  17. data/lib/storage/memory.rb +24 -0
  18. data/sadie.gemspec +6 -2
  19. data/spec/primer.rb +167 -0
  20. data/spec/sadie_server.rb +39 -0
  21. data/spec/sadie_server_lib.rb +31 -0
  22. data/spec/sadie_session.rb +99 -0
  23. data/spec/storage_manager.rb +58 -0
  24. data/spec/storage_mechanisms/memory.rb +28 -0
  25. data/test/v2/test_installation/primers/minimal.rb +5 -0
  26. data/test/v2/test_installation/primers/onelevel/twolevel/test_subdir.rb +5 -0
  27. data/test/v2/test_installation/primers/test_after_each.rb +14 -0
  28. data/test/v2/test_installation/primers/test_after_key.rb +14 -0
  29. data/test/v2/test_installation/primers/test_before_each.rb +14 -0
  30. data/test/v2/test_installation/primers/test_before_key.rb +14 -0
  31. data/test/v2/test_installation/primers/test_expires_after_n_secs.rb +6 -0
  32. data/test/v2/test_installation/primers/test_expires_on_get.rb +6 -0
  33. data/test/v2/test_installation/primers/test_refresh.rb +10 -0
  34. metadata +84 -49
  35. data/lib/sadie/debug.rb +0 -1
  36. data/lib/sadie/defaults.rb +0 -14
  37. data/lib/sadie/primer_plugins/DatabaseConnection.plugin.rb +0 -80
  38. data/lib/sadie/primer_plugins/IniFile.plugin.rb +0 -23
  39. data/lib/sadie/primer_plugins/Resource.plugin.rb +0 -7
  40. data/lib/sadie/primer_plugins/SQLQueryTo2DArray.plugin.rb +0 -39
  41. data/lib/sadie/primer_plugins/TemplateTextFile.plugin.rb +0 -13
  42. data/lib/sadie.rb +0 -1315
  43. data/test/README +0 -9
  44. data/test/tc_sadie_toplevel.rb +0 -43
  45. data/test/tc_sadie_twodeep.rb +0 -48
  46. data/test/test_primers/.gitignore +0 -1
  47. data/test/test_primers/onedeep/multiresult.res +0 -5
  48. data/test/test_primers/toplevel.ini +0 -5
  49. data/test/test_primers/toplevel.somegroup.somekey.each +0 -15
  50. data/test/test_primers/toplevel_destructonget.res.rb +0 -9
  51. data/test/test_primers/toplevel_double.oneprime.each +0 -14
  52. data/test/test_primers/toplevel_double.res.rb +0 -5
  53. data/test/test_primers/toplevel_single.res.rb +0 -3
  54. data/test/test_primers/toplevel_testeach.res.rb +0 -4
  55. data/test/test_primers/two/deep/conf.ini +0 -2
  56. data/test/test_primers/two/deep/expensive.res +0 -3
  57. data/test/test_primers/two/deep/test.dbi.conx +0 -4
  58. data/test/test_primers/two/deep/test_template.txt.tmpl +0 -10
  59. data/test/test_primers/two/deep/testquery.test.sql2ar +0 -1
  60. data/test/test_primers/two/deep/testquery.test.sql2ar.each +0 -16
  61. data/test/test_primers/two/deep/two_results.res +0 -8
@@ -0,0 +1,59 @@
1
+ require 'sadie_session'
2
+
3
+ class SadieServer
4
+
5
+ attr_accessor :framework_dirpath
6
+ def initialize( params )
7
+ self.framework_dirpath = "/var/sadie"
8
+ unless params.nil?
9
+ if params.is_a? Hash
10
+ if params.has_key?( :framework_dirpath )
11
+ self.framework_dirpath = params[:framework_dirpath]
12
+ end
13
+ end
14
+ end
15
+ @sadie_session = SadieSession.new( :primers_dirpath => File.join( self.framework_dirpath, 'primers' ) )
16
+ end
17
+
18
+ def get( key )
19
+ @sadie_session.get( key )
20
+ end
21
+
22
+ def set( key, value )
23
+ @sadie_session.set( key, value )
24
+ end
25
+ #
26
+ # def query
27
+ # end
28
+ #
29
+ # def set_multiple
30
+ # end
31
+ #
32
+ # def get_multiple
33
+ # end
34
+
35
+ def self.proc_args( argv_param )
36
+ argv = argv_param.dup
37
+ ARGV.clear
38
+ ret = nil
39
+
40
+ unless argv.nil?
41
+ if argv.is_a? Array
42
+ unless argv.empty?
43
+ argv.each do |argstr|
44
+ puts "argstr: #{argstr}"
45
+ if argstr =~ /^\-\-([^\=]+)\=(.*)$/
46
+ ret = {} if ret.nil?
47
+ k,v = $1,$2
48
+ ret[k.gsub(/\-/,"_").to_sym] = v
49
+ else
50
+ ARGV.push argstr
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ ret
57
+ end
58
+
59
+ end
@@ -0,0 +1,194 @@
1
+ require 'sadie_storage_manager'
2
+ require 'storage/memory'
3
+ require 'primer'
4
+ require 'thread'
5
+ require 'rbtree'
6
+
7
+ class SadieSession
8
+ attr_accessor :primers_dirpath
9
+
10
+ def initialize( params )
11
+
12
+ @expiry_mutex = Mutex.new
13
+ @expire_schedule = MultiRBTree.new
14
+ @expiry_thread = Thread.new do
15
+ _expiry_loop
16
+ end
17
+
18
+ @refresh_mutex = Mutex.new
19
+ @refresh_schedule = MultiRBTree.new
20
+ @refresh_thread = Thread.new do
21
+ _refresh_loop
22
+ end
23
+
24
+ @registered_key = {}
25
+
26
+ unless params.nil?
27
+ if params.is_a? Hash
28
+ if params.has_key?( :primers_dirpath )
29
+ self.primers_dirpath = params[:primers_dirpath]
30
+ puts "initializing session with primer dirpath: #{self.primers_dirpath}"
31
+ _register_primers
32
+ end
33
+ end
34
+ end
35
+
36
+ @storage_manager_thread_mutex = Mutex.new
37
+ @storage_manager = SadieStorageManager.new
38
+ @storage_manager_thread_mutex.synchronize do
39
+ @storage_manager.register_storage_mechanism :memory, SadieStorageMechanismMemory.new
40
+ end
41
+ end
42
+
43
+ def has_key?( key )
44
+ @storage_manager_thread_mutex.synchronize do
45
+ @storage_manager.has_key?( key )
46
+ end
47
+ end
48
+
49
+ def primer_registered?( key )
50
+ @registered_key.has_key? key
51
+ end
52
+
53
+ def unset( key )
54
+ @storage_manager_thread_mutex.synchronize do
55
+ @storage_manager.unset( key )
56
+ end
57
+ end
58
+
59
+ def set( keys, value, params=nil )
60
+ expires, mechanism = :never, :memory
61
+ unless params.nil?
62
+ if params.is_a? Hash
63
+ expires = params[:expire] if params.has_key?( :expire )
64
+ mechanism = params[:mechanism] if params.has_key?( :mechanism )
65
+ end
66
+ end
67
+ @storage_manager_thread_mutex.synchronize do
68
+ @storage_manager.set( :keys => Array( keys ),
69
+ :value => value,
70
+ :mechanism => mechanism )
71
+ end
72
+ _manage_expiry( keys, expires ) unless expires == :never || expires == :on_get
73
+ end
74
+
75
+ def get( key )
76
+ if @storage_manager.has_key?( key )
77
+ @storage_manager.get( key )
78
+ elsif primer_registered?( key )
79
+ p = Primer.new( :session => self )
80
+ p.decorate( @registered_key[ key ] )
81
+ if p.expire == :on_get
82
+ ret = @storage_manager.get( key )
83
+ @storage_manager.unset( key )
84
+ ret
85
+ elsif ( p.refreshes? )
86
+ _manage_refresh( key, p.refresh_rate )
87
+ @storage_manager.get( key )
88
+ else
89
+ @storage_manager.get( key )
90
+ end
91
+ end
92
+ end
93
+
94
+ private
95
+
96
+ def _manage_expiry( keys, expires_seconds )
97
+ if ! expires_seconds.is_a?( Symbol ) && expires_seconds.to_i > 0
98
+ expires = expires_seconds.to_i + _current_time
99
+ unless Array(keys).empty?
100
+ Array(keys).each do |key|
101
+ @expiry_mutex.synchronize do
102
+ @expire_schedule[expires] = key
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+
109
+ def _manage_refresh( keys, refresh_seconds )
110
+ if ! refresh_seconds.is_a?( Symbol ) && refresh_seconds.to_i > 0
111
+ refreshes = refresh_seconds.to_i + _current_time
112
+ unless Array(keys).empty?
113
+ Array(keys).each do |key|
114
+ @refresh_mutex.synchronize do
115
+ @refresh_schedule[refreshes] = key
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
121
+
122
+ def _register_primers
123
+ Dir.glob( File.join( self.primers_dirpath, "**", "*.rb" ) ).each do |primer_filepath|
124
+ p = Primer.new( :session => self )
125
+ p.mode = :registration
126
+ p.decorate( primer_filepath )
127
+ _register_keys p.keys, primer_filepath
128
+ end
129
+ end
130
+
131
+ def _register_keys( keys=nil, filepath )
132
+ if ( ! keys.nil? ) && ( ! Array( keys ).empty? )
133
+ Array( keys ).each do |key|
134
+ @registered_key[key] = filepath
135
+ end
136
+ end
137
+ end
138
+
139
+ def _expiry_loop
140
+ loop do
141
+ _expiry_pass
142
+ sleep 1
143
+ end
144
+ end
145
+
146
+ def _expiry_pass
147
+ time_now_in_seconds = _current_time
148
+ @expiry_mutex.synchronize do
149
+ loop do
150
+ break if @expire_schedule.empty?
151
+ ts,key = @expire_schedule.shift
152
+ if ts < time_now_in_seconds
153
+ unset key
154
+ else
155
+ @expire_schedule[ts] = key
156
+ break
157
+ end
158
+ end
159
+ end
160
+ end
161
+
162
+ def _refresh_loop
163
+ loop do
164
+ _refresh_pass
165
+ sleep 1
166
+ end
167
+ end
168
+
169
+ def _refresh_pass
170
+ time_now_in_seconds = _current_time
171
+ loop do
172
+ break if @refresh_schedule.empty?
173
+ ts,key = @refresh_schedule.shift
174
+ if ts < time_now_in_seconds
175
+ _refresh key
176
+ else
177
+ @refresh_mutex.synchronize do
178
+ @refresh_schedule[ts] = key
179
+ end
180
+ break
181
+ end
182
+ end
183
+ end
184
+
185
+ def _refresh( key )
186
+ p = Primer.new( :session => self )
187
+ p.decorate( @registered_key[ key ] )
188
+ _manage_refresh( key, p.refresh_rate )
189
+ end
190
+
191
+ def _current_time
192
+ Time.now.to_i
193
+ end
194
+ end
@@ -0,0 +1,60 @@
1
+ class SadieStorageManager
2
+
3
+ def initialize
4
+ @mechanisms = {}
5
+ @known_keys = {}
6
+ end
7
+
8
+ def register_storage_mechanism( handle, mechanism )
9
+ @mechanisms[handle] = mechanism
10
+ end
11
+
12
+ def mechanism_is_registered?( mechanism_handle )
13
+
14
+ @mechanisms.has_key?( mechanism_handle )
15
+
16
+ end
17
+
18
+ def has_key?( key )
19
+ @known_keys.has_key?( key )
20
+ end
21
+
22
+ def get( key )
23
+ @mechanisms[@known_keys[key]].get( key ) if has_key?( key )
24
+ end
25
+
26
+ def unset( key )
27
+ if has_key?( key )
28
+ @mechanisms[@known_keys[key]].unset( key )
29
+ @known_keys.delete key
30
+ end
31
+ end
32
+
33
+ def set( params )
34
+ unless params.nil?
35
+
36
+ if params.is_a? Hash
37
+
38
+ if params.has_key?( :mechanism )
39
+
40
+ if mechanism_is_registered? params[:mechanism]
41
+
42
+ if params.has_key?( :keys ) && params[:keys].is_a?( Array ) &&
43
+ params.has_key?( :value )
44
+
45
+ params[:keys].each do |key|
46
+ @mechanisms[params[:mechanism]].set( key, params[:value] )
47
+ @known_keys[key] = params[:mechanism]
48
+ end
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+ end
59
+
60
+ end
@@ -0,0 +1,18 @@
1
+ class SadieStorageMechanism
2
+
3
+ def initialize
4
+ end
5
+
6
+ def set( key, value )
7
+ false
8
+ end
9
+
10
+ def get( key )
11
+ nil
12
+ end
13
+
14
+ def unset( key )
15
+ nil
16
+ end
17
+
18
+ end
@@ -0,0 +1,24 @@
1
+ require 'sadie_storage_mechanism'
2
+ class SadieStorageMechanismMemory < SadieStorageMechanism
3
+
4
+ def initialize
5
+ @storage_hash = {}
6
+ end
7
+
8
+ def set( key, value )
9
+ @storage_hash[key] = value
10
+ end
11
+
12
+ def get( key )
13
+ @storage_hash[key] if @storage_hash.has_key?( key )
14
+ end
15
+
16
+ def unset( key )
17
+ @storage_hash.delete key
18
+ end
19
+
20
+ def has_key?( key )
21
+ @storage_hash.has_key?( key )
22
+ end
23
+
24
+ end
data/sadie.gemspec CHANGED
@@ -23,8 +23,12 @@ Gem::Specification.new do |s|
23
23
  # s.add_runtime_dependency "rest-client"
24
24
 
25
25
  #s.add_runtime_dependency "ini"
26
- s.add_runtime_dependency "dbi"
26
+ #s.add_runtime_dependency "dbi"
27
27
  #s.add_runtime_dependency "mysql2"
28
- s.add_runtime_dependency "dbd-mysql"
28
+ #s.add_runtime_dependency "dbd-mysql"
29
+ s.add_runtime_dependency "sinatra", "~> 1.4.4"
30
+ s.add_runtime_dependency "rbtree", "~> 0.4.2"
31
+ s.add_development_dependency "rspec"
32
+ s.add_development_dependency "rack-test"
29
33
  s.extra_rdoc_files = ['README', 'CHANGELOG', 'TODO']
30
34
  end
data/spec/primer.rb ADDED
@@ -0,0 +1,167 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
+
3
+ require 'primer'
4
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
5
+ # require 'sadie_storage_manager'
6
+ # require 'storage_mechanisms/memory'
7
+ require 'sadie_session'
8
+ require 'pp'
9
+
10
+ describe Primer do
11
+
12
+ it "should default to the memory storage mechanism" do
13
+ p = Primer.new
14
+ p.storage_mechanism.should == :memory
15
+ end
16
+
17
+ it "should be able to successfully set using a storage manager" do
18
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
19
+ p = Primer.new( :session => session )
20
+ p.prime [ "simple.test"] do
21
+ p.assign [ "simple.test" ] do
22
+ p.set( "simple.value" )
23
+ end
24
+ end
25
+ session.get( "simple.test" ).should == "simple.value"
26
+ end
27
+
28
+ it "should not allow assignment for keys not mentioned in the prime directive" do
29
+ expect {
30
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
31
+ # storage = SadieStorageManager.new
32
+ # mech = SadieStorageMechanismMemory.new
33
+ # storage.register_storage_mechanism :memory, mech
34
+ p = Primer.new( :session => session )
35
+ p.prime [ "simple.test"] do
36
+ p.assign [ "simple.other" ]
37
+ end
38
+ }.to raise_error
39
+
40
+ end
41
+
42
+ it "should not allow set for keys not mentioned in the assign directive" do
43
+ expect {
44
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
45
+ p = Primer.new( :session => session )
46
+ p.prime [ "simple.test"] do
47
+ p.assign [ "simple.test" ] do
48
+ p.set ["simple.other"], "someval"
49
+ end
50
+ end
51
+ }.to raise_error
52
+ end
53
+
54
+ it "should be ok to use strings instead of arrays for prime" do
55
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
56
+ p = Primer.new( :session => session )
57
+ p.prime "simple.test" do
58
+ p.assign [ "simple.test" ] do
59
+ p.set "someval"
60
+ end
61
+ end
62
+ session.get("simple.test").should == "someval"
63
+ end
64
+
65
+ it "should be ok to use strings instead of arrays for assign" do
66
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
67
+ p = Primer.new( :session => session )
68
+ p.prime ["simple.test"] do
69
+ p.assign "simple.test" do
70
+ p.set "someval"
71
+ end
72
+ end
73
+ session.get("simple.test").should == "someval"
74
+ end
75
+
76
+ it "should be ok to use strings instead of arrays for set" do
77
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
78
+ p = Primer.new( :session => session )
79
+ p.prime ["simple.test"] do
80
+ p.assign "simple.test" do
81
+ p.set "simple.test","someval"
82
+ end
83
+ end
84
+ session.get("simple.test").should == "someval"
85
+ end
86
+
87
+ it "should successfully load a primer file using decorate method" do
88
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
89
+ p = Primer.new( :session => session )
90
+ p.decorate( File.join(File.dirname(__FILE__), '..', 'test', 'v2', 'test_installation', 'primers', 'minimal.rb') )
91
+ session.get( "minimal.primer" ).should == "testval"
92
+ end
93
+
94
+ it "should successfully execute before each clauses" do
95
+
96
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
97
+ p = Primer.new( :session => session )
98
+ def p.get_r
99
+ @r
100
+ end
101
+ p.decorate( File.join(File.dirname(__FILE__), '..', 'test', 'v2', 'test_installation', 'primers', 'test_before_each.rb') )
102
+ session.get( "test.var1" ).should == "val1"
103
+ session.get( "test.var2" ).should == "val2"
104
+ r= p.get_r
105
+ r.has_key?("test.var1").should be_true
106
+ r.has_key?("test.var2").should be_true
107
+ r["test.var1"].should == 1
108
+ r["test.var2"].should == 1
109
+ end
110
+
111
+ it "should successfully execute before key clauses" do
112
+
113
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
114
+ p = Primer.new( :session => session )
115
+ def p.get_r
116
+ @r
117
+ end
118
+ p.decorate( File.join(File.dirname(__FILE__), '..', 'test', 'v2', 'test_installation', 'primers', 'test_before_key.rb') )
119
+ session.get( "test.var1" ).should == "val1"
120
+ session.get( "test.var2" ).should == "val2"
121
+ r= p.get_r
122
+ r.has_key?("test.var1").should be_true
123
+ r.has_key?("test.var2").should be_false
124
+ r["test.var1"].should == 1
125
+ end
126
+
127
+ it "should successfully execute after each clauses" do
128
+
129
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
130
+ p = Primer.new( :session => session )
131
+ def p.get_r
132
+ @r
133
+ end
134
+ p.decorate( File.join(File.dirname(__FILE__), '..', 'test', 'v2', 'test_installation', 'primers', 'test_after_each.rb') )
135
+ session.get( "test.var1" ).should == "val1"
136
+ session.get( "test.var2" ).should == "val2"
137
+ r= p.get_r
138
+ r.has_key?("test.var1").should be_true
139
+ r.has_key?("test.var2").should be_true
140
+ r["test.var1"].should == "val1"
141
+ r["test.var2"].should == "val2"
142
+ end
143
+
144
+ it "should successfully execute after key clauses" do
145
+
146
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
147
+ p = Primer.new( :session => session )
148
+ def p.get_r
149
+ @r
150
+ end
151
+ p.decorate( File.join(File.dirname(__FILE__), '..', 'test', 'v2', 'test_installation', 'primers', 'test_after_key.rb') )
152
+ session.get( "test.var1" ).should == "val1"
153
+ session.get( "test.var2" ).should == "val2"
154
+ r= p.get_r
155
+ r.has_key?("test.var1").should be_true
156
+ r.has_key?("test.var2").should be_false
157
+ r["test.var1"].should == "val1"
158
+ end
159
+
160
+ it "should set the refresh rate" do
161
+ session = SadieSession.new( :primers_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation','primers' ))
162
+ p = Primer.new( :session => session )
163
+ p.decorate( File.join(File.dirname(__FILE__), '..', 'test', 'v2', 'test_installation', 'primers', 'test_refresh.rb') )
164
+ p.refresh_rate.should == 2
165
+ end
166
+
167
+ end
@@ -0,0 +1,39 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
+ $:.unshift File.join(File.dirname(__FILE__), '..')
3
+
4
+ require 'sadie_server'
5
+
6
+ class SadieServer
7
+ def self.proc_args( argv )
8
+ { :framework_dirpath => File.join( File.dirname( __FILE__ ), '..','test','v2','test_installation' ) }
9
+ end
10
+ end
11
+
12
+ require 'bin/sadie_server'
13
+ require 'rack/test'
14
+
15
+ describe 'the sadie server app' do
16
+
17
+ include Rack::Test::Methods
18
+
19
+ def app
20
+ Sinatra::Application
21
+ end
22
+
23
+ it "returns the correct value" do
24
+ get '/minimal.primer'
25
+ expect(last_response).to be_ok
26
+ expect(last_response.body).to eq('testval')
27
+ end
28
+
29
+ it "updates via post" do
30
+ fields = {
31
+ :value => 'testval99'
32
+ }
33
+ post '/set.via.post', fields
34
+ expect(last_response).to be_ok
35
+ get '/set.via.post'
36
+ expect(last_response).to be_ok
37
+ expect(last_response.body).to eq('testval99')
38
+ end
39
+ end
@@ -0,0 +1,31 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
+ require 'sadie_server'
3
+ require 'pp'
4
+ describe SadieServer do
5
+
6
+ describe '#proc_args' do
7
+
8
+ it "should accept a framework-dirpath arg" do
9
+
10
+ result = SadieServer::proc_args ["--framework-dirpath=/tmp/sadietest"]
11
+ result.should_not be_nil
12
+ result.is_a?( Hash ).should be_true
13
+ result.has_key?( :framework_dirpath ).should be_true
14
+ result[:framework_dirpath].should == '/tmp/sadietest'
15
+
16
+ end
17
+
18
+ end
19
+
20
+ describe "#initialize" do
21
+
22
+ it "should store the framework dirpath" do
23
+
24
+ serv = SadieServer.new( SadieServer::proc_args( ["--framework-dirpath=/tmp/sadietest"] ) )
25
+ serv.framework_dirpath.should == '/tmp/sadietest'
26
+
27
+ end
28
+
29
+ end
30
+
31
+ end