beattyml1/codgen

View on GitHub
bin/codgen.rb

Summary

Maintainability
A
55 mins
Test Coverage
#!/usr/bin/env ruby
require 'ostruct'
require 'json'
require_relative '../lib/codgen'
require_relative '../lib/codgen/logger'
require 'fileutils'

class CommandLineArguments
  def initialize(arguments)
    if arguments.count < 1
      @input_directory = '.'
      @json_config = 'config.json'
    end

    if arguments.count >= 1
      if arguments[0] == '--help'
        puts 'Help will be here  later'
        exit 0
      elsif File.directory?(arguments[0])
        @input_directory = arguments[0]
        @json_config = 'config.json'
      elsif File.extname(arguments[0]).downcase == '.json'
        @json_config = File.basename(arguments[0])
        @input_directory = File.dirname(arguments[0])
      else
        puts "Could not find directory '#{arguments[0]}', must be either a directory or a .json file"
        exit 1
      end
    end

    @output_directory = (arguments.count >= 2) ? arguments[1] : '.'
  end

  attr_reader :json_config, :input_directory, :output_directory
end

def get_file_contents(filepath)
  if File.exist?(filepath)
    File.read(filepath)
  else
    Logger.error('Could not find file "'+filepath+'"')
  end
end


def write_file_contents(filepath, content)
  dir = File.dirname(filepath)
  FileUtils.mkpath(dir) unless Dir.exists?(dir)
  File.write(filepath, content)
end


def main(args)
    original_dir = Dir.pwd
    Dir.chdir args.input_directory

    json_config_text = get_file_contents(args.json_config)
    json_config = JSON.parse(json_config_text)

    output = Codgen.run(json_config)

    output_dir = "#{original_dir}/#{args.output_directory}"

    if !Dir.exists?(output_dir)
      Dir.mkdir(output_dir)
    end

    Dir.chdir(output_dir)

    output.each do |path, text|
      write_file_contents(path, text)
    end
end

main(CommandLineArguments.new(ARGV))