module CFManifests::Normalizer
Constants
- MANIFEST_META
Public Instance Methods
normalize!(manifest)
click to toggle source
# File lib/manifests/loader/normalizer.rb, line 5 def normalize!(manifest) toplevel = toplevel_attributes(manifest) apps = manifest["applications"] apps ||= [{}] default_paths_to_keys!(apps) apps = convert_to_array(apps) merge_toplevel!(toplevel, manifest, apps) normalize_apps!(apps) manifest["applications"] = apps normalize_paths!(apps) keyval = normalize_key_val(manifest) manifest.clear.merge!(keyval) nil end
Private Instance Methods
convert_to_array(apps)
click to toggle source
# File lib/manifests/loader/normalizer.rb, line 36 def convert_to_array(apps) return apps if apps.is_a?(Array) ordered_by_deps(apps) end
default_paths_to_keys!(apps)
click to toggle source
# File lib/manifests/loader/normalizer.rb, line 70 def default_paths_to_keys!(apps) return if apps.is_a?(Array) apps.each do |tag, app| app["path"] ||= tag end end
merge_toplevel!(toplevel, manifest, apps)
click to toggle source
# File lib/manifests/loader/normalizer.rb, line 84 def merge_toplevel!(toplevel, manifest, apps) return if toplevel.empty? apps.collect! do |a| toplevel.merge(a) end toplevel.each do |k, _| manifest.delete k end end
normalize_app!(app)
click to toggle source
# File lib/manifests/loader/normalizer.rb, line 96 def normalize_app!(app) if app.key?("mem") app["memory"] = app.delete("mem") end if app.key?("url") && app["url"].nil? app["url"] = "none" end if app.key?("subdomain") if app.key?("host") app.delete("subdomain") else app["host"] = app.delete("subdomain") end end end
normalize_apps!(apps)
click to toggle source
# File lib/manifests/loader/normalizer.rb, line 78 def normalize_apps!(apps) apps.each do |app| normalize_app!(app) end end
normalize_key_val(val)
click to toggle source
# File lib/manifests/loader/normalizer.rb, line 126 def normalize_key_val(val) case val when Hash stringified = {} val.each do |k, v| stringified[k.to_sym] = normalize_key_val(v) end stringified when Array val.collect { |x| normalize_key_val(x) } when nil nil else val.to_s end end
normalize_paths!(apps)
click to toggle source
# File lib/manifests/loader/normalizer.rb, line 30 def normalize_paths!(apps) apps.each do |app| app["path"] = from_manifest(app["path"]) end end
ordered_by_deps(apps, processed = Set[])
click to toggle source
sort applications in dependency order e.g. if A depends on B, B will be listed before A
# File lib/manifests/loader/normalizer.rb, line 44 def ordered_by_deps(apps, processed = Set[]) ordered = [] apps.each do |tag, info| next if processed.include?(tag) if deps = Array(info["depends-on"]) dep_apps = {} deps.each do |dep| dep_apps[dep] = apps[dep] end processed.add(tag) ordered += ordered_by_deps(dep_apps, processed) ordered << info else ordered << info processed.add(tag) end end ordered.each { |app| app.delete("depends-on") } ordered end
toplevel_attributes(manifest)
click to toggle source
# File lib/manifests/loader/normalizer.rb, line 114 def toplevel_attributes(manifest) top = manifest.reject { |k, _| MANIFEST_META.include? k } # implicit toplevel path of . top["path"] ||= "." top end