Sha256: 03e1ec7217d15e9a67efe5df8be12a7c6d6f168110dfa829c2e717340baa72e4

Contents?: true

Size: 1.63 KB

Versions: 2

Compression:

Stored size: 1.63 KB

Contents

# frozen_string_literal: true

require "tilt"
require "yaml"
require "hashie"
require "fileutils"
require "active_support/all"

module Dupler
  # Dupler core functions
  class Core
    def new_project(project_name)
      FileUtils.mkdir_p project_name
      project_template_dir = Dir.glob File.join(Dupler.home, "project_template/*")
      FileUtils.cp_r(project_template_dir, project_name)
    end

    def setup(config)
      formats = config.dig("Dupler", "time", "format")
      formats&.each do |key, value|
        Time::DATE_FORMATS[key.to_sym] = value
      end
    end

    def build(values_file_path, output_dir, template_files)
      yaml = YAML.safe_load File.read(values_file_path)

      setup(yaml)
      yaml.delete("Dupler")
      config = Hashie::Mash.new yaml
      FileUtils.mkdir_p output_dir

      template_files.each do |path|
        output_filename = File.basename(path, File.extname(path))
        output_filepath = File.join(output_dir, output_filename)
        render(path, config, output_filepath)
      end
    end

    def render(template_path, config, output_filepath)
      content = apply_template(template_path, config)
      output_file(output_filepath, content)
      puts "render: #{output_filepath}"
    end

    def apply_template(template_path, config)
      begin
        template = Tilt.new(template_path)
        template.render(self, config)
      rescue Exception => e
        raise DuplerException.new("Template rendering error: [#{template_path}] #{e.message}")
      end
    end

    def output_file(filepath, content)
      File.open(filepath, "w") do |file|
        file.write content
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dupler-0.2.1 lib/dupler/core.rb
dupler-0.2.0 lib/dupler/core.rb