dphaener/kanji

View on GitHub
lib/kanji/generate.rb

Summary

Maintainability
A
0 mins
Test Coverage
require "pathname"
require "thor"
require "fileutils"

module Kanji
  class Generate
    TEMPLATES_DIR = "templates".freeze
    SOURCE_DIR = Pathname(__FILE__).dirname.join(TEMPLATES_DIR)

    attr_reader :target_dir, :template_scope, :template_files, :processor

    def initialize(target_dir, template_scope)
      @target_dir = target_dir
      @template_scope = template_scope
      @template_files = Dir[SOURCE_DIR.join('**/{.,}*')]

      @processor = Class.new(Thor) do
        include Thor::Actions
      end.new
      @processor.class.source_root SOURCE_DIR
    end

    def call(source, target)
      source = Pathname(source)
      aboslute_source_path = source.expand_path(SOURCE_DIR)
      target_file = get_target_file(target)
      template_file = template_files.find { |f| f == aboslute_source_path.to_s } or raise "missing template file +#{source}+"
      template_file = Pathname(template_file)

      processor.template template_file, target_file, template_scope

      create_executable(target_file) if executable?(template_file)
    end

    private

    def get_target_file(target)
      Pathname.getwd.join(target_dir, target)
    end

    def create_executable(file)
      FileUtils.chmod "a+x", file
    end

    def executable?(file)
      file.file? && file.executable?
    end
  end
end