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