class AwsAsCode::Task::Compile

Compiles all input templates and puts JSON to the output directory

Attributes

config[R]

Public Class Methods

new(config) click to toggle source
# File lib/aws_as_code/task/compile.rb, line 14
def initialize(config)
  @config = config
end

Public Instance Methods

execute() click to toggle source
# File lib/aws_as_code/task/compile.rb, line 18
def execute
  input_files.each { |filename| compile_single_file filename }
end

Private Instance Methods

compile_single_file(filename) click to toggle source
# File lib/aws_as_code/task/compile.rb, line 66
def compile_single_file(filename)
  def_params
  def_settings
  def_template_url

  cfn = binding.eval(File.read(filename), filename)
  save_output cfn, filename
end
def_params() click to toggle source
# File lib/aws_as_code/task/compile.rb, line 30
def def_params
  pairs = load_params

  CfnDsl::JSONable.send :define_method, :params do |env = nil|
    pairs.reject do |pair|
      data = pair.last
      services = data["_ext"]["services"]

      !env.nil? &&
        !services.nil? &&
        !services.include?(env)
    end.to_h
  end
end
def_settings() click to toggle source
# File lib/aws_as_code/task/compile.rb, line 58
def def_settings
  data = load_settings
  c = config
  CfnDsl::JSONable.send :define_method, :setting do |name|
    data[name][c.stack] || data[name]["_default"]
  end
end
def_template_url() click to toggle source
# File lib/aws_as_code/task/compile.rb, line 45
def def_template_url
  c = config
  CfnDsl::JSONable.send :define_method, :template_url do |name|
    prefix = "#{c.stack}/#{c.version}"
    "https://s3.amazonaws.com/#{c.bucket}/#{prefix}/#{name}.json"
  end
end
input_files() click to toggle source
# File lib/aws_as_code/task/compile.rb, line 93
def input_files
  Dir.glob(File.join(config.ruby_dir, "**/*.rb"))
end
load_params() click to toggle source
# File lib/aws_as_code/task/compile.rb, line 24
def load_params
  param_filename = File.join config.config_dir, "parameters.yml"
  return [] unless File.exist? param_filename
  YAML.load_file(param_filename).to_a
end
load_settings() click to toggle source
# File lib/aws_as_code/task/compile.rb, line 53
def load_settings
  filename = File.join config.config_dir, "settings.yml"
  YAML.load_file(filename)
end
output_pathname(filename) click to toggle source
# File lib/aws_as_code/task/compile.rb, line 85
def output_pathname(filename)
  Pathname
    .new(filename)
    .relative_path_from(Pathname.new(config.ruby_dir))
    .sub_ext(".json")
    .to_s
end
save_output(cfn, filename) click to toggle source
# File lib/aws_as_code/task/compile.rb, line 75
def save_output(cfn, filename)
  dest = File.join config.json_dir,
                   output_pathname(filename)

  dirname = File.dirname(dest)
  FileUtils.mkdir_p(dirname) unless File.directory?(dirname)

  File.open(dest, "w") { |f| f.write cfn.to_json }
end