class Guard::Bosh::JobDefaultPropertiesLoader

The property defaults (if any) defined for a BOSH job in the job spec.

Public Class Methods

new(release_dir:) click to toggle source
# File lib/guard/bosh/job_default_properties_loader.rb, line 7
def initialize(release_dir:)
  @release_dir = release_dir
end

Public Instance Methods

load_properties(job) click to toggle source
# File lib/guard/bosh/job_default_properties_loader.rb, line 11
def load_properties(job)
  properties = job_spec(job[:job_name]).fetch('properties')
  expand(
    intermediate_properties(properties).merge(
      default_properties(properties)
    )
  )
end

Private Instance Methods

default_properties(properties) click to toggle source
# File lib/guard/bosh/job_default_properties_loader.rb, line 22
def default_properties(properties)
  defaults_only = properties.map do |property, config|
    [property, config['default']]
  end
  Hash[defaults_only].reject { |_k, v| v.nil? }
end
each_parent(key) { |parent| ... } click to toggle source
# File lib/guard/bosh/job_default_properties_loader.rb, line 52
def each_parent(key)
  path = key.split('.')
  path[0...-1].each do |parent|
    yield parent
  end
end
expand(properties) click to toggle source
# File lib/guard/bosh/job_default_properties_loader.rb, line 40
def expand(properties)
  properties.each_with_object({}) do |property, expanded|
    key, value = property
    current = expanded
    each_parent(key) do |parent|
      current[parent] = {} unless current.key?(parent)
      current = current[parent]
    end
    current[leaf(key)] = value
  end
end
intermediate_properties(properties) click to toggle source
# File lib/guard/bosh/job_default_properties_loader.rb, line 29
def intermediate_properties(properties)
  intermediates = properties.keys.map do |key|
    key.split('.')[0..-2].join('.')
  end.sort.uniq
  Hash[intermediates.zip(intermediates.map { |_t| {} })]
end
job_spec(job_name) click to toggle source
# File lib/guard/bosh/job_default_properties_loader.rb, line 36
def job_spec(job_name)
  YAML.load_file(@release_dir + 'jobs' + job_name + 'spec')
end
leaf(key) click to toggle source
# File lib/guard/bosh/job_default_properties_loader.rb, line 59
def leaf(key)
  key.split('.').last
end