manifests-vmc-plugin 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -41,10 +41,27 @@ module VMCManifests
41
41
  @manifest_file
42
42
  end
43
43
 
44
+ # convert any deprecated structuring to the modern format
45
+ def simplify_info(info)
46
+ if info["framework"].is_a?(Hash)
47
+ info["framework"] = info["framework"]["name"]
48
+ end
49
+ end
50
+
44
51
  # load and resolve a given manifest file
45
52
  def load_manifest(file)
46
53
  manifest = build_manifest(file)
47
54
  resolve_manifest(manifest)
55
+
56
+ # single-app manifest
57
+ simplify_info(manifest)
58
+
59
+ if apps = manifest["applications"]
60
+ apps.each do |path, info|
61
+ simplify_info(info)
62
+ end
63
+ end
64
+
48
65
  manifest
49
66
  end
50
67
 
@@ -180,37 +197,43 @@ module VMCManifests
180
197
  MANIFEST_META.include? k
181
198
  end
182
199
 
183
- if info["framework"].is_a?(Hash)
184
- info["framework"] = info["framework"]["name"]
185
- end
186
-
187
200
  info
188
201
  end
189
202
  end
190
203
 
191
- def app_info(find_path, input = nil)
204
+ def app_by_name(name, input = nil)
192
205
  return unless manifest
193
206
 
194
- mandir = File.dirname(manifest_file)
195
- full_path = File.expand_path(find_path, mandir)
207
+ if apps = manifest["applications"]
208
+ manifest["applications"].find do |path, info|
209
+ info["name"] == name
210
+ end
211
+ elsif name == manifest["name"]
212
+ [".", toplevel_attributes]
213
+ end
214
+ end
215
+
216
+ def app_by_path(find_path)
217
+ return unless manifest
196
218
 
197
- path, info =
198
- if apps = manifest["applications"]
199
- manifest["applications"].find do |path, info|
200
- if info["framework"].is_a?(Hash)
201
- info["framework"] = info["framework"]["name"]
202
- end
219
+ if apps = manifest["applications"]
220
+ mandir = File.dirname(manifest_file)
221
+ full_path = File.expand_path(find_path, mandir)
203
222
 
204
- app = File.expand_path(path, mandir)
205
- File.expand_path(path, mandir) == full_path
206
- end
207
- elsif find_path == "."
208
- [".", {}]
223
+ manifest["applications"].find do |path, info|
224
+ File.expand_path(path, mandir) == full_path
209
225
  end
226
+ elsif find_path == "."
227
+ [".", toplevel_attributes]
228
+ end
229
+ end
210
230
 
231
+ def app_info(path_or_name, input = nil)
232
+ path, info = app_by_name(path_or_name) || app_by_path(path_or_name)
211
233
  return unless info
212
234
 
213
- data = { :path => full_path }
235
+ abspath = File.expand_path(path, File.dirname(manifest_file))
236
+ data = { :path => abspath }
214
237
 
215
238
  toplevel_attributes.merge(info).each do |k, v|
216
239
  name = k.to_sym
@@ -248,51 +271,58 @@ module VMCManifests
248
271
  end
249
272
  end
250
273
 
274
+
275
+ def no_apps
276
+ fail "No applications or manifest to operate on."
277
+ end
278
+
251
279
  # like each_app, but only acts on apps specified as paths instead of names
252
280
  #
253
281
  # returns the names that were not paths
254
282
  def specific_apps_or_all(input = nil, use_name = true, &blk)
255
- return false unless manifest && apps = manifest["applications"]
256
-
257
- use_name = false if apps.size > 1
258
-
259
283
  names_or_paths =
260
284
  if input.given?(:names)
261
- input[:names]
285
+ # names may be given but be [], which will still cause
286
+ # interaction, so use #given instead of #[] here
287
+ input.given(:names)
262
288
  elsif input.given?(:name)
263
289
  [input[:name]]
264
290
  else
265
291
  []
266
292
  end
267
293
 
268
- return each_app(input, &blk) if names_or_paths.empty?
294
+ unless manifest
295
+ if names_or_paths.empty?
296
+ return false
297
+ else
298
+ return names_or_paths
299
+ end
300
+ end
301
+
302
+ if names_or_paths.empty?
303
+ each_app(input, &blk)
304
+ return []
305
+ end
269
306
 
270
307
  input = input.without(:name, :names)
271
308
 
272
- paths = []
273
- names = []
309
+ in_manifest = []
310
+ external = []
274
311
  names_or_paths.each do |x|
275
312
  path = File.expand_path(x)
276
313
 
277
- if File.exists?(path)
278
- paths << path
314
+ if app = app_info(File.exists?(path) ? path : x, input)
315
+ in_manifest << app
279
316
  else
280
- names << x
317
+ external << x
281
318
  end
282
319
  end
283
320
 
284
- paths.each do |path|
285
- blk.call app_info(path, input)
286
- end
287
-
288
- if use_name && names.size == 1
289
- blk.call(
290
- app_info(
291
- manifest["applications"].keys.first,
292
- input.merge(:name => names.first)))
321
+ in_manifest.each do |app|
322
+ blk.call app
293
323
  end
294
324
 
295
- names
325
+ external
296
326
  end
297
327
 
298
328
 
@@ -10,7 +10,7 @@ class Manifests < VMC::CLI
10
10
 
11
11
 
12
12
  def no_apps
13
- err "No applications or manifest to operate on."
13
+ fail "No applications or manifest to operate on."
14
14
  end
15
15
 
16
16
 
@@ -19,21 +19,22 @@ class Manifests < VMC::CLI
19
19
  [ :start, :instances, :logs, :file, :files, :env,
20
20
  :health, :stats, :scale
21
21
  ].each do |wrap|
22
- change_argument(wrap, :name, :optional)
22
+ optional_name = change_argument(wrap, :name, :optional)
23
23
 
24
24
  around(wrap) do |cmd, input|
25
- use_manifest =
25
+ rest =
26
26
  specific_apps_or_all(input) do |app|
27
- cmd.call(input.merge(:name => app[:name]))
27
+ cmd.call(input.without(:names).merge(:name => app[:name]))
28
28
  puts "" unless quiet?
29
29
  end
30
30
 
31
- # array of unhandled names
32
- if use_manifest === Array
33
- cmd.call(input.merge(:names => use_manifest))
31
+ if rest
32
+ rest.each do |n|
33
+ cmd.call(input.merge(:name => n))
34
+ end
34
35
 
35
- # no manifest or no apps described by it
36
- elsif !use_manifest
36
+ # fail manually for commands whose name we made optional
37
+ elsif optional_name
37
38
  no_apps
38
39
  end
39
40
  end
@@ -46,48 +47,54 @@ class Manifests < VMC::CLI
46
47
  next cmd.call if input[:all]
47
48
 
48
49
  reversed = []
49
- use_manifest =
50
+ rest =
50
51
  specific_apps_or_all(input) do |app|
51
52
  reversed.unshift app[:name]
52
53
  end
53
54
 
54
- # array of unhandled names
55
- if use_manifest === Array
56
- cmd.call(input.merge(:names => use_manifest))
57
-
58
- # no manifest or no apps described by it
59
- elsif !use_manifest
60
- next no_apps
55
+ unless reversed.empty?
56
+ cmd.call(input.merge(:names => reversed))
61
57
  end
62
58
 
63
- cmd.call(input.merge(:names => reversed))
59
+ if rest
60
+ cmd.call(input.merge(:names => rest)) unless rest.empty?
61
+ else
62
+ cmd.call(input.without(:names))
63
+ end
64
64
  end
65
65
  end
66
66
 
67
67
 
68
68
  # push and sync meta changes in the manifest
69
69
  # also sets env data on creation if present in manifest
70
+ #
71
+ # vmc push [name in manifest] = push that app from its path
72
+ # vmc push [name not in manifest] = push new app using given name
73
+ # vmc push [path] = push app from its path
70
74
  change_argument(:push, :name, :optional)
71
75
  around(:push) do |push, input|
72
- use_manifest =
73
- specific_apps_or_all(input, true) do |app|
74
- sync_changes(app)
75
-
76
- with_filters(
77
- :push => {
78
- :push_app =>
79
- proc { |a| setup_app(a, app); a }
80
- }) do
81
- push.call(
82
- input.merge(app).merge(
83
- :bind_services => false,
84
- :create_services => false))
85
- end
76
+ app =
77
+ if input.given?(:name)
78
+ path = File.expand_path(input[:name])
79
+ find_by = File.exists?(path) ? path : input[:name]
80
+
81
+ app_info(find_by, input.without(:name))
86
82
  end
87
83
 
88
- unless use_manifest
89
- bound = []
84
+ app ||= app_info(".", input)
90
85
 
86
+ if app
87
+ sync_changes(app)
88
+
89
+ with_filters(
90
+ :push => {
91
+ :push_app => proc { |a| setup_app(a, app); a }
92
+ }) do
93
+ push.call(input.merge(app).merge(
94
+ :bind_services => false,
95
+ :create_services => false))
96
+ end
97
+ else
91
98
  with_filters(
92
99
  :push => {
93
100
  :push_app =>
@@ -1,3 +1,3 @@
1
1
  module VMCManifests
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: manifests-vmc-plugin
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 0
10
- version: 0.3.0
9
+ - 1
10
+ version: 0.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alex Suraci