lib/aws/cfn/decompiler.rb in aws-cfn-decompiler-0.2.5 vs lib/aws/cfn/decompiler.rb in aws-cfn-decompiler-0.5.0
- old
+ new
@@ -1,142 +1,4 @@
require "aws/cfn/decompiler/version"
-require "aws/cfn/compiler"
+require "aws/cfn/decompiler/base"
+require "aws/cfn/decompiler/main"
-require 'json'
-require 'ap'
-require 'yaml'
-require 'slop'
-
-module Aws
- module Cfn
- module DeCompiler
- class Main < Aws::Cfn::Compiler::Main
- attr_accessor :template
-
- def run
-
- @opts = Slop.parse(help: true, strict: true) do
- on :j, :template=, 'The template to decompile', as: String
- on :o, :output=, 'The directory to output the components to.', as: String
- on :f, :format=, 'The output format of the components. [JSON|YAML]', as: String, match: %r/yaml|json/i
- on :s, :specification=, 'The specification file to create.', as: String
- end
-
- unless @opts[:template]
- puts @opts
- exit
- end
- unless @opts[:output].nil?
- unless File.directory?(@opts[:output])
- puts @opts
- exit
- end
- end
-
- load @opts[:template]
-
- puts
- puts 'Validating decompiled file...'
-
- validate(@items)
-
- output_dir = @opts[:output] || Dir.pwd
- puts
- puts "Writing decompiled parts to #{output_dir}..."
- save(output_dir)
-
- puts
- puts '*** Decompiled Successfully ***'
- end
-
- def save(output_dir)
-
- specification = {}
- format = @opts[:format] rescue 'yaml'
- @items.each do |section, section_items|
- case section
- when /Mappings|Parameters|Resources|Outputs/
- specification[section] = []
- section_items.each do |name,value|
- dir = File.join(output_dir,section.to_s)
- unless File.directory?(dir)
- Dir.mkdir(dir)
- end
- file = "#{name}.#{format}"
- hash = { name => value }
-
- save_section(dir, file, format, section, hash)
- specification[section] << name
- end
- when /AWSTemplateFormatVersion|Description/
- specification[section] = section_items
- else
- raise "ERROR: Unsupported section '#{section}' in template"
- end
-
- end
-
- # Save specification
- unless @opts[:specification].nil?
- dir = File.dirname(@opts[:specification])
- dir = output_dir unless dir
- save_section(dir, File.basename(@opts[:specification]), format, '', specification, "Specification to #{dir}/")
- end
-
- end
-
- def save_section(dir, file, format, section, hash, join='/')
- path = File.join(dir, file)
-
- begin
- # File.delete path if File.exists? path
- File.open path, File::CREAT|File::TRUNC|File::RDWR, 0644 do |f|
- case format
- when /json/
- f.write JSON.pretty_generate(compiled)
- when /yaml/
- f.write hash.to_yaml line_width: 1024, indentation: 4, canonical: false
- else
- raise "Unsupported format #{format}. Should have noticed this earlier!"
- end
- f.close
- end
- puts " decompiled #{section}#{join}#{file}."
- rescue
- puts "!!! Could not write compiled file #{path}: #{$!}"
- abort!
- end
- end
-
- def load(file=nil)
- if file
- begin
- abs = File.absolute_path(File.expand_path(file))
- unless File.exists?(abs) or @opts[:output].nil?
- abs = File.absolute_path(File.expand_path(File.join(@opts[:output],file)))
- end
- rescue
- # pass
- end
- if File.exists?(abs)
- case File.extname(File.basename(abs)).downcase
- when /json/
- template = JSON.parse(File.read(abs))
- when /yaml/
- template = YAML.load(File.read(abs))
- else
- raise "Unsupported file type for specification: #{file}"
- end
- @items = template
- else
- raise "Unable to open template: #{abs}"
- end
- end
- end
-
- protected
-
-
- end
- end
- end
-end