neptune 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. data/README +7 -4
  2. data/doc/AppControllerClient.html +12 -4
  3. data/doc/CommonFunctions.html +55 -42
  4. data/doc/Kernel.html +187 -0
  5. data/doc/LICENSE.html +2 -0
  6. data/doc/Object.html +488 -198
  7. data/doc/README.html +26 -5
  8. data/doc/bin/neptune.html +1 -1
  9. data/doc/created.rid +6 -6
  10. data/doc/index.html +20 -2
  11. data/doc/lib/app_controller_client_rb.html +2 -2
  12. data/doc/lib/common_functions_rb.html +2 -2
  13. data/doc/lib/neptune_rb.html +3 -1
  14. data/lib/app_controller_client.rb +2 -2
  15. data/lib/common_functions.rb +50 -24
  16. data/lib/neptune.rb +224 -159
  17. data/samples/appscale/add_appserver.rb +10 -0
  18. data/samples/appscale/add_database.rb +9 -0
  19. data/samples/appscale/add_loadbalancer.rb +9 -0
  20. data/samples/appscale/add_slave.rb +9 -0
  21. data/samples/c/compile_helloworld.rb +10 -0
  22. data/samples/c/helloworld/helloworld.c +6 -0
  23. data/samples/erlang/compile_erlang_ring.rb +10 -0
  24. data/samples/erlang/get_erlang_output.rb +8 -0
  25. data/samples/erlang/ring/Makefile +3 -0
  26. data/samples/erlang/ring/ring.erl +90 -0
  27. data/samples/erlang/run_erlang_ring.rb +6 -0
  28. data/samples/go/compile_hello.rb +10 -0
  29. data/samples/go/get_hello_output.rb +6 -0
  30. data/samples/go/hello/hello.go +8 -0
  31. data/samples/go/put_input.rb +8 -0
  32. data/samples/go/run_hello.rb +9 -0
  33. data/samples/mapreduce/expected-output.txt +7078 -0
  34. data/samples/mapreduce/get_mapreduce_output.rb +4 -0
  35. data/samples/mapreduce/hadoop-0.20.0-examples.jar +0 -0
  36. data/samples/mapreduce/input-10 +64 -0
  37. data/samples/mapreduce/input-30 +64 -0
  38. data/samples/mapreduce/input-7 +4 -0
  39. data/samples/mapreduce/map.rb +48 -0
  40. data/samples/mapreduce/reduce.rb +48 -0
  41. data/samples/mapreduce/run_java_mr.rb +14 -0
  42. data/samples/mapreduce/run_mapreduce.rb +13 -0
  43. data/samples/mapreduce/the-end-of-time.txt +11256 -0
  44. data/samples/mpi/Makefile +22 -0
  45. data/samples/mpi/MpiQueen +0 -0
  46. data/samples/mpi/compile_mpi_ring.rb +10 -0
  47. data/samples/mpi/compile_x10_nqueens.rb +8 -0
  48. data/samples/mpi/cpi +0 -0
  49. data/samples/mpi/get_mpi_output.rb +5 -0
  50. data/samples/mpi/get_ring_output.rb +5 -0
  51. data/samples/mpi/hw2.c +205 -0
  52. data/samples/mpi/hw2harness.c +84 -0
  53. data/samples/mpi/hw2harness.h +45 -0
  54. data/samples/mpi/powermethod +0 -0
  55. data/samples/mpi/ring/Makefile +2 -0
  56. data/samples/mpi/ring/Ring.c +76 -0
  57. data/samples/mpi/run_mpi_cpi.rb +10 -0
  58. data/samples/mpi/run_mpi_nqueens.np +6 -0
  59. data/samples/mpi/run_mpi_powermethod.rb +8 -0
  60. data/samples/mpi/run_mpi_ring.rb +12 -0
  61. data/samples/r/compile_hello.rb +10 -0
  62. data/samples/r/get_hello_output.rb +6 -0
  63. data/samples/r/hello/hello.r +1 -0
  64. data/samples/r/put_input.rb +8 -0
  65. data/samples/r/run_hello.rb +9 -0
  66. data/samples/upc/compile_upc_helloworld.rb +10 -0
  67. data/samples/upc/compile_upc_ring.rb +11 -0
  68. data/samples/upc/get_mpi_output.rb +8 -0
  69. data/samples/upc/helloworld/HelloWorld.c +9 -0
  70. data/samples/upc/helloworld/Makefile +3 -0
  71. data/samples/upc/ring/Makefile +3 -0
  72. data/samples/upc/ring/Ring.c +116 -0
  73. data/samples/upc/run_upc_helloworld.rb +12 -0
  74. data/samples/upc/run_upc_ring.rb +12 -0
  75. data/samples/x10/MyPowerMethod +0 -0
  76. data/samples/x10/MyPowerMethod.x10 +236 -0
  77. data/samples/x10/NQueensDist +0 -0
  78. data/samples/x10/NQueensDist.x10 +112 -0
  79. data/samples/x10/compile_x10_nqueens.rb +7 -0
  80. data/samples/x10/compile_x10_ring.rb +12 -0
  81. data/samples/x10/get_x10_output.rb +8 -0
  82. data/samples/x10/ring/Makefile +3 -0
  83. data/samples/x10/ring/Ring.x10 +28 -0
  84. data/samples/x10/ring/RingOld.x10 +68 -0
  85. data/samples/x10/run_x10_nqueens.rb +6 -0
  86. data/samples/x10/run_x10_powermethod.rb +7 -0
  87. data/samples/x10/run_x10_ring.rb +6 -0
  88. data/test/{tc_c.rb → integration/tc_c.rb} +2 -2
  89. data/test/{tc_dfsp.rb → integration/tc_dfsp.rb} +0 -0
  90. data/test/{tc_dwssa.rb → integration/tc_dwssa.rb} +0 -0
  91. data/test/{tc_erlang.rb → integration/tc_erlang.rb} +0 -0
  92. data/test/{tc_mapreduce.rb → integration/tc_mapreduce.rb} +0 -0
  93. data/test/{tc_mpi.rb → integration/tc_mpi.rb} +0 -0
  94. data/test/{tc_storage.rb → integration/tc_storage.rb} +0 -0
  95. data/test/{tc_upc.rb → integration/tc_upc.rb} +0 -0
  96. data/test/{tc_x10.rb → integration/tc_x10.rb} +0 -0
  97. data/test/{test_helper.rb → integration/test_helper.rb} +0 -0
  98. data/test/{ts_neptune.rb → integration/ts_neptune.rb} +2 -2
  99. data/test/unit/test_app_controller_client.rb +106 -0
  100. data/test/unit/test_common_functions.rb +106 -0
  101. data/test/unit/test_neptune.rb +208 -0
  102. data/test/unit/ts_all.rb +6 -0
  103. metadata +91 -15
data/README CHANGED
@@ -40,8 +40,7 @@ ts_neptune, you should export the environment variable APPSCALE_HEAD_NODE,
40
40
  which should be set to the IP address of the AppScale machine that runs
41
41
  the Shadow daemon (a.k.a. the Master AppController). Running
42
42
  generate_coverage.sh in the top-level directory will run rcov
43
- and generate the coverage reports automatically - currently this process
44
- takes about an hour.
43
+ and generate the coverage reports automatically via unit tests.
45
44
 
46
45
  Developed by Chris Bunch as part of the AppScale project.
47
46
  See LICENSE for the specifics of the New BSD License
@@ -61,11 +60,15 @@ of computation. We would also like to refactor Neptune to use
61
60
  symbols instead of instance variables for running jobs: this
62
61
  will likely appear in a future release as well.
63
62
 
64
- An academic paper describing Neptune is in the works - check
65
- in for a link to that as it becomes available.
63
+ Our academic paper on Neptune won best paper at ACM ScienceCloud 2011!
64
+ <a href='http://www.neptune-lang.org/2011/6/Neptune-Picks-up-Best-Paper-at-ScienceCloud-2011'>
65
+ Here's a link</a> to the abstract of the paper and the PDF.
66
66
 
67
67
  Version History:
68
68
 
69
+ November 10, 2011 - 0.1.2 released, adding unit tests and
70
+ refactoring all around.
71
+
69
72
  June 6, 2011 - 0.1.1 released, adding support for code
70
73
  written in Go and R
71
74
 
@@ -127,6 +127,8 @@
127
127
 
128
128
  <li><a href="./CommonFunctions.html">CommonFunctions</a></li>
129
129
 
130
+ <li><a href="./Kernel.html">Kernel</a></li>
131
+
130
132
  <li><a href="./Object.html">Object</a></li>
131
133
 
132
134
  </ul>
@@ -160,9 +162,11 @@ AppScale Tools, but with non-Neptune SOAP calls removed.</p>
160
162
  <div id="conn-attribute-method" class="method-detail">
161
163
  <a name="conn"></a>
162
164
 
165
+ <a name="conn="></a>
166
+
163
167
  <div class="method-heading attribute-method-heading">
164
168
  <span class="method-name">conn</span><span
165
- class="attribute-access-type">[R]</span>
169
+ class="attribute-access-type">[RW]</span>
166
170
  </div>
167
171
 
168
172
  <div class="method-description">
@@ -175,9 +179,11 @@ AppScale Tools, but with non-Neptune SOAP calls removed.</p>
175
179
  <div id="ip-attribute-method" class="method-detail">
176
180
  <a name="ip"></a>
177
181
 
182
+ <a name="ip="></a>
183
+
178
184
  <div class="method-heading attribute-method-heading">
179
185
  <span class="method-name">ip</span><span
180
- class="attribute-access-type">[R]</span>
186
+ class="attribute-access-type">[RW]</span>
181
187
  </div>
182
188
 
183
189
  <div class="method-description">
@@ -190,9 +196,11 @@ AppScale Tools, but with non-Neptune SOAP calls removed.</p>
190
196
  <div id="secret-attribute-method" class="method-detail">
191
197
  <a name="secret"></a>
192
198
 
199
+ <a name="secret="></a>
200
+
193
201
  <div class="method-heading attribute-method-heading">
194
202
  <span class="method-name">secret</span><span
195
- class="attribute-access-type">[R]</span>
203
+ class="attribute-access-type">[RW]</span>
196
204
  </div>
197
205
 
198
206
  <div class="method-description">
@@ -485,7 +493,7 @@ parameter.</p>
485
493
  <span class="ruby-comment"># File lib/app_controller_client.rb, line 96</span>
486
494
  def put_input(job_data)
487
495
  result = <span class="ruby-string">&quot;&quot;</span>
488
- make_call(<span class="ruby-constant">NO_TIMEOUT</span>, false) {
496
+ make_call(<span class="ruby-constant">NO_TIMEOUT</span>, false) {
489
497
  result = conn.neptune_put_input(job_data, <span class="ruby-ivar">@secret</span>)
490
498
  }
491
499
  abort(result) if result =~ <span class="ruby-regexp">/Error:/</span>
@@ -112,6 +112,8 @@
112
112
 
113
113
  <li><a href="./CommonFunctions.html">CommonFunctions</a></li>
114
114
 
115
+ <li><a href="./Kernel.html">Kernel</a></li>
116
+
115
117
  <li><a href="./Object.html">Object</a></li>
116
118
 
117
119
  </ul>
@@ -153,7 +155,7 @@ over code and input files.</p>
153
155
 
154
156
  <div class="method-heading">
155
157
  <span class="method-name">get_from_yaml</span><span
156
- class="method-args">(keyname, tag, required=true)</span>
158
+ class="method-args">(keyname, tag, required=true, file=File, yaml=YAML)</span>
157
159
  <span class="method-click-advice">click to toggle source</span>
158
160
  </div>
159
161
 
@@ -172,17 +174,21 @@ instead.</p>
172
174
  <div class="method-source-code"
173
175
  id="get_from_yaml-source">
174
176
  <pre>
175
- <span class="ruby-comment"># File lib/common_functions.rb, line 82</span>
176
- def self.get_from_yaml(keyname, tag, required=true)
177
- location_file = <span class="ruby-constant">File</span>.expand_path(&quot;~/.appscale/locations-#{keyname}.yaml&quot;)
177
+ <span class="ruby-comment"># File lib/common_functions.rb, line 91</span>
178
+ def self.get_from_yaml(keyname, tag, required=true, file=<span class="ruby-constant">File</span>, yaml=<span class="ruby-constant">YAML</span>)
179
+ location_file = file.expand_path(&quot;~/.appscale/locations-#{keyname}.yaml&quot;)
178
180
 
179
- abort(&quot;An AppScale instance is not currently running with the provided keyname, \&quot;#{keyname}\&quot;.&quot;) unless <span class="ruby-constant">File</span>.exists?(location_file)
181
+ if !file.exists?(location_file)
182
+ abort(<span class="ruby-string">&quot;An AppScale instance is not currently running with the provided&quot;</span> +
183
+ &quot; keyname, \&quot;#{keyname}\&quot;.&quot;)
184
+ end
180
185
 
181
186
  begin
182
- tree = <span class="ruby-constant">YAML</span>.load_file(location_file)
187
+ tree = yaml.load_file(location_file)
183
188
  rescue <span class="ruby-constant">ArgumentError</span>
184
189
  if required
185
- abort(<span class="ruby-string">&quot;The yaml file you provided was malformed. Please correct any errors in it and try again.&quot;</span>)
190
+ abort(<span class="ruby-string">&quot;The yaml file you provided was malformed. Please correct any&quot;</span> +
191
+ <span class="ruby-string">&quot; errors in it and try again.&quot;</span>)
186
192
  else
187
193
  return nil
188
194
  end
@@ -190,8 +196,12 @@ def self.get_from_yaml(keyname, tag, required=true)
190
196
 
191
197
  value = tree[tag]
192
198
 
193
- bad_yaml_format_msg = &quot;The file #{location_file} is in the wrong format and doesn't contain a #{tag} tag. Please make sure the file is in the correct format and try again&quot;
194
- abort(bad_yaml_format_msg) if value.nil? and required
199
+ if value.nil? and required
200
+ abort(&quot;The file #{location_file} is in the wrong format and doesn't&quot; +
201
+ &quot; contain a #{tag} tag. Please make sure the file is in the correct&quot; +
202
+ <span class="ruby-string">&quot; format and try again.&quot;</span>)
203
+ end
204
+
195
205
  return value
196
206
  end</pre>
197
207
  </div>
@@ -210,7 +220,7 @@ end</pre>
210
220
 
211
221
  <div class="method-heading">
212
222
  <span class="method-name">get_secret_key</span><span
213
- class="method-args">(keyname, required=true)</span>
223
+ class="method-args">(keyname, required=true, file=File, yaml=YAML)</span>
214
224
  <span class="method-click-advice">click to toggle source</span>
215
225
  </div>
216
226
 
@@ -227,9 +237,9 @@ function, as the secret is stored in a YAML file.</p>
227
237
  <div class="method-source-code"
228
238
  id="get_secret_key-source">
229
239
  <pre>
230
- <span class="ruby-comment"># File lib/common_functions.rb, line 107</span>
231
- def self.get_secret_key(keyname, required=true)
232
- return <span class="ruby-constant">CommonFunctions</span>.get_from_yaml(keyname, :secret)
240
+ <span class="ruby-comment"># File lib/common_functions.rb, line 124</span>
241
+ def self.get_secret_key(keyname, required=true, file=<span class="ruby-constant">File</span>, yaml=<span class="ruby-constant">YAML</span>)
242
+ return <span class="ruby-constant">CommonFunctions</span>.get_from_yaml(keyname, :secret, required, file, yaml)
233
243
  end</pre>
234
244
  </div>
235
245
 
@@ -247,7 +257,7 @@ end</pre>
247
257
 
248
258
  <div class="method-heading">
249
259
  <span class="method-name">scp_file</span><span
250
- class="method-args">(local_file_loc, remote_file_loc, target_ip, public_key_loc, is_dir=false)</span>
260
+ class="method-args">(local_file_loc, remote_file_loc, target_ip, public_key_loc, is_dir=false, file=File, fileutils=FileUtils, kernel=Kernel)</span>
251
261
  <span class="method-click-advice">click to toggle source</span>
252
262
  </div>
253
263
 
@@ -267,43 +277,40 @@ a directory, we append the -r flag to scp as well.</p>
267
277
  <div class="method-source-code"
268
278
  id="scp_file-source">
269
279
  <pre>
270
- <span class="ruby-comment"># File lib/common_functions.rb, line 37</span>
271
- def self.scp_file(local_file_loc, remote_file_loc, target_ip, public_key_loc, is_dir=false)
280
+ <span class="ruby-comment"># File lib/common_functions.rb, line 49</span>
281
+ def self.scp_file(local_file_loc, remote_file_loc, target_ip, public_key_loc,
282
+ is_dir=false, file=<span class="ruby-constant">File</span>, fileutils=<span class="ruby-constant">FileUtils</span>, kernel=<span class="ruby-constant">Kernel</span>)
272
283
  cmd = <span class="ruby-string">&quot;&quot;</span>
273
- local_file_loc = <span class="ruby-constant">File</span>.expand_path(local_file_loc)
284
+ local_file_loc = file.expand_path(local_file_loc)
274
285
 
275
286
  ssh_args = <span class="ruby-string">&quot;-o StrictHostkeyChecking=no 2&gt;&amp;1&quot;</span>
276
287
  ssh_args &lt;&lt; <span class="ruby-string">&quot; -r &quot;</span> if is_dir
277
288
 
278
- if public_key_loc.class == <span class="ruby-constant">Array</span>
279
- public_key_loc.each { |key|
280
- key = <span class="ruby-constant">File</span>.expand_path(key)
281
- }
282
-
283
- cmd = &quot;scp -i #{public_key_loc.join(' -i ')} #{ssh_args} #{local_file_loc} root@#{target_ip}:#{remote_file_loc}&quot;
284
- else
285
- public_key_loc = <span class="ruby-constant">File</span>.expand_path(public_key_loc)
286
- cmd = &quot;scp -i #{public_key_loc} #{ssh_args} #{local_file_loc} root@#{target_ip}:#{remote_file_loc}&quot;
287
- end
288
-
289
+ public_key_loc = file.expand_path(public_key_loc)
290
+ cmd = &quot;scp -i #{public_key_loc} #{ssh_args} #{local_file_loc} root@#{target_ip}:#{remote_file_loc}&quot;
289
291
  cmd &lt;&lt; <span class="ruby-string">&quot;; echo $? &gt;&gt; ~/.appscale/retval&quot;</span>
290
292
 
291
- retval_loc = <span class="ruby-constant">File</span>.expand_path(<span class="ruby-string">&quot;~/.appscale/retval&quot;</span>)
292
- <span class="ruby-constant">FileUtils</span>.rm_f(retval_loc)
293
+ retval_loc = file.expand_path(<span class="ruby-string">&quot;~/.appscale/retval&quot;</span>)
294
+ fileutils.rm_f(retval_loc)
293
295
 
294
296
  begin
295
- <span class="ruby-constant">Timeout</span>::timeout(-1) { `#{cmd}` }
297
+ <span class="ruby-constant">Timeout</span>::timeout(-1) { kernel.shell(&quot;#{cmd}&quot;) }
296
298
  rescue <span class="ruby-constant">Timeout</span>::<span class="ruby-constant">Error</span>
297
- abort(&quot;Remotely copying over files failed. Is the destination machine on and reachable from this computer? We tried the following command:\n\n#{cmd}&quot;)
299
+ abort(<span class="ruby-string">&quot;Remotely copying over files failed. Is the destination machine&quot;</span> +
300
+ <span class="ruby-string">&quot; on and reachable from this computer? We tried the following&quot;</span> +
301
+ &quot; command:\n\n#{cmd}&quot;)
298
302
  end
299
303
 
300
304
  loop {
301
- break if <span class="ruby-constant">File</span>.exists?(retval_loc)
305
+ break if file.exists?(retval_loc)
302
306
  sleep(5)
303
307
  }
304
308
 
305
- retval = (<span class="ruby-constant">File</span>.open(retval_loc) { |f| f.read }).chomp
306
- abort(&quot;\n\n[#{cmd}] returned #{retval} instead of 0 as expected. Is your environment set up properly?&quot;) if retval != <span class="ruby-string">&quot;0&quot;</span>
309
+ retval = (file.open(retval_loc) { |f| f.read }).chomp
310
+ if retval != <span class="ruby-string">&quot;0&quot;</span>
311
+ abort(&quot;\n\n[#{cmd}] returned #{retval} instead of 0 as expected. Is &quot; +
312
+ <span class="ruby-string">&quot;your environment set up properly?&quot;</span>)
313
+ end
307
314
  return cmd
308
315
  end</pre>
309
316
  </div>
@@ -322,7 +329,7 @@ end</pre>
322
329
 
323
330
  <div class="method-heading">
324
331
  <span class="method-name">scp_to_shadow</span><span
325
- class="method-args">(local_file_loc, remote_file_loc, keyname, is_dir=false)</span>
332
+ class="method-args">(local_file_loc, remote_file_loc, keyname, is_dir=false, file=File, get_from_yaml=CommonFunctions.method(:get_from_yaml), scp_file=CommonFunctions.method(:scp_file))</span>
326
333
  <span class="method-click-advice">click to toggle source</span>
327
334
  </div>
328
335
 
@@ -339,12 +346,18 @@ by the Neptune job given, but defaults to ”appscale” if not provided.</p>
339
346
  <div class="method-source-code"
340
347
  id="scp_to_shadow-source">
341
348
  <pre>
342
- <span class="ruby-comment"># File lib/common_functions.rb, line 24</span>
343
- def self.scp_to_shadow(local_file_loc, remote_file_loc, keyname, is_dir=false)
344
- shadow_ip = <span class="ruby-constant">CommonFunctions</span>.get_from_yaml(keyname, :shadow)
345
- ssh_key = <span class="ruby-constant">File</span>.expand_path(&quot;~/.appscale/#{keyname}.key&quot;)
346
-
347
- self.scp_file(local_file_loc, remote_file_loc, shadow_ip, ssh_key, is_dir)
349
+ <span class="ruby-comment"># File lib/common_functions.rb, line 30</span>
350
+ def self.scp_to_shadow(local_file_loc,
351
+ remote_file_loc,
352
+ keyname,
353
+ is_dir=false,
354
+ file=<span class="ruby-constant">File</span>,
355
+ get_from_yaml=<span class="ruby-constant">CommonFunctions</span>.method(:get_from_yaml),
356
+ scp_file=<span class="ruby-constant">CommonFunctions</span>.method(:scp_file))
357
+
358
+ shadow_ip = get_from_yaml.call(keyname, :shadow, file)
359
+ ssh_key = file.expand_path(&quot;~/.appscale/#{keyname}.key&quot;)
360
+ scp_file.call(local_file_loc, remote_file_loc, shadow_ip, ssh_key, is_dir)
348
361
  end</pre>
349
362
  </div>
350
363
 
data/doc/Kernel.html ADDED
@@ -0,0 +1,187 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
7
+
8
+ <title>Module: Kernel</title>
9
+
10
+ <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
11
+
12
+ <script src="./js/jquery.js" type="text/javascript"
13
+ charset="utf-8"></script>
14
+ <script src="./js/thickbox-compressed.js" type="text/javascript"
15
+ charset="utf-8"></script>
16
+ <script src="./js/quicksearch.js" type="text/javascript"
17
+ charset="utf-8"></script>
18
+ <script src="./js/darkfish.js" type="text/javascript"
19
+ charset="utf-8"></script>
20
+
21
+ </head>
22
+ <body class="module">
23
+
24
+ <div id="metadata">
25
+ <div id="home-metadata">
26
+ <div id="home-section" class="section">
27
+ <h3 class="section-header">
28
+ <a href="./index.html">Home</a>
29
+ <a href="./index.html#classes">Classes</a>
30
+ <a href="./index.html#methods">Methods</a>
31
+ </h3>
32
+ </div>
33
+ </div>
34
+
35
+ <div id="file-metadata">
36
+ <div id="file-list-section" class="section">
37
+ <h3 class="section-header">In Files</h3>
38
+ <div class="section-body">
39
+ <ul>
40
+
41
+ <li><a href="./lib/common_functions_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
42
+ class="thickbox" title="lib/common_functions.rb">lib/common_functions.rb</a></li>
43
+
44
+ </ul>
45
+ </div>
46
+ </div>
47
+
48
+
49
+ </div>
50
+
51
+ <div id="class-metadata">
52
+
53
+ <!-- Parent Class -->
54
+
55
+
56
+ <!-- Namespace Contents -->
57
+
58
+
59
+ <!-- Method Quickref -->
60
+
61
+ <div id="method-list-section" class="section">
62
+ <h3 class="section-header">Methods</h3>
63
+ <ul class="link-list">
64
+
65
+ <li><a href="#method-i-shell">#shell</a></li>
66
+
67
+ </ul>
68
+ </div>
69
+
70
+
71
+ <!-- Included Modules -->
72
+
73
+ </div>
74
+
75
+ <div id="project-metadata">
76
+
77
+
78
+ <div id="fileindex-section" class="section project-section">
79
+ <h3 class="section-header">Files</h3>
80
+ <ul>
81
+
82
+ <li class="file"><a href="./LICENSE.html">LICENSE</a></li>
83
+
84
+ <li class="file"><a href="./README.html">README</a></li>
85
+
86
+ </ul>
87
+ </div>
88
+
89
+
90
+ <div id="classindex-section" class="section project-section">
91
+ <h3 class="section-header">Class/Module Index
92
+ <span class="search-toggle"><img src="./images/find.png"
93
+ height="16" width="16" alt="[+]"
94
+ title="show/hide quicksearch" /></span></h3>
95
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
96
+ <fieldset>
97
+ <legend>Quicksearch</legend>
98
+ <input type="text" name="quicksearch" value=""
99
+ class="quicksearch-field" />
100
+ </fieldset>
101
+ </form>
102
+
103
+ <ul class="link-list">
104
+
105
+ <li><a href="./AppControllerClient.html">AppControllerClient</a></li>
106
+
107
+ <li><a href="./CommonFunctions.html">CommonFunctions</a></li>
108
+
109
+ <li><a href="./Kernel.html">Kernel</a></li>
110
+
111
+ <li><a href="./Object.html">Object</a></li>
112
+
113
+ </ul>
114
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
115
+ </div>
116
+
117
+
118
+ </div>
119
+ </div>
120
+
121
+ <div id="documentation">
122
+ <h1 class="module">Kernel</h1>
123
+
124
+ <div id="description">
125
+
126
+ </div>
127
+
128
+ <!-- Constants -->
129
+
130
+
131
+ <!-- Attributes -->
132
+
133
+
134
+ <!-- Methods -->
135
+
136
+ <div id="public-instance-method-details" class="method-section section">
137
+ <h3 class="section-header">Public Instance Methods</h3>
138
+
139
+
140
+ <div id="shell-method" class="method-detail ">
141
+ <a name="method-i-shell"></a>
142
+
143
+
144
+ <div class="method-heading">
145
+ <span class="method-name">shell</span><span
146
+ class="method-args">(command)</span>
147
+ <span class="method-click-advice">click to toggle source</span>
148
+ </div>
149
+
150
+
151
+ <div class="method-description">
152
+
153
+
154
+
155
+
156
+
157
+ <div class="method-source-code"
158
+ id="shell-source">
159
+ <pre>
160
+ <span class="ruby-comment"># File lib/common_functions.rb, line 13</span>
161
+ def shell(command)
162
+ return `#{command}`
163
+ end</pre>
164
+ </div>
165
+
166
+ </div>
167
+
168
+
169
+
170
+
171
+ </div>
172
+
173
+
174
+ </div>
175
+
176
+
177
+ </div>
178
+
179
+ <div id="validator-badges">
180
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
181
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
182
+ Rdoc Generator</a> 2</small>.</p>
183
+ </div>
184
+
185
+ </body>
186
+ </html>
187
+