cpee-instantiation 1.0.24 → 1.1.0
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 +4 -4
- data/cpee-instantiation.gemspec +2 -2
- data/lib/cpee-instantiation/instantiation.rb +82 -223
- data/lib/cpee-instantiation/instantiation.xml +3 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6021132f4bec9ae574abbb13f9adfdc5806c5113ea3bdd3c563cef0db5694d8
|
4
|
+
data.tar.gz: 4fdbd5157ba88eb6c33b7e0eb413427530a75e4273ccbdad87bb0bc3ef6f40c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d06cdffce5e269adc97c7f868b5751b9f132a49169e6b8f64c44648a3f155421042debbf0b96d1839400ae95fa245401c6c6ded9237151787ed84abe798287f7
|
7
|
+
data.tar.gz: 00d3a630016867cd29d4f467a136fc0c965f4557bdf4af8c87ede4148ff1997f9a25e1ec97a30a6c217f91edd12132c09b81ad15b39bce65e30d9de74c0a65a0
|
data/cpee-instantiation.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "cpee-instantiation"
|
3
|
-
s.version = "1.0
|
3
|
+
s.version = "1.1.0"
|
4
4
|
s.platform = Gem::Platform::RUBY
|
5
5
|
s.license = "LGPL-3.0"
|
6
6
|
s.summary = "Subprocess instantiation service for the cloud process execution engine (cpee.org)"
|
@@ -23,5 +23,5 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_runtime_dependency 'riddl', '~> 1.0'
|
24
24
|
s.add_runtime_dependency 'json', '~> 2.1'
|
25
25
|
s.add_runtime_dependency 'redis', '~> 5.0'
|
26
|
-
s.add_runtime_dependency 'cpee', '~> 2.1', '>= 2.1.
|
26
|
+
s.add_runtime_dependency 'cpee', '~> 2.1', '>= 2.1.74'
|
27
27
|
end
|
@@ -25,6 +25,8 @@ require 'uri'
|
|
25
25
|
require 'redis'
|
26
26
|
require 'json'
|
27
27
|
|
28
|
+
require 'pry'
|
29
|
+
|
28
30
|
require_relative 'utils'
|
29
31
|
|
30
32
|
module CPEE
|
@@ -33,7 +35,8 @@ module CPEE
|
|
33
35
|
SERVER = File.expand_path(File.join(__dir__,'instantiation.xml'))
|
34
36
|
|
35
37
|
module Helpers #{{{
|
36
|
-
|
38
|
+
|
39
|
+
def add_to_testset(tdoc,what,data) #{{{
|
37
40
|
if data && !data.empty?
|
38
41
|
JSON::parse(data).each do |k,v|
|
39
42
|
ele = tdoc.find("/*/prop:#{what}/prop:#{k}")
|
@@ -50,9 +53,9 @@ module CPEE
|
|
50
53
|
end
|
51
54
|
end
|
52
55
|
end
|
53
|
-
end
|
56
|
+
end #}}}
|
54
57
|
|
55
|
-
def augment_testset(tdoc,p)
|
58
|
+
def augment_testset(tdoc,p) #{{{
|
56
59
|
tdoc = XML::Smart.string(tdoc)
|
57
60
|
tdoc.register_namespace 'desc', 'http://cpee.org/ns/description/1.0'
|
58
61
|
tdoc.register_namespace 'prop', 'http://cpee.org/ns/properties/2.0'
|
@@ -68,19 +71,9 @@ module CPEE
|
|
68
71
|
add_to_testset(tdoc,'attributes',data)
|
69
72
|
end
|
70
73
|
tdoc
|
71
|
-
end
|
72
|
-
|
73
|
-
def load_testset(doc,cpee,name=nil,customization=nil) #{{{
|
74
|
-
ins = -1
|
75
|
-
uuid = nil
|
74
|
+
end #}}}
|
76
75
|
|
77
|
-
|
78
|
-
res = srv.resource('/')
|
79
|
-
if name
|
80
|
-
doc.find('/*/prop:attributes/prop:info').each do |e|
|
81
|
-
e.text = name
|
82
|
-
end
|
83
|
-
end
|
76
|
+
def customize_testset(customization,doc) #{{{
|
84
77
|
if customization && !customization.empty?
|
85
78
|
JSON.parse(customization).each do |e|
|
86
79
|
begin
|
@@ -98,125 +91,76 @@ module CPEE
|
|
98
91
|
end
|
99
92
|
end
|
100
93
|
end
|
94
|
+
end #}}}
|
101
95
|
|
102
|
-
|
103
|
-
|
104
|
-
if
|
105
|
-
|
106
|
-
uuid = headers['CPEE_INSTANCE_UUID']
|
96
|
+
def add_waiting_to_testset(behavior,cb,doc,selfurl) #{{{
|
97
|
+
ckb = nil
|
98
|
+
if behavior =~ /^wait/
|
99
|
+
condition = behavior.match(/_([^_]+)_/)&.[](1) || 'finished'
|
107
100
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
101
|
+
if cb
|
102
|
+
cbk = '_instantiation_' + Digest::MD5.hexdigest(Kernel::rand().to_s)
|
103
|
+
n = doc.find('/*/sub:subscriptions') rescue []
|
104
|
+
if (n.empty?)
|
105
|
+
n = doc.root.add('subscriptions')
|
106
|
+
n.namespaces.add(nil,'http://riddl.org/ns/common-patterns/notifications-producer/2.0')
|
107
|
+
end
|
108
|
+
n.append('subscription', :id => cbk, :url => File.join(selfurl,'callback',cbk))
|
109
|
+
.append('topic', :id => 'state')
|
110
|
+
.append('event','change')
|
113
111
|
end
|
112
|
+
end
|
113
|
+
[cbk, condition]
|
114
|
+
end #}}}
|
114
115
|
|
115
|
-
|
116
|
-
|
117
|
-
doc.find('/*/
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
parts << Riddl::Parameter::Simple.new('url', s.attributes['url'])
|
123
|
-
s.find('sub:topic').each do |t|
|
124
|
-
if (evs = t.find('sub:event').map{ |e| e.text }.join(',')).length > 0
|
125
|
-
parts << Riddl::Parameter::Simple.new('topic', t.attributes['id'])
|
126
|
-
parts << Riddl::Parameter::Simple.new('events', evs)
|
127
|
-
end
|
128
|
-
if (vos = t.find('sub:vote').map{ |e| e.text }.join(',')).length > 0
|
129
|
-
parts << Riddl::Parameter::Simple.new('topic', t.attributes['id'])
|
130
|
-
parts << Riddl::Parameter::Simple.new('votes', vos)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
status,body = Riddl::Client::new(cpee+ins+'/notifications/subscriptions/').post parts
|
134
|
-
end rescue nil # in case just no subs are there
|
116
|
+
def add_running_to_testset(behavior,doc) #{{{
|
117
|
+
if behavior =~ /_running$/
|
118
|
+
if ((doc.find('/*/prop:state')).empty?)
|
119
|
+
doc.root.append('prop:state','running')
|
120
|
+
else
|
121
|
+
doc.find('/*/prop:state').first.text = 'running'
|
122
|
+
end
|
135
123
|
end
|
136
|
-
|
137
|
-
end #}}}
|
138
|
-
private :load_testset
|
139
|
-
def handle_waiting(cpee,instance,uuid,behavior,selfurl,cblist) #{{{
|
140
|
-
if behavior =~ /^wait/
|
141
|
-
condition = behavior.match(/_([^_]+)_/)&.[](1) || 'finished'
|
142
|
-
cb = @h['CPEE_CALLBACK']
|
124
|
+
end #}}}
|
143
125
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
]
|
126
|
+
def instantiate_testset(cpee,doc,behavior,cblist,cbk,cb,condition) #{{{
|
127
|
+
status, res, headers = Riddl::Client.new(cpee).post Riddl::Parameter::Complex.new('testset', 'application/xml', doc.to_s)
|
128
|
+
if status == 200
|
129
|
+
instance = res.first.value
|
130
|
+
uuid = headers['CPEE_INSTANCE_UUID']
|
131
|
+
|
132
|
+
if cbk
|
152
133
|
cblist.rpush(cbk, cb)
|
153
134
|
cblist.rpush(cbk, condition)
|
154
135
|
cblist.rpush(cbk, instance)
|
155
136
|
cblist.rpush(cbk, uuid)
|
156
137
|
cblist.rpush(cbk, File.join(cpee,instance))
|
138
|
+
@headers << Riddl::Header.new('CPEE-CALLBACK','true')
|
157
139
|
end
|
140
|
+
|
141
|
+
send = {
|
142
|
+
'CPEE-INSTANCE' => instance,
|
143
|
+
'CPEE-INSTANCE-URL' => File.join(cpee,instance),
|
144
|
+
'CPEE-INSTANCE-UUID' => uuid,
|
145
|
+
'CPEE-BEHAVIOR' => behavior
|
146
|
+
}
|
147
|
+
@headers << Riddl::Header.new('CPEE-INSTANTIATION',JSON::generate(send))
|
148
|
+
Riddl::Parameter::Complex.new('instance','application/json',JSON::generate(send))
|
149
|
+
else
|
150
|
+
@status = 500
|
158
151
|
end
|
159
152
|
end #}}}
|
160
|
-
|
161
|
-
def handle_starting(cpee,instance,behavior) #{{{
|
162
|
-
if behavior =~ /_running$/
|
163
|
-
sleep 0.5
|
164
|
-
srv = Riddl::Client.new(cpee, File.join(cpee,'?riddl-description'))
|
165
|
-
res = srv.resource("/#{instance}/properties/state")
|
166
|
-
status, response = res.put [
|
167
|
-
Riddl::Parameter::Simple.new('value','running')
|
168
|
-
]
|
169
|
-
end
|
170
|
-
end #}}}
|
171
|
-
private :handle_starting
|
172
|
-
def handle_data(cpee,instance,data) #{{{
|
173
|
-
if data && !data.empty?
|
174
|
-
content = XML::Smart.string('<dataelements xmlns="http://cpee.org/ns/properties/2.0"/>')
|
175
|
-
JSON::parse(data).each do |k,v|
|
176
|
-
content.root.add(k,CPEE::ValueHelper::generate(v))
|
177
|
-
end
|
178
|
-
srv = Riddl::Client.new(cpee, File.join(cpee,'?riddl-description'))
|
179
|
-
res = srv.resource("/#{instance}/properties/dataelements/")
|
180
|
-
status, response = res.patch [
|
181
|
-
Riddl::Parameter::Complex.new('dataelements','text/xml',content.to_s)
|
182
|
-
]
|
183
|
-
end rescue nil
|
184
|
-
end #}}}
|
185
|
-
def handle_endpoints(cpee,instance,data) #{{{
|
186
|
-
if data && !data.empty?
|
187
|
-
content = XML::Smart.string('<endpoints xmlns="http://cpee.org/ns/properties/2.0"/>')
|
188
|
-
JSON::parse(data).each do |k,v|
|
189
|
-
content.root.add(k,v)
|
190
|
-
end
|
191
|
-
srv = Riddl::Client.new(cpee, File.join(cpee,'?riddl-description'))
|
192
|
-
res = srv.resource("/#{instance}/properties/endpoints/")
|
193
|
-
status, response = res.patch [
|
194
|
-
Riddl::Parameter::Complex.new('endpoints','text/xml',content.to_s)
|
195
|
-
]
|
196
|
-
end rescue nil
|
197
|
-
end #}}}
|
198
|
-
def handle_attributes(cpee,instance,data) #{{{
|
199
|
-
if data && !data.empty?
|
200
|
-
content = XML::Smart.string('<attributes xmlns="http://cpee.org/ns/properties/2.0"/>')
|
201
|
-
JSON::parse(data).each do |k,v|
|
202
|
-
content.root.add(k,v)
|
203
|
-
end
|
204
|
-
srv = Riddl::Client.new(cpee, File.join(cpee,'?riddl-description'))
|
205
|
-
res = srv.resource("/#{instance}/properties/attributes/")
|
206
|
-
status, response = res.patch [
|
207
|
-
Riddl::Parameter::Complex.new('attributes','text/xml',content.to_s)
|
208
|
-
]
|
209
|
-
end rescue nil
|
210
|
-
end #}}}
|
153
|
+
|
211
154
|
end #}}}
|
212
155
|
|
213
156
|
class InstantiateGit < Riddl::Implementation #{{{
|
214
157
|
include Helpers
|
215
158
|
|
216
159
|
def response
|
217
|
-
cpee
|
218
|
-
selfurl
|
219
|
-
cblist
|
160
|
+
cpee = @h['X_CPEE'] || @a[0]
|
161
|
+
selfurl = @a[1]
|
162
|
+
cblist = @a[2]
|
163
|
+
behavior = @p[0].value
|
220
164
|
|
221
165
|
status, res = Riddl::Client.new(File.join(@p[1].value,'raw',@p[2].value,@p[3].value).gsub(/ /,'%20')).get
|
222
166
|
tdoc = if status >= 200 && status < 300
|
@@ -226,27 +170,12 @@ module CPEE
|
|
226
170
|
end
|
227
171
|
customization = @p.find{ |e| e.name == 'customization' }&.value
|
228
172
|
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
EM.defer do
|
234
|
-
handle_waiting cpee, instance, uuid, @p[0].value, selfurl, cblist
|
235
|
-
handle_starting cpee, instance, @p[0].value
|
236
|
-
end
|
173
|
+
doc = augment_testset(tdoc,@p)
|
174
|
+
customize_testset(customization,doc)
|
175
|
+
cbk, condition = add_waiting_to_testset(behavior,@h['CPEE_CALLBACK'],doc,selfurl)
|
176
|
+
add_running_to_testset(behavior,doc)
|
237
177
|
|
238
|
-
|
239
|
-
'CPEE-INSTANCE' => instance,
|
240
|
-
'CPEE-INSTANCE-URL' => File.join(cpee,instance),
|
241
|
-
'CPEE-INSTANCE-UUID' => uuid,
|
242
|
-
'CPEE-BEHAVIOR' => @p[0].value
|
243
|
-
}
|
244
|
-
if @p[0].value =~ /^wait/
|
245
|
-
@headers << Riddl::Header.new('CPEE-CALLBACK','true')
|
246
|
-
end
|
247
|
-
@headers << Riddl::Header.new('CPEE-INSTANTIATION',JSON::generate(send))
|
248
|
-
Riddl::Parameter::Complex.new('instance','application/json',JSON::generate(send))
|
249
|
-
end
|
178
|
+
instantiate_testset(cpee,doc,@p[0].value,cblist,cbk,@h['CPEE_CALLBACK'],condition)
|
250
179
|
end
|
251
180
|
end #}}}
|
252
181
|
|
@@ -254,10 +183,11 @@ module CPEE
|
|
254
183
|
include Helpers
|
255
184
|
|
256
185
|
def response
|
257
|
-
cpee
|
258
|
-
selfurl
|
259
|
-
cblist
|
260
|
-
name
|
186
|
+
cpee = @h['X_CPEE'] || @a[0]
|
187
|
+
selfurl = @a[1]
|
188
|
+
cblist = @a[2]
|
189
|
+
name = @a[3] ? @p.shift.value : nil
|
190
|
+
behavior = @p[0].value
|
261
191
|
|
262
192
|
status, res = Riddl::Client.new(@p[1].value.gsub(/ /,'%20')).get
|
263
193
|
tdoc = if status >= 200 && status < 300
|
@@ -267,31 +197,16 @@ module CPEE
|
|
267
197
|
end
|
268
198
|
customization = @p.find{ |e| e.name == 'customization' }&.value
|
269
199
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
EM.defer do
|
275
|
-
handle_waiting cpee, instance, uuid, @p[0].value, selfurl, cblist
|
276
|
-
handle_starting cpee, instance, @p[0].value
|
277
|
-
end
|
200
|
+
doc = augment_testset(tdoc,@p)
|
201
|
+
customize_testset(customization,doc)
|
202
|
+
cbk, condition = add_waiting_to_testset(behavior,@h['CPEE_CALLBACK'],doc,selfurl)
|
203
|
+
add_running_to_testset(behavior,doc)
|
278
204
|
|
279
|
-
|
280
|
-
'CPEE-INSTANCE' => instance,
|
281
|
-
'CPEE-INSTANCE-URL' => File.join(cpee,instance),
|
282
|
-
'CPEE-INSTANCE-UUID' => uuid,
|
283
|
-
'CPEE-BEHAVIOR' => @p[0].value
|
284
|
-
}
|
285
|
-
if @p[0].value =~ /^wait/
|
286
|
-
@headers << Riddl::Header.new('CPEE-CALLBACK','true')
|
287
|
-
end
|
288
|
-
@headers << Riddl::Header.new('CPEE-INSTANTIATION',JSON::generate(send))
|
289
|
-
Riddl::Parameter::Complex.new('instance','application/json',JSON::generate(send))
|
290
|
-
end
|
205
|
+
instantiate_testset(cpee,doc,@p[0].value,cblist,cbk,@h['CPEE_CALLBACK'],condition)
|
291
206
|
end
|
292
|
-
|
207
|
+
end #}}}
|
293
208
|
|
294
|
-
class InstantiateXML < Riddl::Implementation #{{{
|
209
|
+
class InstantiateXML < Riddl::Implementation #{{{
|
295
210
|
include Helpers
|
296
211
|
|
297
212
|
def response
|
@@ -301,71 +216,18 @@ class InstantiateXML < Riddl::Implementation #{{{
|
|
301
216
|
data = @a[1] ? 0 : 1
|
302
217
|
selfurl = @a[2]
|
303
218
|
cblist = @a[3]
|
304
|
-
puts "Received data: #{@p}"
|
305
|
-
puts "p[data]: #{@p[data]}"
|
306
219
|
tdoc = if @p[data].additional =~ /base64/
|
307
220
|
Base64.decode64(@p[data].value.read)
|
308
221
|
else
|
309
222
|
@p[data].value.read
|
310
223
|
end
|
311
224
|
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
EM.defer do
|
317
|
-
handle_waiting cpee, instance, uuid, behavior, selfurl, cblist
|
318
|
-
handle_starting cpee, instance, behavior
|
319
|
-
end
|
225
|
+
doc = augment_testset(tdoc,@p)
|
226
|
+
customize_testset(customization,doc)
|
227
|
+
cbk, condition = add_waiting_to_testset(behavior,@h['CPEE_CALLBACK'],doc,selfurl)
|
228
|
+
add_running_to_testset(behavior,doc)
|
320
229
|
|
321
|
-
|
322
|
-
'CPEE-INSTANCE' => instance,
|
323
|
-
'CPEE-INSTANCE-URL' => File.join(cpee,instance),
|
324
|
-
'CPEE-INSTANCE-UUID' => uuid,
|
325
|
-
'CPEE-BEHAVIOR' => behavior
|
326
|
-
}
|
327
|
-
if @p[0].value =~ /^wait/
|
328
|
-
@headers << Riddl::Header.new('CPEE-CALLBACK','true')
|
329
|
-
end
|
330
|
-
@headers << Riddl::Header.new('CPEE-INSTANTIATION',JSON::generate(send))
|
331
|
-
Riddl::Parameter::Complex.new('instance','application/json',JSON::generate(send))
|
332
|
-
end
|
333
|
-
end
|
334
|
-
end #}}}
|
335
|
-
|
336
|
-
class HandleInstance < Riddl::Implementation #{{{
|
337
|
-
include Helpers
|
338
|
-
|
339
|
-
def response
|
340
|
-
cpee = @h['X_CPEE'] || @a[0]
|
341
|
-
selfurl = @a[1]
|
342
|
-
cblist = @a[2]
|
343
|
-
instance = @p[1].value
|
344
|
-
|
345
|
-
srv = Riddl::Client.new(cpee)
|
346
|
-
res = srv.resource("/#{instance}/properties/attributes/uuid/")
|
347
|
-
status, response = res.get
|
348
|
-
|
349
|
-
if status >= 200 && status < 300
|
350
|
-
uuid = response.first.value
|
351
|
-
handle_data cpee, instance, @p[2]&.value
|
352
|
-
handle_waiting cpee, instance, uuid, @p[0].value, selfurl, cblist
|
353
|
-
handle_starting cpee, instance, @p[0].value
|
354
|
-
|
355
|
-
send = {
|
356
|
-
'CPEE-INSTANCE' => instance,
|
357
|
-
'CPEE-INSTANCE-URL' => File.join(cpee,instance),
|
358
|
-
'CPEE-INSTANCE-UUID' => uuid,
|
359
|
-
'CPEE-BEHAVIOR' => @p[0].value
|
360
|
-
}
|
361
|
-
|
362
|
-
if @p[0].value =~ /^wait/
|
363
|
-
@headers << Riddl::Header.new('CPEE-CALLBACK','true')
|
364
|
-
end
|
365
|
-
Riddl::Parameter::Complex.new('instance','application/json',JSON::generate(send))
|
366
|
-
else
|
367
|
-
@status = 500
|
368
|
-
end
|
230
|
+
instantiate_testset(cpee,doc,@p[0].value,cblist,cbk,@h['CPEE_CALLBACK'],condition)
|
369
231
|
end
|
370
232
|
end #}}}
|
371
233
|
|
@@ -394,7 +256,7 @@ class InstantiateXML < Riddl::Implementation #{{{
|
|
394
256
|
|
395
257
|
if notification['content']['state'] == condition
|
396
258
|
cblist.del(key)
|
397
|
-
srv = Riddl::Client.new(cpee
|
259
|
+
srv = Riddl::Client.new(cpee)
|
398
260
|
res = srv.resource("/#{instance}/properties/dataelements")
|
399
261
|
status, response = res.get
|
400
262
|
if status >= 200 && status < 300
|
@@ -413,7 +275,7 @@ class InstantiateXML < Riddl::Implementation #{{{
|
|
413
275
|
end
|
414
276
|
end
|
415
277
|
|
416
|
-
end #}}}
|
278
|
+
end #}}}
|
417
279
|
|
418
280
|
def self::implementation(opts)
|
419
281
|
opts[:cpee] ||= 'http://localhost:9298/'
|
@@ -454,9 +316,6 @@ end #}}}
|
|
454
316
|
on resource 'git' do
|
455
317
|
run InstantiateGit, opts[:cpee], opts[:self], opts[:redis] if post 'git'
|
456
318
|
end
|
457
|
-
on resource 'instance' do
|
458
|
-
run HandleInstance, opts[:cpee], opts[:self], opts[:redis] if post 'instance'
|
459
|
-
end
|
460
319
|
on resource 'callback' do
|
461
320
|
on resource do
|
462
321
|
run ContinueTask, opts[:cpee], opts[:redis] if post
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cpee-instantiation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juergen eTM Mangler
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: tools
|
11
11
|
cert_chain: []
|
12
|
-
date: 2025-
|
12
|
+
date: 2025-02-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: riddl
|
@@ -62,7 +62,7 @@ dependencies:
|
|
62
62
|
version: '2.1'
|
63
63
|
- - ">="
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: 2.1.
|
65
|
+
version: 2.1.74
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
68
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -72,7 +72,7 @@ dependencies:
|
|
72
72
|
version: '2.1'
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 2.1.
|
75
|
+
version: 2.1.74
|
76
76
|
description: see http://cpee.org
|
77
77
|
email: juergen.mangler@gmail.com
|
78
78
|
executables:
|