Sha256: 475ae0fc784f4466f66ad17d7086248f22593437bce82c07b620c2efbaec4e3b

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

require 'dependence/js_compressor'
require 'dependence/module_injector'

module Dependence
  class JsModule
    attr_reader :name 

    def initialize(config)
      raise "need to pass :source_dir to constructor" unless config[:source_dir]
      raise "need to pass :source_type to constructor" unless config[:source_type]

      @config = config
      @name = File.basename(config[:source_dir])
      @output_file = File.join(@config[:output_dir], "#{@name}.js")

      @file_list = get_file_list_for_module(@config[:source_dir], @config[:source_type])
      @concat = Concatenator.new(@file_list)
    end

    def build
      stdout_compile_msg(@name)
      output = @concat.concat_files do |file_path, file_contents|
        extension = File.extname(file_path) 
        compile(extension, file_contents)
      end

      output = ModuleInjector.modularize(@name, output) unless @config[:bare] == true
      output
    end

    def to_file
      File.open(@output_file, 'w') do |f|
        f.syswrite build()
      end

      JsCompressor.new(@output_file).compress if @config[:compress] == true
      stdout_compile_complete_msg(@name, @output_file)
    end

    private

    def compile(extension, source)
      Compiler.get_compiler_for(extension).new.compile(source)
    end

    def get_file_list_for_module(dir, source_type)
      files = Dir.glob File.join(dir, source_type)
      no_files_error(dir) if files.empty?
      DependencyResolver.new(files, dir).sorted_files
    end

    def no_files_error(dir)
      puts Colors.red("No source files were found in #{dir}")
      throw :no_files_to_concatenate
    end


    def stdout_compile_msg(module_name)
      puts Colors.green("Compiling Module: #{module_name}")
    end

    def stdout_compile_complete_msg(module_name, output)
      puts Colors.green("Compiled #{module_name} to #{output}")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dependence-0.0.96 lib/dependence/js_module.rb