omf_ec 6.0.3 → 6.0.4.pre.1
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.
- checksums.yaml +15 -0
- data/bin/omf_ec +21 -11
- data/lib/omf_ec/backward/default_events.rb +27 -14
- data/lib/omf_ec/backward/exp/testbed.rb +2 -2
- data/lib/omf_ec/backward/group.rb +2 -2
- data/lib/omf_ec/context/group_context.rb +10 -0
- data/lib/omf_ec/experiment.rb +24 -8
- data/lib/omf_ec/group.rb +13 -12
- data/lib/omf_ec/version.rb +1 -1
- data/lib/omf_ec.rb +10 -10
- data/omf_ec.gemspec +1 -1
- data/test/omf_ec/group_spec.rb +6 -4
- metadata +9 -28
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MjRmMzAxMmI4ZWZmOWI2NjY1NDhlN2ZkMmM1ZGM5MGM0Y2JmMjNkZA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OTYyYTQ5NzYxOTBiNWVjZDE2NmNmMDAwMmE1YzM0NjQ4MjUzOWYyMg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NGJhYTg5OTJiMmM0YjFmMmExZjNkNjA0YjNkNGQ0ZjVhZjM5NjMyNzNjOWMz
|
10
|
+
ZmM0OThiZDhiODgxN2VlYzAwY2Y3ZTRmZTAwOTllYzgwYWNlMDU4MDY5MDE4
|
11
|
+
NjkzZmE0YmM5MDBkZmUwYTg1NGZlOTZkMmI1Y2MwOTQ0NjU3YmQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MDE2ZDQ0MWFkZjE3YmE0ZjFhMGE5YmNmYzNmOTAwZGY3OGIzOTI5M2E4MjJm
|
14
|
+
MzAxNTFkYTljNTczNGJjZDFjYWUyMjlmOGVjZDkxMjAzZDUyYWUzNDQzYzFk
|
15
|
+
OWUwOTJlNDliNDdhZGE3NGQ2YzUwZTE1YzRiZWQyNTg1MjZlNGY=
|
data/bin/omf_ec
CHANGED
@@ -40,6 +40,10 @@ arg_name "directory"
|
|
40
40
|
default_value "/tmp"
|
41
41
|
flag [:log_file_dir]
|
42
42
|
|
43
|
+
desc "Logging config file"
|
44
|
+
arg_name "file"
|
45
|
+
flag [:log_config]
|
46
|
+
|
43
47
|
# the path given here is relative to the user's home directory
|
44
48
|
config_file(".config/omf_ec.yml")
|
45
49
|
|
@@ -59,7 +63,7 @@ command :exec do |c|
|
|
59
63
|
|
60
64
|
c.action do |global_options, options, args|
|
61
65
|
help_now! "Missing experiment script" if args[0].nil?
|
62
|
-
help_now! "Experiment script not found" unless File.exist?(args[0])
|
66
|
+
help_now! "Experiment script not found" unless File.exist?(File.expand_path(args[0]))
|
63
67
|
|
64
68
|
# User-provided command line values for Experiment Properties cannot be
|
65
69
|
# set here as the propertties have not been defined yet by the experiment.
|
@@ -79,7 +83,7 @@ command :exec do |c|
|
|
79
83
|
end
|
80
84
|
|
81
85
|
# FIXME this loading script is way too simple
|
82
|
-
load_exp(args[0], global_options, options, properties)
|
86
|
+
load_exp(File.expand_path(args[0]), global_options, options, properties)
|
83
87
|
end
|
84
88
|
end
|
85
89
|
|
@@ -231,26 +235,28 @@ def setup_logging(global_options = {})
|
|
231
235
|
end
|
232
236
|
|
233
237
|
unless global_options[:debug]
|
234
|
-
Logging.consolidate 'OmfCommon', '
|
238
|
+
Logging.consolidate 'OmfCommon', 'OmfRc'
|
235
239
|
end
|
236
240
|
|
237
241
|
# FIXME this should go to common setup
|
238
|
-
if global_options[:log_file_dir] && File.exist?(global_options[:log_file_dir])
|
242
|
+
if global_options[:log_file_dir] && File.exist?(File.expand_path(global_options[:log_file_dir]))
|
239
243
|
Logging.logger.root.add_appenders(
|
240
244
|
Logging.appenders.file(
|
241
|
-
"#{global_options[:log_file_dir]}/#{OmfEc.experiment.id}.log",
|
245
|
+
"#{File.expand_path(global_options[:log_file_dir])}/#{OmfEc.experiment.id}.log",
|
242
246
|
:layout => Logging.layouts.pattern(:date_pattern => '%F %T %z',
|
243
247
|
:pattern => '[%d] %-5l %c: %m\n')))
|
244
248
|
end
|
249
|
+
|
250
|
+
OmfCommon.load_logging_config(global_options[:log_config])
|
245
251
|
end
|
246
252
|
|
247
253
|
def load_exp(exp_path, global_options = {} , options = {}, properties = {})
|
248
254
|
begin
|
249
|
-
if global_options[:cert] && File.exist?(global_options[:cert]) &&
|
250
|
-
global_options[:key] && File.exist?(global_options[:key])
|
255
|
+
if global_options[:cert] && File.exist?(File.expand_path(global_options[:cert])) &&
|
256
|
+
global_options[:key] && File.exist?(File.expand_path(global_options[:key]))
|
251
257
|
|
252
|
-
entity = OmfCommon::Auth::Certificate.create_from_x509(File.read(global_options[:cert]),
|
253
|
-
File.read(global_options[:key]))
|
258
|
+
entity = OmfCommon::Auth::Certificate.create_from_x509(File.read(File.expand_path(global_options[:cert])),
|
259
|
+
File.read(File.expand_path(global_options[:key])))
|
254
260
|
end
|
255
261
|
|
256
262
|
opts = {
|
@@ -271,18 +277,22 @@ def load_exp(exp_path, global_options = {} , options = {}, properties = {})
|
|
271
277
|
opts[:communication][:auth] = {} if entity
|
272
278
|
|
273
279
|
OmfCommon.init(:development, opts) do |el|
|
280
|
+
|
274
281
|
setup_logging(global_options)
|
275
282
|
|
276
283
|
OmfCommon.comm.on_connected do |comm|
|
284
|
+
info "OMF Experiment Controller #{OmfEc::VERSION}"
|
277
285
|
info "Connected using #{comm.conn_info}"
|
278
|
-
info "
|
286
|
+
info "Execute: #{exp_path}"
|
287
|
+
info "Properties: #{OmfEc.experiment.cmdline_properties}"
|
279
288
|
|
280
|
-
OmfCommon::Auth::CertificateStore.instance.register_default_certs(global_options[:root_cert_dir]) if global_options[:root_cert_dir]
|
289
|
+
OmfCommon::Auth::CertificateStore.instance.register_default_certs(File.expand_path(global_options[:root_cert_dir])) if global_options[:root_cert_dir]
|
281
290
|
OmfCommon::Auth::CertificateStore.instance.register(entity, OmfCommon.comm.local_address) if entity
|
282
291
|
|
283
292
|
begin
|
284
293
|
include OmfEc::Backward::DefaultEvents
|
285
294
|
load exp_path
|
295
|
+
OmfEc::Experiment.start
|
286
296
|
rescue => e
|
287
297
|
error e.message
|
288
298
|
error e.backtrace.join("\n")
|
@@ -11,19 +11,22 @@ module OmfEc
|
|
11
11
|
def included(base)
|
12
12
|
base.instance_eval do
|
13
13
|
|
14
|
-
def_event :
|
14
|
+
def_event :ALL_NODES_UP do |state|
|
15
15
|
all_groups? do |g|
|
16
|
-
plan = g.members.uniq.sort
|
17
|
-
actual = state.find_all { |v| v.joined?(g.
|
16
|
+
plan = g.members.values.uniq.sort
|
17
|
+
actual = state.find_all { |v| v.joined?(g.address) }.map { |v| v[:address] }.sort
|
18
18
|
|
19
|
-
debug "Planned: #{g.name}(#{g.
|
20
|
-
debug "Actual: #{g.name}(#{g.
|
19
|
+
debug "Planned: #{g.name}(#{g.address}): #{plan}"
|
20
|
+
debug "Actual: #{g.name}(#{g.address}): #{actual}"
|
21
21
|
|
22
|
-
plan
|
22
|
+
if plan.empty? && actual.empty?
|
23
|
+
warn "Group '#{g.name}' is empty"
|
24
|
+
end
|
25
|
+
plan.empty? ? true : plan == actual
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
26
|
-
on_event :
|
29
|
+
on_event :ALL_NODES_UP do
|
27
30
|
all_groups do |group|
|
28
31
|
# Deal with brilliant net.w0.ip syntax...
|
29
32
|
group.net_ifs && group.net_ifs.each do |nif|
|
@@ -49,26 +52,37 @@ module OmfEc
|
|
49
52
|
end
|
50
53
|
end
|
51
54
|
|
55
|
+
def_event :ALL_UP do |state|
|
56
|
+
all_groups? do |g|
|
57
|
+
app_plan = g.app_contexts.size * g.members.values.uniq.size
|
58
|
+
app_actual = state.count { |v| v.joined?(g.address("application")) }
|
59
|
+
if_plan = g.net_ifs.map { |v| v.conf[:if_name] }.uniq.size * g.members.values.uniq.size
|
60
|
+
if_actual = state.count { |v| v.joined?(g.address("wlan"), g.address("net")) }
|
61
|
+
|
62
|
+
if_plan == if_actual && app_plan == app_actual
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
52
66
|
def_event :ALL_INTERFACE_UP do |state|
|
53
67
|
all_groups? do |g|
|
54
|
-
plan = g.net_ifs.map { |v| v.conf[:if_name] }.uniq.size * g.members.uniq.size
|
55
|
-
actual = state.count { |v| v.joined?(
|
68
|
+
plan = g.net_ifs.map { |v| v.conf[:if_name] }.uniq.size * g.members.values.uniq.size
|
69
|
+
actual = state.count { |v| v.joined?(g.address("wlan"), g.address("net")) }
|
56
70
|
plan == actual
|
57
71
|
end
|
58
72
|
end
|
59
73
|
|
60
74
|
def_event :ALL_UP_AND_INSTALLED do |state|
|
61
75
|
all_groups? do |g|
|
62
|
-
plan = g.app_contexts.size * g.members.uniq.size
|
63
|
-
actual = state.count { |v| v.joined?(
|
76
|
+
plan = g.app_contexts.size * g.members.values.uniq.size
|
77
|
+
actual = state.count { |v| v.joined?(g.address("application")) }
|
64
78
|
plan == actual
|
65
79
|
end
|
66
80
|
end
|
67
81
|
|
68
82
|
def_event :ALL_APPS_DONE do |state|
|
69
83
|
all_groups? do |g|
|
70
|
-
plan = (g.execs.size + g.app_contexts.size) * g.members.uniq.size
|
71
|
-
actual = state.count { |v| v.joined?(
|
84
|
+
plan = (g.execs.size + g.app_contexts.size) * g.members.values.uniq.size
|
85
|
+
actual = state.count { |v| v.joined?(g.address("application")) && v[:event] == 'EXIT' }
|
72
86
|
plan == 0 ? false : plan == actual
|
73
87
|
end
|
74
88
|
end
|
@@ -76,7 +90,6 @@ module OmfEc
|
|
76
90
|
end
|
77
91
|
end
|
78
92
|
end
|
79
|
-
|
80
93
|
end
|
81
94
|
end
|
82
95
|
end
|
@@ -25,10 +25,10 @@ module OmfEc
|
|
25
25
|
e_uid = SecureRandom.uuid
|
26
26
|
e_name = "#{self.name}_application_#{name}_created_#{e_uid}"
|
27
27
|
|
28
|
-
resource_group_name =
|
28
|
+
resource_group_name = self.address("application")
|
29
29
|
|
30
30
|
def_event e_name do |state|
|
31
|
-
state.find_all { |v| v[:hrn] == name && v[:membership] && v[:membership].include?(resource_group_name)}.size >= self.members.uniq.size
|
31
|
+
state.find_all { |v| v[:hrn] == name && v[:membership] && v[:membership].include?(resource_group_name)}.size >= self.members.values.sort.uniq.size
|
32
32
|
end
|
33
33
|
|
34
34
|
on_event e_name do
|
@@ -65,6 +65,16 @@ module OmfEc::Context
|
|
65
65
|
topic = self.group.topic
|
66
66
|
end
|
67
67
|
|
68
|
+
if topic.nil?
|
69
|
+
if self.guard[:type]
|
70
|
+
warn "Group '#{self.group.name}' has NO resources of type '#{self.guard[:type]}' ready. Could not send message."
|
71
|
+
else
|
72
|
+
warn "Group topic '#{self.group.name}' NOT subscribed. Could not send message."
|
73
|
+
end
|
74
|
+
return
|
75
|
+
end
|
76
|
+
|
77
|
+
|
68
78
|
case self.operation
|
69
79
|
when :configure
|
70
80
|
topic.configure({ name => value }, { guard: self.guard })
|
data/lib/omf_ec/experiment.rb
CHANGED
@@ -79,7 +79,7 @@ module OmfEc
|
|
79
79
|
unless planned_groups.empty?
|
80
80
|
OmfEc.subscribe_and_monitor(name) do |res|
|
81
81
|
info "Config #{name} to join #{planned_groups.map(&:name).join(', ')}"
|
82
|
-
res.configure(membership: planned_groups.map(&:
|
82
|
+
res.configure(membership: planned_groups.map(&:address).join(', '))
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
@@ -91,7 +91,7 @@ module OmfEc
|
|
91
91
|
# Find all groups a given resource belongs to
|
92
92
|
#
|
93
93
|
def groups_by_res(res_addr)
|
94
|
-
groups.find_all { |g| g.members.include?(res_addr) }
|
94
|
+
groups.find_all { |g| g.members.values.include?(res_addr) }
|
95
95
|
end
|
96
96
|
|
97
97
|
def sub_group(name)
|
@@ -164,22 +164,38 @@ module OmfEc
|
|
164
164
|
class << self
|
165
165
|
# Disconnect communicator, try to delete any XMPP affiliations
|
166
166
|
def done
|
167
|
-
info "
|
168
|
-
|
169
|
-
|
170
|
-
info "Release applications and network interfaces"
|
167
|
+
info "Experiment: #{OmfEc.experiment.id} finished"
|
168
|
+
info "Release applications and network interfaces"
|
169
|
+
info "Exit in 15 seconds..."
|
171
170
|
|
171
|
+
OmfCommon.el.after(10) do
|
172
172
|
allGroups do |g|
|
173
|
-
g.resources[type: 'application'].release
|
173
|
+
g.resources[type: 'application'].release unless g.app_contexts.empty?
|
174
174
|
g.resources[type: 'net'].release unless g.net_ifs.find_all { |v| v.conf[:type] == 'net' }.empty?
|
175
175
|
g.resources[type: 'wlan'].release unless g.net_ifs.find_all { |v| v.conf[:type] == 'wlan' }.empty?
|
176
176
|
end
|
177
177
|
|
178
|
-
OmfCommon.
|
178
|
+
OmfCommon.el.after(5) do
|
179
179
|
OmfCommon.comm.disconnect
|
180
180
|
end
|
181
181
|
end
|
182
182
|
end
|
183
|
+
|
184
|
+
def start
|
185
|
+
info "Experiment: #{OmfEc.experiment.id} starts"
|
186
|
+
|
187
|
+
allGroups do |g|
|
188
|
+
g.members.each do |key, value|
|
189
|
+
OmfEc.subscribe_and_monitor(key) do |res|
|
190
|
+
info "Configure '#{key}' to join '#{g.name}'"
|
191
|
+
g.synchronize do
|
192
|
+
g.members[key] = res.address
|
193
|
+
end
|
194
|
+
res.configure(membership: g.address)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
183
199
|
end
|
184
200
|
end
|
185
201
|
end
|
data/lib/omf_ec/group.rb
CHANGED
@@ -30,7 +30,7 @@ module OmfEc
|
|
30
30
|
self.id = @opts[:unique] ? SecureRandom.uuid : self.name
|
31
31
|
# Add empty holders for members, network interfaces, and apps
|
32
32
|
self.net_ifs = []
|
33
|
-
self.members =
|
33
|
+
self.members = {}
|
34
34
|
self.app_contexts = []
|
35
35
|
self.execs = []
|
36
36
|
|
@@ -39,6 +39,11 @@ module OmfEc
|
|
39
39
|
OmfEc.subscribe_and_monitor(id, self, &block)
|
40
40
|
end
|
41
41
|
|
42
|
+
def address(suffix = nil)
|
43
|
+
t_id = suffix ? "#{self.id}_#{suffix.to_s}" : self.id
|
44
|
+
"#{OmfCommon.comm.conn_info[:proto]}://#{t_id}@#{OmfCommon.comm.conn_info[:domain]}"
|
45
|
+
end
|
46
|
+
|
42
47
|
def associate_topic(topic)
|
43
48
|
self.synchronize do
|
44
49
|
@topic = topic
|
@@ -59,24 +64,19 @@ module OmfEc
|
|
59
64
|
#
|
60
65
|
# Resources to be added could be a list of resources, groups, or the mixture of both.
|
61
66
|
def add_resource(*names)
|
62
|
-
|
67
|
+
synchronize do
|
63
68
|
# Recording membership first, used for ALL_UP event
|
64
69
|
names.each do |name|
|
65
|
-
g = OmfEc.experiment.group(name)
|
66
|
-
|
67
|
-
@members += g.members
|
68
|
-
self.add_resource(*g.members.uniq)
|
70
|
+
if (g = OmfEc.experiment.group(name))# resource to add is a group
|
71
|
+
@members.merge!(g.members)
|
69
72
|
else
|
70
|
-
|
71
|
-
@members << res.address
|
72
|
-
info "Config #{name} to join #{self.name}"
|
73
|
-
res.configure(membership: self.id)
|
74
|
-
end
|
73
|
+
@members[name] = nil
|
75
74
|
end
|
76
75
|
end
|
77
76
|
end
|
78
77
|
end
|
79
78
|
|
79
|
+
|
80
80
|
# Create a set of new resources and add them to the group
|
81
81
|
#
|
82
82
|
# @param [String] name
|
@@ -93,7 +93,8 @@ module OmfEc
|
|
93
93
|
end
|
94
94
|
|
95
95
|
# Naming convention of child resource group
|
96
|
-
resource_group_name = "#{self.id}_#{opts[:type].to_s}"
|
96
|
+
#resource_group_name = "#{self.id}_#{opts[:type].to_s}"
|
97
|
+
resource_group_name = self.address(opts[:type])
|
97
98
|
|
98
99
|
OmfEc.subscribe_and_monitor(resource_group_name) do |res_group|
|
99
100
|
associate_resource_topic(opts[:type].to_s, res_group)
|
data/lib/omf_ec/version.rb
CHANGED
data/lib/omf_ec.rb
CHANGED
@@ -38,25 +38,25 @@ module OmfEc
|
|
38
38
|
topic.on_inform do |msg|
|
39
39
|
case msg.itype
|
40
40
|
when 'CREATION.FAILED'
|
41
|
-
warn "RC reports creation.failed: '#{msg[:reason]}'"
|
42
|
-
debug msg
|
41
|
+
warn "RC reports creation.failed: '#{msg[:reason]}'", msg.src
|
42
|
+
debug msg, msg.src
|
43
43
|
when 'ERROR'
|
44
|
-
warn "RC reports error: '#{msg[:reason]}'"
|
45
|
-
debug msg
|
44
|
+
warn "RC reports error: '#{msg[:reason]}'", msg.src
|
45
|
+
debug msg, msg.src
|
46
46
|
when 'WARN'
|
47
|
-
warn "RC reports warning: '#{msg[:reason]}'"
|
48
|
-
debug msg
|
47
|
+
warn "RC reports warning: '#{msg[:reason]}'", msg.src
|
48
|
+
debug msg, msg.src
|
49
49
|
when 'CREATION.OK'
|
50
|
+
debug "Resource #{msg[:res_id]} #{msg.resource.address} created"
|
50
51
|
debug "Received CREATION.OK via #{topic.id}"
|
51
|
-
|
52
|
+
debug msg, msg.src
|
52
53
|
|
53
54
|
OmfEc.experiment.add_or_update_resource_state(msg.resource.address, msg.properties)
|
54
|
-
|
55
55
|
OmfEc.experiment.process_events
|
56
56
|
when 'STATUS'
|
57
57
|
props = []
|
58
58
|
msg.each_property { |k, v| props << "#{k}: #{v}" }
|
59
|
-
debug "#{topic.id} >>
|
59
|
+
debug "Received INFORM via #{topic.id} >> #{props.join(", ")}", msg.src
|
60
60
|
|
61
61
|
if msg[:status_type] == 'APP_EVENT'
|
62
62
|
info "APP_EVENT #{msg[:event]} from app #{msg[:app]} - msg: #{msg[:msg]}"
|
@@ -76,7 +76,7 @@ module OmfEc
|
|
76
76
|
if topic.error?
|
77
77
|
error "Failed to subscribe #{topic_id}"
|
78
78
|
else
|
79
|
-
|
79
|
+
debug "Subscribed to #{topic_id}"
|
80
80
|
context_obj.associate_topic(topic) if context_obj
|
81
81
|
block.call(context_obj || topic) if block
|
82
82
|
register_default_callback(topic)
|
data/omf_ec.gemspec
CHANGED
@@ -27,6 +27,6 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_development_dependency "pry"
|
28
28
|
s.add_development_dependency "mocha"
|
29
29
|
|
30
|
-
s.add_runtime_dependency "omf_common", "~> 6.0.
|
30
|
+
s.add_runtime_dependency "omf_common", "~> 6.0.4.pre.1"
|
31
31
|
s.add_runtime_dependency "gli", "~> 2.5.3"
|
32
32
|
end
|
data/test/omf_ec/group_spec.rb
CHANGED
@@ -9,10 +9,12 @@ require 'omf_ec/group'
|
|
9
9
|
describe OmfEc::Group do
|
10
10
|
before do
|
11
11
|
OmfEc.stubs(:subscribe_and_monitor)
|
12
|
+
OmfEc::Group.any_instance.stubs(:address).returns("xmpp://g@bob.com")
|
12
13
|
end
|
13
14
|
|
14
15
|
after do
|
15
16
|
OmfEc.unstub(:subscribe_and_monitor)
|
17
|
+
OmfEc::Group.any_instance.unstub(:address)
|
16
18
|
end
|
17
19
|
|
18
20
|
describe "when initialised" do
|
@@ -31,10 +33,10 @@ describe OmfEc::Group do
|
|
31
33
|
@g_b = OmfEc::Group.new('g_b', unique: false)
|
32
34
|
end
|
33
35
|
|
34
|
-
it "must init default context related
|
35
|
-
@group.net_ifs.must_equal
|
36
|
-
@group.members.must_equal
|
37
|
-
@group.app_contexts.must_equal
|
36
|
+
it "must init default context related variables" do
|
37
|
+
@group.net_ifs.must_equal([])
|
38
|
+
@group.members.must_equal({})
|
39
|
+
@group.app_contexts.must_equal([])
|
38
40
|
end
|
39
41
|
|
40
42
|
it "must be capable of adding existing resources to group" do
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omf_ec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.
|
5
|
-
prerelease:
|
4
|
+
version: 6.0.4.pre.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- NICTA
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-08-29 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: minitest
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: em-minitest-spec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: simplecov
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ! '>='
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: pry
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: mocha
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ! '>='
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -94,23 +83,20 @@ dependencies:
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: omf_common
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - ~>
|
100
88
|
- !ruby/object:Gem::Version
|
101
|
-
version: 6.0.
|
89
|
+
version: 6.0.4.pre.1
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - ~>
|
108
95
|
- !ruby/object:Gem::Version
|
109
|
-
version: 6.0.
|
96
|
+
version: 6.0.4.pre.1
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: gli
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
101
|
- - ~>
|
116
102
|
- !ruby/object:Gem::Version
|
@@ -118,7 +104,6 @@ dependencies:
|
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
108
|
- - ~>
|
124
109
|
- !ruby/object:Gem::Version
|
@@ -173,29 +158,25 @@ files:
|
|
173
158
|
homepage: http://omf.mytestbed.net
|
174
159
|
licenses:
|
175
160
|
- MIT
|
161
|
+
metadata: {}
|
176
162
|
post_install_message:
|
177
163
|
rdoc_options: []
|
178
164
|
require_paths:
|
179
165
|
- lib
|
180
166
|
required_ruby_version: !ruby/object:Gem::Requirement
|
181
|
-
none: false
|
182
167
|
requirements:
|
183
168
|
- - ! '>='
|
184
169
|
- !ruby/object:Gem::Version
|
185
170
|
version: 1.9.3
|
186
171
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
|
-
none: false
|
188
172
|
requirements:
|
189
|
-
- - ! '
|
173
|
+
- - ! '>'
|
190
174
|
- !ruby/object:Gem::Version
|
191
|
-
version:
|
192
|
-
segments:
|
193
|
-
- 0
|
194
|
-
hash: -4558190109347079441
|
175
|
+
version: 1.3.1
|
195
176
|
requirements: []
|
196
177
|
rubyforge_project: omf_ec
|
197
|
-
rubygems_version:
|
178
|
+
rubygems_version: 2.0.7
|
198
179
|
signing_key:
|
199
|
-
specification_version:
|
180
|
+
specification_version: 4
|
200
181
|
summary: OMF experiment controller
|
201
182
|
test_files: []
|