vmc 0.4.0.beta.16 → 0.4.0.beta.17
Sign up to get free protection for your applications and to get access to all the features.
- data/vmc-ng/lib/vmc/cli.rb +4 -0
- data/vmc-ng/lib/vmc/cli/app.rb +80 -57
- data/vmc-ng/lib/vmc/cli/interactive.rb +2 -2
- data/vmc-ng/lib/vmc/cli/service.rb +73 -42
- data/vmc-ng/lib/vmc/cli/user.rb +1 -1
- data/vmc-ng/lib/vmc/version.rb +1 -1
- metadata +13 -13
data/vmc-ng/lib/vmc/cli.rb
CHANGED
data/vmc-ng/lib/vmc/cli/app.rb
CHANGED
@@ -33,6 +33,14 @@ module VMC
|
|
33
33
|
}
|
34
34
|
|
35
35
|
|
36
|
+
def self.find_by_name(what)
|
37
|
+
proc { |name, choices|
|
38
|
+
choices.find { |c| c.name == name } ||
|
39
|
+
fail("Unknown #{what} '#{name}'")
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
|
36
44
|
desc "List your applications"
|
37
45
|
group :apps
|
38
46
|
input :name, :desc => "Filter by name regexp"
|
@@ -86,14 +94,29 @@ module VMC
|
|
86
94
|
:desc => "Number of instances to run") {
|
87
95
|
ask("Instances", :default => 1)
|
88
96
|
}
|
89
|
-
input(:framework, :desc => "Framework to use"
|
90
|
-
|
97
|
+
input(:framework, :desc => "Framework to use",
|
98
|
+
:from_given => find_by_name("framework")) { |choices, default, other|
|
99
|
+
choices = choices.sort_by(&:name)
|
100
|
+
choices << other if other
|
101
|
+
|
102
|
+
opts = {
|
103
|
+
:choices => choices,
|
104
|
+
:display => proc { |f|
|
105
|
+
if f == other
|
106
|
+
"other"
|
107
|
+
else
|
108
|
+
f.name
|
109
|
+
end
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
91
113
|
opts[:default] = default if default
|
92
114
|
|
93
115
|
ask("Framework", opts)
|
94
116
|
}
|
95
|
-
input(:runtime, :desc => "Runtime to run it with"
|
96
|
-
|
117
|
+
input(:runtime, :desc => "Runtime to run it with",
|
118
|
+
:from_given => find_by_name("runtime")) { |choices|
|
119
|
+
ask("Runtime", :choices => choices, :display => proc(&:name))
|
97
120
|
}
|
98
121
|
input(:command, :desc => "Startup command for standalone app") {
|
99
122
|
ask("Startup command")
|
@@ -115,14 +138,7 @@ module VMC
|
|
115
138
|
|
116
139
|
name = input[:name] if input[:name]
|
117
140
|
|
118
|
-
exists =
|
119
|
-
if v2?
|
120
|
-
client.current_space.apps.find { |a| a.name == name }
|
121
|
-
elsif client.app(name).exists?
|
122
|
-
client.app(name)
|
123
|
-
end
|
124
|
-
|
125
|
-
if exists
|
141
|
+
if exists = client.app_by_name(name)
|
126
142
|
upload_app(exists, path)
|
127
143
|
invoke :restart, :name => exists.name if input[:restart]
|
128
144
|
return
|
@@ -137,28 +153,22 @@ module VMC
|
|
137
153
|
app.space = client.current_space if v2?
|
138
154
|
app.total_instances = input[:instances]
|
139
155
|
|
140
|
-
framework_names = frameworks.collect(&:name).sort
|
141
156
|
if detected.empty?
|
142
|
-
|
157
|
+
framework = input[:framework, frameworks, nil, false]
|
143
158
|
else
|
144
159
|
detected_names = detected.collect(&:name).sort
|
145
|
-
|
146
|
-
input[:framework, detected_names + ["other"], default && default.name]
|
160
|
+
framework = input[:framework, detected, default, true]
|
147
161
|
|
148
|
-
if
|
162
|
+
if framework == :other
|
149
163
|
input.forget(:framework)
|
150
|
-
|
164
|
+
framework = input[:framework, frameworks, nil, false]
|
151
165
|
end
|
152
166
|
end
|
153
167
|
|
154
|
-
framework = frameworks.find { |f| f.name == framework_name }
|
155
|
-
|
156
168
|
runtimes = v2? ? client.runtimes : framework.runtimes
|
157
|
-
|
158
|
-
runtime = runtimes.find { |r| r.name == runtime_name }
|
169
|
+
runtime = input[:runtime, runtimes]
|
159
170
|
|
160
171
|
fail "Invalid framework '#{input[:framework]}'" unless framework
|
161
|
-
|
162
172
|
fail "Invalid runtime '#{input[:runtime]}'" unless runtime
|
163
173
|
|
164
174
|
app.framework = framework
|
@@ -237,10 +247,12 @@ module VMC
|
|
237
247
|
names = input[:names]
|
238
248
|
fail "No applications given." if names.empty?
|
239
249
|
|
250
|
+
apps = client.apps
|
251
|
+
|
240
252
|
names.each do |name|
|
241
|
-
app =
|
253
|
+
app = apps.find { |a| a.name == name }
|
242
254
|
|
243
|
-
fail "Unknown application '#{name}'" unless app
|
255
|
+
fail "Unknown application '#{name}'" unless app
|
244
256
|
|
245
257
|
app = filter(:start_app, app)
|
246
258
|
|
@@ -256,6 +268,9 @@ module VMC
|
|
256
268
|
app.start!
|
257
269
|
end
|
258
270
|
|
271
|
+
# TODO: reenable for v2
|
272
|
+
next if v2?
|
273
|
+
|
259
274
|
check_application(app)
|
260
275
|
|
261
276
|
if app.debug_mode && !quiet?
|
@@ -274,16 +289,14 @@ module VMC
|
|
274
289
|
names = input[:names]
|
275
290
|
fail "No applications given." if names.empty?
|
276
291
|
|
292
|
+
apps = client.apps
|
293
|
+
|
277
294
|
names.each do |name|
|
278
|
-
|
279
|
-
app = client.app(name)
|
295
|
+
app = apps.find { |a| a.name == name }
|
280
296
|
|
281
|
-
|
282
|
-
s.fail do
|
283
|
-
err "Unknown application '#{name}'"
|
284
|
-
end
|
285
|
-
end
|
297
|
+
fail "Unknown application '#{name}'" unless app
|
286
298
|
|
299
|
+
with_progress("Stopping #{c(name, :name)}") do |s|
|
287
300
|
if app.stopped?
|
288
301
|
s.skip do
|
289
302
|
err "Application is not running."
|
@@ -311,12 +324,14 @@ module VMC
|
|
311
324
|
|
312
325
|
desc "Delete an application"
|
313
326
|
group :apps, :manage
|
314
|
-
input(:really, :type => :boolean) { |name, color|
|
327
|
+
input(:really, :type => :boolean, :forget => true) { |name, color|
|
315
328
|
force? || ask("Really delete #{c(name, color)}?", :default => false)
|
316
329
|
}
|
317
|
-
input(:
|
318
|
-
:desc => "Applications to delete"
|
319
|
-
|
330
|
+
input(:apps, :argument => :splat, :singular => :app,
|
331
|
+
:desc => "Applications to delete",
|
332
|
+
:from_given => find_by_name("application")) { |apps|
|
333
|
+
[ask("Delete which application?", :choices => apps.sort_by(&:name),
|
334
|
+
:display => proc(&:name))]
|
320
335
|
}
|
321
336
|
input :orphaned, :aliases => "-o", :type => :boolean,
|
322
337
|
:desc => "Delete orphaned instances"
|
@@ -344,15 +359,7 @@ module VMC
|
|
344
359
|
apps = client.apps
|
345
360
|
fail "No applications." if apps.empty?
|
346
361
|
|
347
|
-
|
348
|
-
|
349
|
-
to_delete = names.collect do |n|
|
350
|
-
if app = apps.find { |a| a.name == n }
|
351
|
-
app
|
352
|
-
else
|
353
|
-
fail "Unknown application '#{n}'"
|
354
|
-
end
|
355
|
-
end
|
362
|
+
to_delete = input[:apps, apps]
|
356
363
|
|
357
364
|
deleted = []
|
358
365
|
to_delete.each do |app|
|
@@ -379,13 +386,15 @@ module VMC
|
|
379
386
|
input :names, :argument => :splat, :singular => :name,
|
380
387
|
:desc => "Applications to list instances of"
|
381
388
|
def instances(input)
|
389
|
+
no_v2
|
390
|
+
|
382
391
|
names = input[:names]
|
383
392
|
fail "No applications given." if names.empty?
|
384
393
|
|
385
394
|
names.each do |name|
|
386
395
|
instances =
|
387
396
|
with_progress("Getting instances for #{c(name, :name)}") do
|
388
|
-
client.
|
397
|
+
client.app_by_name(name).instances
|
389
398
|
end
|
390
399
|
|
391
400
|
instances.each do |i|
|
@@ -415,7 +424,7 @@ module VMC
|
|
415
424
|
:desc => "Restart app after updating?"
|
416
425
|
def scale(input)
|
417
426
|
name = input[:name]
|
418
|
-
app = client.
|
427
|
+
app = client.app_by_name(name)
|
419
428
|
|
420
429
|
instances = input.given(:instances)
|
421
430
|
memory = input.given(:memory)
|
@@ -453,9 +462,11 @@ module VMC
|
|
453
462
|
input :all, :default => false,
|
454
463
|
:desc => "Get logs for every instance"
|
455
464
|
def logs(input)
|
465
|
+
no_v2
|
466
|
+
|
456
467
|
name = input[:name]
|
457
468
|
|
458
|
-
app = client.
|
469
|
+
app = client.app_by_name(name)
|
459
470
|
fail "Unknown application '#{name}'" unless app.exists?
|
460
471
|
|
461
472
|
instances =
|
@@ -504,6 +515,8 @@ module VMC
|
|
504
515
|
input :path, :argument => true, :default => "/",
|
505
516
|
:desc => "Path of file to read"
|
506
517
|
def file(input)
|
518
|
+
no_v2
|
519
|
+
|
507
520
|
file =
|
508
521
|
with_progress("Getting file contents") do
|
509
522
|
client.app(input[:name]).file(*input[:path].split("/"))
|
@@ -521,6 +534,8 @@ module VMC
|
|
521
534
|
input :path, :argument => true, :default => "/",
|
522
535
|
:desc => "Path of directory to list"
|
523
536
|
def files(input)
|
537
|
+
no_v2
|
538
|
+
|
524
539
|
files =
|
525
540
|
with_progress("Getting file listing") do
|
526
541
|
client.app(input[:name]).files(*input[:path].split("/"))
|
@@ -538,10 +553,12 @@ module VMC
|
|
538
553
|
input :names, :argument => :splat, :singular => :name,
|
539
554
|
:desc => "Application to check the status of"
|
540
555
|
def health(input)
|
556
|
+
# TODO: get all apps and filter
|
557
|
+
|
541
558
|
apps =
|
542
559
|
with_progress("Getting application health") do
|
543
560
|
input[:names].collect do |n|
|
544
|
-
[n, app_status(client.
|
561
|
+
[n, app_status(client.app_by_name(n))]
|
545
562
|
end
|
546
563
|
end
|
547
564
|
|
@@ -561,9 +578,11 @@ module VMC
|
|
561
578
|
input :name, :argument => true,
|
562
579
|
:desc => "Application to get the stats for"
|
563
580
|
def stats(input)
|
581
|
+
no_v2
|
582
|
+
|
564
583
|
stats =
|
565
584
|
with_progress("Getting stats for #{c(input[:name], :name)}") do
|
566
|
-
client.
|
585
|
+
client.app_by_name(input[:name]).stats
|
567
586
|
end
|
568
587
|
|
569
588
|
stats.sort_by { |k, _| k }.each do |idx, info|
|
@@ -592,11 +611,13 @@ module VMC
|
|
592
611
|
input :url, :argument => true,
|
593
612
|
:desc => "URL to route"
|
594
613
|
def map(input)
|
614
|
+
no_v2
|
615
|
+
|
595
616
|
name = input[:name]
|
596
617
|
simple = input[:url].sub(/^https?:\/\/(.*)\/?/i, '\1')
|
597
618
|
|
598
619
|
with_progress("Updating #{c(name, :name)}") do
|
599
|
-
app = client.
|
620
|
+
app = client.app_by_name(name)
|
600
621
|
app.urls << simple
|
601
622
|
app.update!
|
602
623
|
end
|
@@ -611,8 +632,10 @@ module VMC
|
|
611
632
|
ask("Which URL?", :choices => choices)
|
612
633
|
}
|
613
634
|
def unmap(input)
|
635
|
+
no_v2
|
636
|
+
|
614
637
|
name = input[:name]
|
615
|
-
app = client.
|
638
|
+
app = client.app_by_name(name)
|
616
639
|
|
617
640
|
url = input[:url, app.urls]
|
618
641
|
|
@@ -642,7 +665,7 @@ module VMC
|
|
642
665
|
|
643
666
|
vars =
|
644
667
|
with_progress("Getting env for #{c(input[:name], :name)}") do |s|
|
645
|
-
app = client.
|
668
|
+
app = client.app_by_name(appname)
|
646
669
|
|
647
670
|
unless app.exists?
|
648
671
|
s.fail do
|
@@ -689,7 +712,7 @@ module VMC
|
|
689
712
|
fail "Invalid variable name; must match #{VALID_ENV_VAR.inspect}"
|
690
713
|
end
|
691
714
|
|
692
|
-
app = client.
|
715
|
+
app = client.app_by_name(appname)
|
693
716
|
fail "Unknown application '#{appname}'" unless app.exists?
|
694
717
|
|
695
718
|
with_progress("Updating #{c(app.name, :name)}") do
|
@@ -721,7 +744,7 @@ module VMC
|
|
721
744
|
appname = input[:name]
|
722
745
|
name = input[:var]
|
723
746
|
|
724
|
-
app = client.
|
747
|
+
app = client.app_by_name(appname)
|
725
748
|
fail "Unknown application '#{appname}'" unless app.exists?
|
726
749
|
|
727
750
|
with_progress("Updating #{c(app.name, :name)}") do
|
@@ -752,11 +775,11 @@ module VMC
|
|
752
775
|
end
|
753
776
|
|
754
777
|
if runtime = options[:runtime]
|
755
|
-
return false if a.runtime !~ /#{runtime}/
|
778
|
+
return false if a.runtime.name !~ /#{runtime}/
|
756
779
|
end
|
757
780
|
|
758
781
|
if framework = options[:framework]
|
759
|
-
return false if a.framework !~ /#{framework}/
|
782
|
+
return false if a.framework.name !~ /#{framework}/
|
760
783
|
end
|
761
784
|
|
762
785
|
if url = options[:url]
|
@@ -12,9 +12,9 @@ module VMC
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
def list_choices(choices, options)
|
15
|
+
def list_choices(choices, options = {})
|
16
16
|
choices.each_with_index do |o, i|
|
17
|
-
puts "#{c(i + 1, :number)}: #{o}"
|
17
|
+
puts "#{c(i + 1, :number)}: #{show_choice(o, options)}"
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -6,69 +6,87 @@ module VMC
|
|
6
6
|
group :services
|
7
7
|
input :name, :desc => "Filter by name regexp"
|
8
8
|
input :app, :desc => "Filter by bound application regexp"
|
9
|
+
input :service, :desc => "Filter by service regexp"
|
10
|
+
# TODO: not in v2
|
9
11
|
input :type, :desc => "Filter by service type regexp"
|
10
|
-
input :vendor, :desc => "Filter by service vendor regexp"
|
11
12
|
input :tier, :desc => "Filter by service tier regexp"
|
12
13
|
def services(input)
|
13
|
-
|
14
|
+
instances =
|
14
15
|
with_progress("Getting service instances") do
|
15
|
-
client.service_instances
|
16
|
+
client.service_instances(2)
|
16
17
|
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
if services.empty? and !quiet?
|
19
|
+
if instances.empty? and !quiet?
|
20
|
+
puts ""
|
21
21
|
puts "No services."
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
services.reject! do |s|
|
27
|
-
apps.none? { |a| a.services.include? s.name }
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
services.each do |s|
|
32
|
-
display_service(s) if service_matches(s, input)
|
24
|
+
instances.each.with_index do |i, n|
|
25
|
+
display_instance(i) if instance_matches(i, input)
|
33
26
|
end
|
34
27
|
end
|
35
28
|
|
29
|
+
services_from_label = proc { |label, services|
|
30
|
+
services.select { |s| s.label == label }
|
31
|
+
}
|
32
|
+
|
33
|
+
plan_from_name = proc { |name, plans|
|
34
|
+
plans.find { |p| p.name == name }
|
35
|
+
}
|
36
36
|
|
37
37
|
desc "Create a service"
|
38
38
|
group :services, :manage
|
39
39
|
input(:service, :argument => true,
|
40
|
-
:desc => "What kind of service (e.g. redis, mysql)"
|
41
|
-
|
40
|
+
:desc => "What kind of service (e.g. redis, mysql)",
|
41
|
+
:from_given => services_from_label) { |services|
|
42
|
+
[ask("What kind?", :choices => services.sort_by(&:label),
|
43
|
+
:display => proc { |s| "#{c(s.label, :name)} v#{s.version}" },
|
44
|
+
:complete => proc { |s| "#{s.label} v#{s.version}" })]
|
42
45
|
}
|
43
46
|
input(:name, :argument => true,
|
44
|
-
:desc => "
|
47
|
+
:desc => "Name for your instance") { |service|
|
45
48
|
random = sprintf("%x", rand(1000000))
|
46
49
|
ask "Name?", :default => "#{service.label}-#{random}"
|
47
50
|
}
|
48
|
-
input(:version, :desc => "Version of the service") { |
|
49
|
-
ask "Which version?", :choices =>
|
51
|
+
input(:version, :desc => "Version of the service") { |services|
|
52
|
+
ask "Which version?", :choices => services,
|
53
|
+
:display => proc(&:version)
|
54
|
+
}
|
55
|
+
input(:plan, :desc => "Service plan",
|
56
|
+
:from_given => plan_from_name) { |plans|
|
57
|
+
ask "Which plan?", :choices => plans.sort_by(&:name),
|
58
|
+
:display => proc { |p| "#{p.name}: #{p.description}" },
|
59
|
+
:complete => proc(&:name)
|
50
60
|
}
|
51
61
|
input :bind, :alias => "--app",
|
52
62
|
:desc => "Application to immediately bind to"
|
53
63
|
def create_service(input)
|
54
64
|
services = client.services
|
55
65
|
|
56
|
-
|
57
|
-
services = services.select { |s| s.label == service_label }
|
66
|
+
services = input[:service, services]
|
58
67
|
|
59
68
|
if services.size == 1
|
60
69
|
service = services.first
|
61
70
|
else
|
62
|
-
|
63
|
-
service = services.find { |s| s.version == version }
|
71
|
+
service = input[:version, services]
|
64
72
|
end
|
65
73
|
|
74
|
+
plans = service.service_plans
|
75
|
+
plan = plans.find { |p| p.name == "D100" } || input[:plan, plans]
|
76
|
+
|
66
77
|
instance = client.service_instance
|
67
78
|
instance.name = input[:name, service]
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
79
|
+
|
80
|
+
if v2?
|
81
|
+
instance.service_plan = plan
|
82
|
+
instance.space = client.current_space
|
83
|
+
instance.credentials = {} # TODO: ?
|
84
|
+
else
|
85
|
+
instance.type = service.type
|
86
|
+
instance.vendor = service.label
|
87
|
+
instance.version = service.version
|
88
|
+
instance.tier = "free"
|
89
|
+
end
|
72
90
|
|
73
91
|
with_progress("Creating service #{c(instance.name, :name)}") do
|
74
92
|
instance.create!
|
@@ -97,7 +115,7 @@ module VMC
|
|
97
115
|
appname = input[:app, client.apps.collect(&:name)]
|
98
116
|
|
99
117
|
with_progress("Binding #{c(name, :name)} to #{c(appname, :name)}") do
|
100
|
-
client.
|
118
|
+
client.app_by_name(appname).bind(name)
|
101
119
|
end
|
102
120
|
end
|
103
121
|
|
@@ -115,7 +133,7 @@ module VMC
|
|
115
133
|
def unbind_service(input)
|
116
134
|
appname = input[:app, client.apps.collect(&:name)]
|
117
135
|
|
118
|
-
app = client.
|
136
|
+
app = client.app_by_name(appname)
|
119
137
|
name = input[:name, app.services]
|
120
138
|
|
121
139
|
with_progress("Unbinding #{c(name, :name)} from #{c(appname, :name)}") do
|
@@ -130,7 +148,7 @@ module VMC
|
|
130
148
|
:desc => "Service to delete") { |choices|
|
131
149
|
ask "Delete which service?", :choices => choices
|
132
150
|
}
|
133
|
-
input(:really, :type => :boolean) { |name, color|
|
151
|
+
input(:really, :type => :boolean, :forget => true) { |name, color|
|
134
152
|
force? || ask("Really delete #{c(name, color)}?", :default => false)
|
135
153
|
}
|
136
154
|
input :all, :default => false, :desc => "Delete all services"
|
@@ -160,31 +178,44 @@ module VMC
|
|
160
178
|
|
161
179
|
private
|
162
180
|
|
163
|
-
def
|
181
|
+
def instance_matches(i, options)
|
182
|
+
if app = options[:app]
|
183
|
+
return false if i.service_bindings.none? { |b|
|
184
|
+
b.app.name == app
|
185
|
+
}
|
186
|
+
end
|
187
|
+
|
164
188
|
if name = options[:name]
|
165
|
-
return false if
|
189
|
+
return false if i.name !~ /#{name}/
|
166
190
|
end
|
167
191
|
|
168
|
-
if
|
169
|
-
return false if
|
192
|
+
if service = options[:service]
|
193
|
+
return false if i.service_plan.service.label !~ /#{service}/
|
170
194
|
end
|
171
195
|
|
172
|
-
if
|
173
|
-
return false if
|
196
|
+
if !v2? && type = options[:type]
|
197
|
+
return false if i.type !~ /#{type}/
|
174
198
|
end
|
175
199
|
|
176
|
-
if tier = options[:tier]
|
177
|
-
return false if
|
200
|
+
if !v2? && tier = options[:tier]
|
201
|
+
return false if i.tier !~ /#{tier}/
|
178
202
|
end
|
179
203
|
|
180
204
|
true
|
181
205
|
end
|
182
206
|
|
183
|
-
def
|
207
|
+
def display_instance(i)
|
184
208
|
if quiet?
|
185
|
-
puts
|
209
|
+
puts i.name
|
186
210
|
else
|
187
|
-
|
211
|
+
plan = i.service_plan
|
212
|
+
service = plan.service
|
213
|
+
|
214
|
+
puts ""
|
215
|
+
puts "#{c(i.name, :name)}: #{service.label} v#{service.version}"
|
216
|
+
puts " description: #{service.description}"
|
217
|
+
puts " plan: #{c(plan.name, :name)}"
|
218
|
+
puts " description: #{plan.description}"
|
188
219
|
end
|
189
220
|
end
|
190
221
|
end
|
data/vmc-ng/lib/vmc/cli/user.rb
CHANGED
@@ -46,7 +46,7 @@ module VMC
|
|
46
46
|
desc "Delete a user"
|
47
47
|
group :admin, :user, :hidden => true
|
48
48
|
input :email, :argument => true, :desc => "User to delete"
|
49
|
-
input(:really, :type => :boolean) { |email|
|
49
|
+
input(:really, :type => :boolean, :forget => true) { |email|
|
50
50
|
force? || ask("Really delete user #{c(email, :name)}?", :default => false)
|
51
51
|
}
|
52
52
|
def delete_user(input)
|
data/vmc-ng/lib/vmc/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 62196417
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
9
|
- 0
|
10
10
|
- beta
|
11
|
-
-
|
12
|
-
version: 0.4.0.beta.
|
11
|
+
- 17
|
12
|
+
version: 0.4.0.beta.17
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- VMware
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2012-07-
|
20
|
+
date: 2012-07-14 00:00:00 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: json_pure
|
@@ -233,12 +233,12 @@ dependencies:
|
|
233
233
|
requirements:
|
234
234
|
- - ~>
|
235
235
|
- !ruby/object:Gem::Version
|
236
|
-
hash:
|
236
|
+
hash: 7
|
237
237
|
segments:
|
238
238
|
- 0
|
239
239
|
- 4
|
240
|
-
-
|
241
|
-
version: 0.4.
|
240
|
+
- 4
|
241
|
+
version: 0.4.4
|
242
242
|
type: :runtime
|
243
243
|
version_requirements: *id013
|
244
244
|
- !ruby/object:Gem::Dependency
|
@@ -249,12 +249,12 @@ dependencies:
|
|
249
249
|
requirements:
|
250
250
|
- - ~>
|
251
251
|
- !ruby/object:Gem::Version
|
252
|
-
hash:
|
252
|
+
hash: 21
|
253
253
|
segments:
|
254
254
|
- 0
|
255
255
|
- 3
|
256
|
-
-
|
257
|
-
version: 0.3.
|
256
|
+
- 3
|
257
|
+
version: 0.3.3
|
258
258
|
type: :runtime
|
259
259
|
version_requirements: *id014
|
260
260
|
- !ruby/object:Gem::Dependency
|
@@ -265,12 +265,12 @@ dependencies:
|
|
265
265
|
requirements:
|
266
266
|
- - ~>
|
267
267
|
- !ruby/object:Gem::Version
|
268
|
-
hash:
|
268
|
+
hash: 21
|
269
269
|
segments:
|
270
270
|
- 0
|
271
271
|
- 0
|
272
|
-
-
|
273
|
-
version: 0.0.
|
272
|
+
- 5
|
273
|
+
version: 0.0.5
|
274
274
|
type: :runtime
|
275
275
|
version_requirements: *id015
|
276
276
|
- !ruby/object:Gem::Dependency
|