ruby-cute 0.0.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -3
- data/debian/changelog +3 -3
- data/debian/control +9 -5
- data/debian/copyright +7 -5
- data/debian/ruby-cute.examples +1 -0
- data/debian/ruby-tests.rake +7 -0
- data/debian/rules +1 -1
- data/examples/g5k_exp_virt.rb +9 -3
- data/lib/cute/g5k_api.rb +10 -3
- data/lib/cute/version.rb +1 -1
- data/ruby-cute.gemspec +1 -0
- data/spec/g5k_api_spec.rb +14 -1
- data/test/test_execute.rb +243 -0
- metadata +20 -3
- data/debian/ruby-tests.rb +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f54b6b52751a03c02f575ef8e544f399df99229a
|
4
|
+
data.tar.gz: e2db4b6d5a93a21ec4d19cf238ec05606ee6ab97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a6a3d01f0eb79fa5d66955467529b92bd53add1f597bf88df283f388e53751f2e46980b55a0398f350671b02ae7b68d8f00409fd22defd91dccd9220c2a2e4e
|
7
|
+
data.tar.gz: c4e54ceadd5e0aa271438b195942da1e4cc38bfe97d02db0394d787347c3f6a41be821d173e7cf6c83db2a7caa5b34cbe3d1141d58f6b2cde547a2f3c4f389e7
|
data/README.md
CHANGED
@@ -141,11 +141,14 @@ g5k.release(job) # Frees resources.
|
|
141
141
|
|
142
142
|
Ruby-Cute is maintained by the Algorille team at LORIA/Inria Nancy - Grand Est, and specifically by:
|
143
143
|
|
144
|
-
*
|
145
|
-
* Tomasz Buchert <tomasz.buchert@inria.fr>
|
144
|
+
* Cristian Ruiz <cristian.ruiz@inria.fr>
|
146
145
|
* Emmanuel Jeanvoine <emmanuel.jeanvoine@inria.fr>
|
147
146
|
* Lucas Nussbaum <lucas.nussbaum@loria.fr>
|
147
|
+
|
148
|
+
Past contributors include:
|
149
|
+
|
150
|
+
* Sébastien Badia <sebastien.badia@inria.fr>
|
151
|
+
* Tomasz Buchert <tomasz.buchert@inria.fr>
|
148
152
|
* Luc Sarzyniec <luc.sarzyniec@inria.fr>
|
149
|
-
* Cristian Ruiz <cristian.ruiz@inria.fr>
|
150
153
|
|
151
154
|
Questions/comments should be directed to Lucas Nussbaum and Emmanuel Jeanvoine.
|
data/debian/changelog
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
ruby-cute (0.
|
1
|
+
ruby-cute (0.3) UNRELEASED; urgency=medium
|
2
2
|
|
3
|
-
* Initial release
|
3
|
+
* Initial release.
|
4
4
|
|
5
|
-
-- Lucas Nussbaum <lucas@debian.org>
|
5
|
+
-- Lucas Nussbaum <lucas@debian.org> Tue, 10 Mar 2015 15:13:52 +0100
|
data/debian/control
CHANGED
@@ -2,14 +2,18 @@ Source: ruby-cute
|
|
2
2
|
Section: ruby
|
3
3
|
Priority: optional
|
4
4
|
Maintainer: Lucas Nussbaum <lucas@debian.org>
|
5
|
-
Build-Depends: debhelper (>=
|
6
|
-
Standards-Version: 3.9.
|
7
|
-
|
5
|
+
Build-Depends: debhelper (>= 7.0.50~), gem2deb, ruby-rspec, rake, yard, ruby-webmock, ruby-simplecov, ruby-rest-client, ruby-ipaddress, ruby-net-ssh-multi
|
6
|
+
Standards-Version: 3.9.5
|
7
|
+
Vcs-Git: git://github.com/ruby-cute/ruby-cute
|
8
|
+
Vcs-Browser: https://github.com/ruby-cute/ruby-cute
|
9
|
+
Homepage: http://ruby-cute.github.io/
|
10
|
+
Testsuite: autopkgtest
|
8
11
|
XS-Ruby-Versions: all
|
9
12
|
|
10
13
|
Package: ruby-cute
|
11
14
|
Architecture: all
|
12
15
|
XB-Ruby-Versions: ${ruby:Versions}
|
13
|
-
Depends: ${shlibs:Depends}, ${misc:Depends}, ruby | ruby-interpreter
|
16
|
+
Depends: ${shlibs:Depends}, ${misc:Depends}, ruby | ruby-interpreter, ruby-rest-client, ruby-json, ruby-ipaddress, ruby-net-ssh-multi
|
17
|
+
Recommends: pry
|
14
18
|
Description: Critically Useful Tools for Experiments
|
15
|
-
|
19
|
+
Ruby library for controlling experiments
|
data/debian/copyright
CHANGED
@@ -5,6 +5,13 @@ Source: FIXME <http://example.com/>
|
|
5
5
|
Files: *
|
6
6
|
Copyright: <years> <put author's name and email here>
|
7
7
|
<years> <likewise for another author>
|
8
|
+
License: GPL-2+ (FIXME)
|
9
|
+
|
10
|
+
Files: debian/*
|
11
|
+
Copyright: 2015 Lucas Nussbaum <lucas@debian.org>
|
12
|
+
License: GPL-2+ (FIXME)
|
13
|
+
Comment: the Debian packaging is licensed under the same terms as the original package.
|
14
|
+
|
8
15
|
License: GPL-2+ (FIXME)
|
9
16
|
This program is free software; you can redistribute it
|
10
17
|
and/or modify it under the terms of the GNU General Public
|
@@ -26,8 +33,3 @@ License: GPL-2+ (FIXME)
|
|
26
33
|
On Debian systems, the full text of the GNU General Public
|
27
34
|
License version 2 can be found in the file
|
28
35
|
`/usr/share/common-licenses/GPL-2'.
|
29
|
-
|
30
|
-
Files: debian/*
|
31
|
-
Copyright: 2013 Lucas Nussbaum <lucas@debian.org>
|
32
|
-
License:
|
33
|
-
[LICENSE TEXT]
|
@@ -0,0 +1 @@
|
|
1
|
+
examples/*
|
data/debian/rules
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
#
|
7
7
|
# Uncomment to ignore some test failures (but the tests will run anyway).
|
8
8
|
# Valid values:
|
9
|
-
#export DH_RUBY_IGNORE_TESTS=
|
9
|
+
#export DH_RUBY_IGNORE_TESTS=ruby2.1 require-rubygems
|
10
10
|
#
|
11
11
|
# If you need to specify the .gemspec (eg there is more than one)
|
12
12
|
#export DH_RUBY_GEMSPEC=gem.gemspec
|
data/examples/g5k_exp_virt.rb
CHANGED
@@ -26,7 +26,8 @@ G5K_SITES.each{ |site|
|
|
26
26
|
# here, we set wait_time to 200 seconds, like that we would just use the sites that are free.
|
27
27
|
begin
|
28
28
|
jobs[site] = g5k.reserve(:site => site, :resources => "slash_22=1+{virtual!='none'}/nodes=1",
|
29
|
-
:walltime =>"01:00:00",:keys => "~/.ssh/id_rsa", :
|
29
|
+
:walltime =>"01:00:00",:keys => "~/.ssh/id_rsa", :wait => false)
|
30
|
+
jobs[site] = g5k.wait_for_job(jobs[site], :wait_time => 200)
|
30
31
|
rescue Cute::G5K::EventTimeout
|
31
32
|
puts "We waited long enough, releasing job in site #{site}"
|
32
33
|
g5k.release(jobs[site]) # we release the job
|
@@ -40,6 +41,11 @@ G5K_SITES.each{ |site|
|
|
40
41
|
|
41
42
|
threads.each{ |t| t.join}
|
42
43
|
|
44
|
+
if jobs.keys.empty? then
|
45
|
+
puts "no sites available"
|
46
|
+
exit
|
47
|
+
end
|
48
|
+
|
43
49
|
nodes = []
|
44
50
|
jobs.each{ |k,v| nodes+=v["assigned_nodes"]}
|
45
51
|
|
@@ -54,7 +60,7 @@ template = ERB.new(File.read("#{vm_dir}/vm-template.xml"))
|
|
54
60
|
|
55
61
|
vms = []
|
56
62
|
|
57
|
-
|
63
|
+
jobs.keys.each{ |site|
|
58
64
|
subnet = g5k.get_subnets(jobs[site]).first
|
59
65
|
ips = subnet.map{ |ip| ip.to_s }
|
60
66
|
num_vm.times{ |n|
|
@@ -114,7 +120,7 @@ Net::SSH::Multi.start do |session|
|
|
114
120
|
end
|
115
121
|
|
116
122
|
puts("Waiting for the machines to start")
|
117
|
-
sleep
|
123
|
+
sleep 100
|
118
124
|
|
119
125
|
# Executing some commands on the vms
|
120
126
|
|
data/lib/cute/g5k_api.rb
CHANGED
@@ -703,7 +703,11 @@ module Cute
|
|
703
703
|
# @return [Array] all the subnets defined in a given job
|
704
704
|
# @param job [G5KJSON] as described in {Cute::G5K::G5KJSON job}
|
705
705
|
def get_subnets(job)
|
706
|
-
|
706
|
+
if job.resources["subnets"].nil?
|
707
|
+
return nil
|
708
|
+
else
|
709
|
+
subnets = job.resources["subnets"]
|
710
|
+
end
|
707
711
|
subnets.map{|s| IPAddress::IPv4.new s }
|
708
712
|
end
|
709
713
|
|
@@ -725,6 +729,7 @@ module Cute
|
|
725
729
|
# Releases all jobs on a site
|
726
730
|
# @param site [String] a valid Grid'5000 site name
|
727
731
|
def release_all(site)
|
732
|
+
raise ArgumentError, "parameter should be a string" unless site.is_a?(String)
|
728
733
|
Timeout.timeout(20) do
|
729
734
|
jobs = get_my_jobs(site,"running") + get_my_jobs(site,"waiting")
|
730
735
|
break if jobs.empty?
|
@@ -738,9 +743,11 @@ module Cute
|
|
738
743
|
end
|
739
744
|
|
740
745
|
# Releases a resource, it can be a job or a deploy.
|
741
|
-
|
746
|
+
# @param resource [G5KJSON] as described in {Cute::G5K::G5KJSON job}
|
747
|
+
def release(resource)
|
748
|
+
raise ArgumentError, "parameter should be a G5KJSON data type" unless resource.is_a?(Cute::G5K::G5KJSON)
|
742
749
|
begin
|
743
|
-
return @g5k_connection.delete_json(
|
750
|
+
return @g5k_connection.delete_json(resource.rel_self)
|
744
751
|
rescue Cute::G5K::RequestFailed => e
|
745
752
|
raise unless e.response.include?('already killed')
|
746
753
|
end
|
data/lib/cute/version.rb
CHANGED
data/ruby-cute.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.add_development_dependency "pry", "~> 0.10"
|
22
22
|
s.add_development_dependency "webmock", "~> 1.20"
|
23
23
|
s.add_development_dependency "yard", "~> 0.8"
|
24
|
+
s.add_development_dependency "simplecov", "~> 0.7"
|
24
25
|
|
25
26
|
s.add_dependency 'rest-client', '1.6.7'
|
26
27
|
s.add_dependency 'json', '~> 1.8'
|
data/spec/g5k_api_spec.rb
CHANGED
@@ -112,8 +112,21 @@ describe Cute::G5K::API do
|
|
112
112
|
expect(subject.get_vlan_nodes(job)).to be_nil
|
113
113
|
end
|
114
114
|
|
115
|
+
it "subnet returns nil" do
|
116
|
+
job = Cute::G5K::G5KJSON.new
|
117
|
+
expect(subject.get_subnets(job)).to be_nil
|
118
|
+
end
|
119
|
+
|
120
|
+
it "raises an argument error in release method" do
|
121
|
+
expect{subject.release("string")}.to raise_error(ArgumentError)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "raises an argument error in release_all method" do
|
125
|
+
expect{subject.release_all(["random"])}.to raise_error(ArgumentError)
|
126
|
+
end
|
127
|
+
|
115
128
|
it "performs an advanced reservation" do
|
116
|
-
time_schedule = Time.now + 60*
|
129
|
+
time_schedule = Time.now + 60*20
|
117
130
|
job =subject.reserve(:site => @rand_site, :nodes => 1, :reservation => time_schedule.strftime("%Y-%m-%d %H:%M:%S"))
|
118
131
|
subject.release(job)
|
119
132
|
end
|
@@ -0,0 +1,243 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'cute'
|
5
|
+
|
6
|
+
class Execute_test < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def prepare_file()
|
9
|
+
@file = Tempfile.new("testons")
|
10
|
+
1.upto(100) {|i| @file.puts i}
|
11
|
+
@file.close()
|
12
|
+
@cmd=['cat',@file.path]
|
13
|
+
@cmd2=['bash','-c',"cat #{@file.path} >&2"]
|
14
|
+
end
|
15
|
+
def test_execute()
|
16
|
+
prepare_file()
|
17
|
+
run = Cute::Execute[*@cmd].run!()
|
18
|
+
res = run.wait()
|
19
|
+
file = File.read(@file.path)
|
20
|
+
assert_equal(file,run.stdout)
|
21
|
+
assert(run.emptypipes,"pipes are empty")
|
22
|
+
assert(res[3],"pipes are empty")
|
23
|
+
end
|
24
|
+
def test_execute2()
|
25
|
+
prepare_file()
|
26
|
+
run = Cute::Execute[*@cmd].run!()
|
27
|
+
res = run.wait()
|
28
|
+
file = File.read(@file.path)
|
29
|
+
assert_equal(file,res[1])
|
30
|
+
assert(res[3],"pipes are empty")
|
31
|
+
end
|
32
|
+
def test_execute_err()
|
33
|
+
prepare_file()
|
34
|
+
run = Cute::Execute[*@cmd2].run!()
|
35
|
+
run.wait()
|
36
|
+
file = File.read(@file.path)
|
37
|
+
assert_equal(file,run.stderr)
|
38
|
+
assert(run.emptypipes,"pipes are empty")
|
39
|
+
end
|
40
|
+
def test_execute2_err()
|
41
|
+
prepare_file()
|
42
|
+
run = Cute::Execute[*@cmd2].run!()
|
43
|
+
res = run.wait()
|
44
|
+
file = File.read(@file.path)
|
45
|
+
assert_equal(file,res[2])
|
46
|
+
assert(res[3],"pipes are empty")
|
47
|
+
end
|
48
|
+
def test_execute_limit_stdout()
|
49
|
+
prepare_file()
|
50
|
+
run = Cute::Execute[*@cmd].run!(:stdout_size=>5)
|
51
|
+
run.wait()
|
52
|
+
assert_equal("1\n2\n3",run.stdout)
|
53
|
+
assert(!run.emptypipes,"pipes are not empty")
|
54
|
+
end
|
55
|
+
def test_execute_limit_stderr()
|
56
|
+
prepare_file()
|
57
|
+
run = Cute::Execute[*@cmd2].run!(:stderr_size=>5)
|
58
|
+
run.wait()
|
59
|
+
assert_equal("1\n2\n3",run.stderr)
|
60
|
+
assert(!run.emptypipes,"pipes are not empty")
|
61
|
+
end
|
62
|
+
def test_stdin()
|
63
|
+
run = Cute::Execute['ruby'].run!({:stdin=>true})
|
64
|
+
run.write_stdin('puts 2+2*2;puts Math.cos(Math::PI)')
|
65
|
+
run.wait()
|
66
|
+
assert_equal("6\n-1.0\n",run.stdout)
|
67
|
+
end
|
68
|
+
def test_signaled()
|
69
|
+
run = Cute::Execute["sleep","10"].run!()
|
70
|
+
sleep(0.2)
|
71
|
+
Process.kill("SIGKILL",run.exec_pid)
|
72
|
+
assert_raise(SignalException) do
|
73
|
+
run.wait()
|
74
|
+
end
|
75
|
+
end
|
76
|
+
def test_signaled_multithread()
|
77
|
+
run = Cute::Execute["sleep","10"].run!()
|
78
|
+
sleep(0.2)
|
79
|
+
Process.kill("SIGKILL",run.exec_pid)
|
80
|
+
t1 = Thread.new do
|
81
|
+
assert_raise(SignalException) do
|
82
|
+
run.wait()
|
83
|
+
end
|
84
|
+
end
|
85
|
+
t2 = Thread.new do
|
86
|
+
assert_raise(SignalException) do
|
87
|
+
run.wait()
|
88
|
+
end
|
89
|
+
end
|
90
|
+
t1.join
|
91
|
+
t2.join
|
92
|
+
end
|
93
|
+
# def test_non_null_exit
|
94
|
+
# run = Cute::Execute["ls","/zoefkzoifjauifhiagier"].run!()
|
95
|
+
# assert_raise(Exception) do
|
96
|
+
# run.wait()
|
97
|
+
# end
|
98
|
+
# assert_equal(2,run.status.exitstatus)
|
99
|
+
# end
|
100
|
+
def test_non_null_exit_ignored
|
101
|
+
run = Cute::Execute["ls","/zoefkzoifjauifhiagier"].run!()
|
102
|
+
assert_nothing_raised do
|
103
|
+
run.wait({})
|
104
|
+
end
|
105
|
+
assert_equal(2,run.status.exitstatus)
|
106
|
+
end
|
107
|
+
def test_non_null_exit_multithread
|
108
|
+
run = Cute::Execute["ls","/zoefkzoifjauifhiagier"].run!()
|
109
|
+
t1 = Thread.new do
|
110
|
+
assert_raise(RuntimeError) do
|
111
|
+
run.wait()
|
112
|
+
end
|
113
|
+
end
|
114
|
+
t2 = Thread.new do
|
115
|
+
assert_raise(RuntimeError) do
|
116
|
+
run.wait()
|
117
|
+
end
|
118
|
+
end
|
119
|
+
t1.join
|
120
|
+
t2.join
|
121
|
+
assert_equal(2,run.status.exitstatus)
|
122
|
+
end
|
123
|
+
def test_kill()
|
124
|
+
run = Cute::Execute["sleep","3"].run!()
|
125
|
+
run.kill
|
126
|
+
assert_nothing_raised(SignalException) do
|
127
|
+
run.wait()
|
128
|
+
end
|
129
|
+
assert(run.status.signaled?,"The process must be killed")
|
130
|
+
end
|
131
|
+
def test_kill2()
|
132
|
+
run = Cute::Execute["sleep","3"].run!()
|
133
|
+
run.kill
|
134
|
+
res = nil
|
135
|
+
assert_nothing_raised(SignalException) do
|
136
|
+
res = run.wait()
|
137
|
+
end
|
138
|
+
assert(res[0].signaled?,"The process must be killed")
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_kill_multithread()
|
142
|
+
run = Cute::Execute["sleep","3"].run!()
|
143
|
+
t1 = Thread.new do
|
144
|
+
assert_nothing_raised(SignalException) do
|
145
|
+
run.wait()
|
146
|
+
end
|
147
|
+
end
|
148
|
+
t2 = Thread.new do
|
149
|
+
assert_nothing_raised(SignalException) do
|
150
|
+
run.wait()
|
151
|
+
end
|
152
|
+
end
|
153
|
+
run.kill
|
154
|
+
t1.join
|
155
|
+
t2.join
|
156
|
+
assert(run.status.signaled?,"The process must be killed")
|
157
|
+
end
|
158
|
+
def test_stderr_after_kill()
|
159
|
+
run = Cute::Execute["bash","-c","echo toto >&2;sleep 5"].run!()
|
160
|
+
t1 = Thread.new do
|
161
|
+
assert_nothing_raised(SignalException) do
|
162
|
+
run.wait()
|
163
|
+
end
|
164
|
+
end
|
165
|
+
sleep(0.2)
|
166
|
+
t1.kill
|
167
|
+
assert_nothing_raised(SignalException) do
|
168
|
+
t1.join
|
169
|
+
end
|
170
|
+
assert_equal("toto\n",run.stderr)
|
171
|
+
assert(run.status.signaled?,"The process must be killed")
|
172
|
+
end
|
173
|
+
def test_output_after_kill()
|
174
|
+
run = Cute::Execute["bash","-c","echo toto;sleep 5"].run!()
|
175
|
+
t1 = Thread.new do
|
176
|
+
assert_nothing_raised(SignalException) do
|
177
|
+
run.wait()
|
178
|
+
end
|
179
|
+
end
|
180
|
+
sleep(0.2)
|
181
|
+
t1.kill
|
182
|
+
assert_nothing_raised(SignalException) do
|
183
|
+
t1.join
|
184
|
+
end
|
185
|
+
assert_equal("toto\n",run.stdout)
|
186
|
+
assert(run.status.signaled?,"The process must be killed")
|
187
|
+
end
|
188
|
+
def test_kill_thread()
|
189
|
+
run = Cute::Execute["sleep","3"].run!()
|
190
|
+
t1 = Thread.new do
|
191
|
+
assert_nothing_raised(SignalException) do
|
192
|
+
run.wait()
|
193
|
+
end
|
194
|
+
end
|
195
|
+
sleep(0.2)
|
196
|
+
t1.kill()
|
197
|
+
assert_nothing_raised(SignalException) do
|
198
|
+
t1.join()
|
199
|
+
end
|
200
|
+
assert(run.status.signaled?,"The process must be killed")
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_kill_thread_multithread()
|
204
|
+
run = Cute::Execute["sleep","3"].run!()
|
205
|
+
t1 = Thread.new do
|
206
|
+
assert_nothing_raised(SignalException) do
|
207
|
+
run.wait()
|
208
|
+
end
|
209
|
+
end
|
210
|
+
t2 = Thread.new do
|
211
|
+
assert_nothing_raised(SignalException) do
|
212
|
+
run.wait()
|
213
|
+
end
|
214
|
+
end
|
215
|
+
sleep(0.2)
|
216
|
+
t1.kill()
|
217
|
+
assert_nothing_raised(SignalException) do
|
218
|
+
t1.join()
|
219
|
+
end
|
220
|
+
t2.join()
|
221
|
+
assert(run.status.signaled?,"The process must be killed")
|
222
|
+
end
|
223
|
+
def test_nopipe
|
224
|
+
run = Cute::Execute["sleep","100"].run!(:stdout=>false,:stderr=>false,:stdin=>false)
|
225
|
+
sleep(0.2) #wait for fork finish the job
|
226
|
+
assert_equal("/dev/null",File.readlink("/proc/#{run.exec_pid}/fd/0"),"fd0")
|
227
|
+
assert_equal("/dev/null",File.readlink("/proc/#{run.exec_pid}/fd/1"),"fd1")
|
228
|
+
assert_equal("/dev/null",File.readlink("/proc/#{run.exec_pid}/fd/2"),"fd2")
|
229
|
+
run.kill()
|
230
|
+
run.wait()
|
231
|
+
end
|
232
|
+
def test_fd_leak
|
233
|
+
fd=File.open("/dev/urandom")
|
234
|
+
file=Tempfile.new("testpipeleak")
|
235
|
+
file.puts("#!/usr/bin/env ruby")
|
236
|
+
file.puts("exit(IO.new(#{fd.fileno}).closed? ? 0 : 10) rescue Exception")
|
237
|
+
file.close()
|
238
|
+
assert_nothing_raised do
|
239
|
+
Cute::Execute['ruby',file.path].run!().wait()
|
240
|
+
end
|
241
|
+
fd.close()
|
242
|
+
end
|
243
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-cute
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Algorille team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0.8'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.7'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.7'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: rest-client
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -171,7 +185,8 @@ files:
|
|
171
185
|
- debian/control
|
172
186
|
- debian/copyright
|
173
187
|
- debian/ruby-cute.docs
|
174
|
-
- debian/ruby-
|
188
|
+
- debian/ruby-cute.examples
|
189
|
+
- debian/ruby-tests.rake
|
175
190
|
- debian/rules
|
176
191
|
- debian/source/format
|
177
192
|
- debian/watch
|
@@ -195,6 +210,7 @@ files:
|
|
195
210
|
- spec/spec_helper.rb
|
196
211
|
- spec/taktuk_spec.rb
|
197
212
|
- test/test_bash.rb
|
213
|
+
- test/test_execute.rb
|
198
214
|
homepage: http://ruby-cute.gforge.inria.fr/
|
199
215
|
licenses:
|
200
216
|
- CeCILL-B
|
@@ -225,4 +241,5 @@ test_files:
|
|
225
241
|
- spec/spec_helper.rb
|
226
242
|
- spec/taktuk_spec.rb
|
227
243
|
- test/test_bash.rb
|
244
|
+
- test/test_execute.rb
|
228
245
|
has_rdoc:
|
data/debian/ruby-tests.rb
DELETED