neptune 0.1.1 → 0.1.2
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/README +7 -4
- data/doc/AppControllerClient.html +12 -4
- data/doc/CommonFunctions.html +55 -42
- data/doc/Kernel.html +187 -0
- data/doc/LICENSE.html +2 -0
- data/doc/Object.html +488 -198
- data/doc/README.html +26 -5
- data/doc/bin/neptune.html +1 -1
- data/doc/created.rid +6 -6
- data/doc/index.html +20 -2
- data/doc/lib/app_controller_client_rb.html +2 -2
- data/doc/lib/common_functions_rb.html +2 -2
- data/doc/lib/neptune_rb.html +3 -1
- data/lib/app_controller_client.rb +2 -2
- data/lib/common_functions.rb +50 -24
- data/lib/neptune.rb +224 -159
- data/samples/appscale/add_appserver.rb +10 -0
- data/samples/appscale/add_database.rb +9 -0
- data/samples/appscale/add_loadbalancer.rb +9 -0
- data/samples/appscale/add_slave.rb +9 -0
- data/samples/c/compile_helloworld.rb +10 -0
- data/samples/c/helloworld/helloworld.c +6 -0
- data/samples/erlang/compile_erlang_ring.rb +10 -0
- data/samples/erlang/get_erlang_output.rb +8 -0
- data/samples/erlang/ring/Makefile +3 -0
- data/samples/erlang/ring/ring.erl +90 -0
- data/samples/erlang/run_erlang_ring.rb +6 -0
- data/samples/go/compile_hello.rb +10 -0
- data/samples/go/get_hello_output.rb +6 -0
- data/samples/go/hello/hello.go +8 -0
- data/samples/go/put_input.rb +8 -0
- data/samples/go/run_hello.rb +9 -0
- data/samples/mapreduce/expected-output.txt +7078 -0
- data/samples/mapreduce/get_mapreduce_output.rb +4 -0
- data/samples/mapreduce/hadoop-0.20.0-examples.jar +0 -0
- data/samples/mapreduce/input-10 +64 -0
- data/samples/mapreduce/input-30 +64 -0
- data/samples/mapreduce/input-7 +4 -0
- data/samples/mapreduce/map.rb +48 -0
- data/samples/mapreduce/reduce.rb +48 -0
- data/samples/mapreduce/run_java_mr.rb +14 -0
- data/samples/mapreduce/run_mapreduce.rb +13 -0
- data/samples/mapreduce/the-end-of-time.txt +11256 -0
- data/samples/mpi/Makefile +22 -0
- data/samples/mpi/MpiQueen +0 -0
- data/samples/mpi/compile_mpi_ring.rb +10 -0
- data/samples/mpi/compile_x10_nqueens.rb +8 -0
- data/samples/mpi/cpi +0 -0
- data/samples/mpi/get_mpi_output.rb +5 -0
- data/samples/mpi/get_ring_output.rb +5 -0
- data/samples/mpi/hw2.c +205 -0
- data/samples/mpi/hw2harness.c +84 -0
- data/samples/mpi/hw2harness.h +45 -0
- data/samples/mpi/powermethod +0 -0
- data/samples/mpi/ring/Makefile +2 -0
- data/samples/mpi/ring/Ring.c +76 -0
- data/samples/mpi/run_mpi_cpi.rb +10 -0
- data/samples/mpi/run_mpi_nqueens.np +6 -0
- data/samples/mpi/run_mpi_powermethod.rb +8 -0
- data/samples/mpi/run_mpi_ring.rb +12 -0
- data/samples/r/compile_hello.rb +10 -0
- data/samples/r/get_hello_output.rb +6 -0
- data/samples/r/hello/hello.r +1 -0
- data/samples/r/put_input.rb +8 -0
- data/samples/r/run_hello.rb +9 -0
- data/samples/upc/compile_upc_helloworld.rb +10 -0
- data/samples/upc/compile_upc_ring.rb +11 -0
- data/samples/upc/get_mpi_output.rb +8 -0
- data/samples/upc/helloworld/HelloWorld.c +9 -0
- data/samples/upc/helloworld/Makefile +3 -0
- data/samples/upc/ring/Makefile +3 -0
- data/samples/upc/ring/Ring.c +116 -0
- data/samples/upc/run_upc_helloworld.rb +12 -0
- data/samples/upc/run_upc_ring.rb +12 -0
- data/samples/x10/MyPowerMethod +0 -0
- data/samples/x10/MyPowerMethod.x10 +236 -0
- data/samples/x10/NQueensDist +0 -0
- data/samples/x10/NQueensDist.x10 +112 -0
- data/samples/x10/compile_x10_nqueens.rb +7 -0
- data/samples/x10/compile_x10_ring.rb +12 -0
- data/samples/x10/get_x10_output.rb +8 -0
- data/samples/x10/ring/Makefile +3 -0
- data/samples/x10/ring/Ring.x10 +28 -0
- data/samples/x10/ring/RingOld.x10 +68 -0
- data/samples/x10/run_x10_nqueens.rb +6 -0
- data/samples/x10/run_x10_powermethod.rb +7 -0
- data/samples/x10/run_x10_ring.rb +6 -0
- data/test/{tc_c.rb → integration/tc_c.rb} +2 -2
- data/test/{tc_dfsp.rb → integration/tc_dfsp.rb} +0 -0
- data/test/{tc_dwssa.rb → integration/tc_dwssa.rb} +0 -0
- data/test/{tc_erlang.rb → integration/tc_erlang.rb} +0 -0
- data/test/{tc_mapreduce.rb → integration/tc_mapreduce.rb} +0 -0
- data/test/{tc_mpi.rb → integration/tc_mpi.rb} +0 -0
- data/test/{tc_storage.rb → integration/tc_storage.rb} +0 -0
- data/test/{tc_upc.rb → integration/tc_upc.rb} +0 -0
- data/test/{tc_x10.rb → integration/tc_x10.rb} +0 -0
- data/test/{test_helper.rb → integration/test_helper.rb} +0 -0
- data/test/{ts_neptune.rb → integration/ts_neptune.rb} +2 -2
- data/test/unit/test_app_controller_client.rb +106 -0
- data/test/unit/test_common_functions.rb +106 -0
- data/test/unit/test_neptune.rb +208 -0
- data/test/unit/ts_all.rb +6 -0
- 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
|
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
|
-
|
65
|
-
|
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">[
|
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">[
|
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">[
|
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">""</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>
|
data/doc/CommonFunctions.html
CHANGED
@@ -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
|
176
|
-
def self.get_from_yaml(keyname, tag, required=true)
|
177
|
-
location_file =
|
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("~/.appscale/locations-#{keyname}.yaml")
|
178
180
|
|
179
|
-
|
181
|
+
if !file.exists?(location_file)
|
182
|
+
abort(<span class="ruby-string">"An AppScale instance is not currently running with the provided"</span> +
|
183
|
+
" keyname, \"#{keyname}\".")
|
184
|
+
end
|
180
185
|
|
181
186
|
begin
|
182
|
-
tree =
|
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">"The yaml file you provided was malformed. Please correct any
|
190
|
+
abort(<span class="ruby-string">"The yaml file you provided was malformed. Please correct any"</span> +
|
191
|
+
<span class="ruby-string">" errors in it and try again."</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
|
-
|
194
|
-
|
199
|
+
if value.nil? and required
|
200
|
+
abort("The file #{location_file} is in the wrong format and doesn't" +
|
201
|
+
" contain a #{tag} tag. Please make sure the file is in the correct" +
|
202
|
+
<span class="ruby-string">" format and try again."</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
|
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
|
271
|
-
def self.scp_file(local_file_loc, remote_file_loc, target_ip, public_key_loc,
|
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">""</span>
|
273
|
-
local_file_loc =
|
284
|
+
local_file_loc = file.expand_path(local_file_loc)
|
274
285
|
|
275
286
|
ssh_args = <span class="ruby-string">"-o StrictHostkeyChecking=no 2>&1"</span>
|
276
287
|
ssh_args << <span class="ruby-string">" -r "</span> if is_dir
|
277
288
|
|
278
|
-
|
279
|
-
|
280
|
-
key = <span class="ruby-constant">File</span>.expand_path(key)
|
281
|
-
}
|
282
|
-
|
283
|
-
cmd = "scp -i #{public_key_loc.join(' -i ')} #{ssh_args} #{local_file_loc} root@#{target_ip}:#{remote_file_loc}"
|
284
|
-
else
|
285
|
-
public_key_loc = <span class="ruby-constant">File</span>.expand_path(public_key_loc)
|
286
|
-
cmd = "scp -i #{public_key_loc} #{ssh_args} #{local_file_loc} root@#{target_ip}:#{remote_file_loc}"
|
287
|
-
end
|
288
|
-
|
289
|
+
public_key_loc = file.expand_path(public_key_loc)
|
290
|
+
cmd = "scp -i #{public_key_loc} #{ssh_args} #{local_file_loc} root@#{target_ip}:#{remote_file_loc}"
|
289
291
|
cmd << <span class="ruby-string">"; echo $? >> ~/.appscale/retval"</span>
|
290
292
|
|
291
|
-
retval_loc =
|
292
|
-
|
293
|
+
retval_loc = file.expand_path(<span class="ruby-string">"~/.appscale/retval"</span>)
|
294
|
+
fileutils.rm_f(retval_loc)
|
293
295
|
|
294
296
|
begin
|
295
|
-
<span class="ruby-constant">Timeout</span>::timeout(-1) {
|
297
|
+
<span class="ruby-constant">Timeout</span>::timeout(-1) { kernel.shell("#{cmd}") }
|
296
298
|
rescue <span class="ruby-constant">Timeout</span>::<span class="ruby-constant">Error</span>
|
297
|
-
abort(
|
299
|
+
abort(<span class="ruby-string">"Remotely copying over files failed. Is the destination machine"</span> +
|
300
|
+
<span class="ruby-string">" on and reachable from this computer? We tried the following"</span> +
|
301
|
+
" command:\n\n#{cmd}")
|
298
302
|
end
|
299
303
|
|
300
304
|
loop {
|
301
|
-
break if
|
305
|
+
break if file.exists?(retval_loc)
|
302
306
|
sleep(5)
|
303
307
|
}
|
304
308
|
|
305
|
-
retval = (
|
306
|
-
|
309
|
+
retval = (file.open(retval_loc) { |f| f.read }).chomp
|
310
|
+
if retval != <span class="ruby-string">"0"</span>
|
311
|
+
abort("\n\n[#{cmd}] returned #{retval} instead of 0 as expected. Is " +
|
312
|
+
<span class="ruby-string">"your environment set up properly?"</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
|
343
|
-
def self.scp_to_shadow(local_file_loc,
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
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("~/.appscale/#{keyname}.key")
|
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&height=550&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
|
+
|