Sha256: 0ce79c41b78f4a14f955436e83d344abb09e8d05ba5a5f626ebfd90b76ae2b6e

Contents?: true

Size: 1.64 KB

Versions: 3

Compression:

Stored size: 1.64 KB

Contents

module ArchitectureJS
  class Generator

    attr_accessor :template_paths,
                  :templates,
                  :blueprint,
                  :project

    def initialize(blueprint)
      @project = blueprint
      @blueprint = @project.config
      @template_paths = @project.template_directories
      @templates = Hash.new
      load_templates
    end

    def find_templates(paths)
      [*paths].each do |path|
        Dir["#{path}/*"].each do |file|
          add_file_to_templates file
        end
      end
    end

    def load_templates
      find_templates @template_paths
    end

    def add_file_to_templates(file)
      ext = File.extname(file)
      template_name = File.basename(file, ext)
      @templates[template_name] = {
        erb: read_template(file),
        ext: ext
      }
    end

    def read_template(file)
      ERB.new(File.read(file), nil, '<>')
    end

    def generate(config)
      template = config[:template]
      raise "There is no template named #{template} in the #{@blueprint[:name]} project" if @templates[template].nil?

      options = config[:options]
      arguments = config[:arguments]
      filename = "#{config[:filename]}#{@templates[template][:ext]}"

      generate_file(filename, render_template(template, filename, arguments, options))
    end

    def generate_file(filename, template, path = nil)
      path ||= File.expand_path(Dir.getwd)
      File.open("#{path}/#{filename}", "w+") { |f| f.write template }
    end

    def render_template(template, filename, arguments, options)
      blueprint = @blueprint
      project = @project
      @templates[template][:erb].result(binding)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
architecture-js-0.3.4 lib/architecture-js/generator.rb
architecture-js-0.3.3 lib/architecture-js/generator.rb
architecture-js-0.3.2 lib/architecture-js/generator.rb