dependence 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/dependence +47 -0
 - data/compiler/compiler.jar +0 -0
 - data/lib/dependence/colors.rb +11 -0
 - data/lib/dependence/dependency_resolver.rb +33 -0
 - data/lib/dependence/file_watcher.rb +49 -0
 - data/lib/dependence/js_compiler.rb +42 -0
 - data/lib/dependence.rb +2 -0
 - metadata +74 -0
 
    
        data/bin/dependence
    ADDED
    
    | 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'optparse'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rb-inotify'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require  File.join(File.dirname(__FILE__), "..", "lib/dependence.rb")
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            options = {:output => "compiled.js"}
         
     | 
| 
      
 7 
     | 
    
         
            +
            OptionParser.new do |opts|
         
     | 
| 
      
 8 
     | 
    
         
            +
              opts.banner = "Usage: compile.rb js_source_dir [options]"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              opts.on("-o", "--output FILE", "Output .js file") do |file|
         
     | 
| 
      
 11 
     | 
    
         
            +
                options[:output] = file
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              opts.on("-w", "--watch", "Watch src directory for changes and recompile") do |bool|
         
     | 
| 
      
 15 
     | 
    
         
            +
                options[:watch] = bool
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end.parse(ARGV)
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            if ARGV.length < 1
         
     | 
| 
      
 20 
     | 
    
         
            +
              puts "You need to inlcude your js src directory"
         
     | 
| 
      
 21 
     | 
    
         
            +
              exit 1
         
     | 
| 
      
 22 
     | 
    
         
            +
            elsif !File.directory? ARGV[0] 
         
     | 
| 
      
 23 
     | 
    
         
            +
              puts "Can't find your js source directory: #{ARGV[0]}"
         
     | 
| 
      
 24 
     | 
    
         
            +
              exit 1
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            options[:input] = ARGV[0]
         
     | 
| 
      
 28 
     | 
    
         
            +
            output_file = options[:output]
         
     | 
| 
      
 29 
     | 
    
         
            +
            compiler = JsCompiler.new(options[:input])
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            def recompile(compiler, output_file)
         
     | 
| 
      
 32 
     | 
    
         
            +
              File.delete(output_file) if File.exists?(output_file)
         
     | 
| 
      
 33 
     | 
    
         
            +
              compiler.compile(output_file)
         
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            recompile compiler, output_file
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            if options[:watch]
         
     | 
| 
      
 39 
     | 
    
         
            +
              puts "Watching #{options[:input]} for changes. Your javascript files will be compiled automatically"
         
     | 
| 
      
 40 
     | 
    
         
            +
              FileWatcher.new "**/*.js" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                recompile compiler, output_file
         
     | 
| 
      
 42 
     | 
    
         
            +
              end 
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
         Binary file 
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rgl/adjacency'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rgl/topsort'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class DependencyResolver
         
     | 
| 
      
 5 
     | 
    
         
            +
              def initialize(file_list, file_path)
         
     | 
| 
      
 6 
     | 
    
         
            +
                @files = file_list
         
     | 
| 
      
 7 
     | 
    
         
            +
                @file_path = file_path
         
     | 
| 
      
 8 
     | 
    
         
            +
                @graph = RGL::DirectedAdjacencyGraph.new
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def sorted_files
         
     | 
| 
      
 12 
     | 
    
         
            +
                @files.each do |file|
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @graph.add_vertex(file)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  dependencies = get_dependencies_in(file)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  dependencies.each {|dependency| @graph.add_edge(dependency,file) }
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
                @graph.topsort_iterator.to_a
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              private
         
     | 
| 
      
 21 
     | 
    
         
            +
              def get_dependencies_in(file)
         
     | 
| 
      
 22 
     | 
    
         
            +
                dependencies = []
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                File.foreach(file) do |s|
         
     | 
| 
      
 25 
     | 
    
         
            +
                  if s.include?("@import")
         
     | 
| 
      
 26 
     | 
    
         
            +
                    file_name = s.match(/@import (.*)/)[1].strip
         
     | 
| 
      
 27 
     | 
    
         
            +
                    dependencies << File.join(@file_path, file_name) 
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                end 
         
     | 
| 
      
 30 
     | 
    
         
            +
                return dependencies
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class FileWatcher
         
     | 
| 
      
 2 
     | 
    
         
            +
              def initialize(glob_str, &block)
         
     | 
| 
      
 3 
     | 
    
         
            +
                @dir = glob_str 
         
     | 
| 
      
 4 
     | 
    
         
            +
                recreate_timetable
         
     | 
| 
      
 5 
     | 
    
         
            +
                poll(&block)
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              private
         
     | 
| 
      
 9 
     | 
    
         
            +
              def poll(&block)
         
     | 
| 
      
 10 
     | 
    
         
            +
                while true
         
     | 
| 
      
 11 
     | 
    
         
            +
                  if fs_modified?
         
     | 
| 
      
 12 
     | 
    
         
            +
                    block.call
         
     | 
| 
      
 13 
     | 
    
         
            +
                    recreate_timetable
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                  sleep 3 
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def fs_modified?
         
     | 
| 
      
 20 
     | 
    
         
            +
                new_files = get_files
         
     | 
| 
      
 21 
     | 
    
         
            +
                return true if new_files.length != @files.length 
         
     | 
| 
      
 22 
     | 
    
         
            +
                new_timetable = create_file_modified_timetable(new_files)
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                modified = false
         
     | 
| 
      
 25 
     | 
    
         
            +
                new_timetable.each do |filename,time|
         
     | 
| 
      
 26 
     | 
    
         
            +
                  if time != @timetable[filename] 
         
     | 
| 
      
 27 
     | 
    
         
            +
                    modified = true
         
     | 
| 
      
 28 
     | 
    
         
            +
                    break
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
                modified
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def get_files
         
     | 
| 
      
 35 
     | 
    
         
            +
                Dir.glob @dir
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              def recreate_timetable
         
     | 
| 
      
 39 
     | 
    
         
            +
                @files = get_files
         
     | 
| 
      
 40 
     | 
    
         
            +
                @timetable = create_file_modified_timetable(@files)
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              def create_file_modified_timetable(filenames)
         
     | 
| 
      
 44 
     | 
    
         
            +
                filenames.inject({}) do |table, filename|
         
     | 
| 
      
 45 
     | 
    
         
            +
                  table[filename] = File.mtime(filename) if File.exists? filename
         
     | 
| 
      
 46 
     | 
    
         
            +
                  table
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,42 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__),'dependency_resolver')
         
     | 
| 
      
 2 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__),'colors')
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class JsCompiler
         
     | 
| 
      
 5 
     | 
    
         
            +
              def initialize(source_path) 
         
     | 
| 
      
 6 
     | 
    
         
            +
                @source_path = source_path
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              def compile(output_file)
         
     | 
| 
      
 10 
     | 
    
         
            +
                @cmd = cmd_prefix
         
     | 
| 
      
 11 
     | 
    
         
            +
                @source_files = get_source_files 
         
     | 
| 
      
 12 
     | 
    
         
            +
                dep_resolver = DependencyResolver.new(@source_files,@source_path)
         
     | 
| 
      
 13 
     | 
    
         
            +
                file_order = dep_resolver.sorted_files
         
     | 
| 
      
 14 
     | 
    
         
            +
                puts "#{Colors.green('Source Files')}: #{file_order.to_s}"
         
     | 
| 
      
 15 
     | 
    
         
            +
                puts ""
         
     | 
| 
      
 16 
     | 
    
         
            +
                puts Colors.red "Compiler Output:"
         
     | 
| 
      
 17 
     | 
    
         
            +
                file_order.each {|source_file| add_file source_file }
         
     | 
| 
      
 18 
     | 
    
         
            +
                execute_compile(output_file)
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              private
         
     | 
| 
      
 22 
     | 
    
         
            +
              def	add_file(filename)
         
     | 
| 
      
 23 
     | 
    
         
            +
                @cmd += " --js=#{filename}"
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def get_source_files
         
     | 
| 
      
 27 
     | 
    
         
            +
                Dir.glob File.join(@source_path,"/**/*.js")
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def execute_compile(output_file)
         
     | 
| 
      
 31 
     | 
    
         
            +
                @cmd += " --js_output_file #{output_file}"
         
     | 
| 
      
 32 
     | 
    
         
            +
                `#{@cmd}`
         
     | 
| 
      
 33 
     | 
    
         
            +
                puts Colors.green("compilted #{@source_files.size} javascript files into #{output_file}")
         
     | 
| 
      
 34 
     | 
    
         
            +
                puts "------------------------------------------------------"
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              def cmd_prefix
         
     | 
| 
      
 38 
     | 
    
         
            +
                "java -jar compiler/compiler.jar" 
         
     | 
| 
      
 39 
     | 
    
         
            +
                # --create_source_map js_map
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
    
        data/lib/dependence.rb
    ADDED
    
    
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,74 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification 
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: dependence
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version 
         
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 29
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 6 
     | 
    
         
            +
              segments: 
         
     | 
| 
      
 7 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 8 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 9 
     | 
    
         
            +
              - 1
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
      
 11 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 12 
     | 
    
         
            +
            authors: 
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Joshua Carver
         
     | 
| 
      
 14 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 15 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 16 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2011-07-07 00:00:00 -07:00
         
     | 
| 
      
 19 
     | 
    
         
            +
            default_executable: 
         
     | 
| 
      
 20 
     | 
    
         
            +
            dependencies: []
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            description: 
         
     | 
| 
      
 23 
     | 
    
         
            +
            email: jcarver989@gmail.com
         
     | 
| 
      
 24 
     | 
    
         
            +
            executables: 
         
     | 
| 
      
 25 
     | 
    
         
            +
            - dependence
         
     | 
| 
      
 26 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            files: 
         
     | 
| 
      
 31 
     | 
    
         
            +
            - bin/dependence
         
     | 
| 
      
 32 
     | 
    
         
            +
            - compiler/compiler.jar
         
     | 
| 
      
 33 
     | 
    
         
            +
            - lib/dependence/colors.rb
         
     | 
| 
      
 34 
     | 
    
         
            +
            - lib/dependence/dependency_resolver.rb
         
     | 
| 
      
 35 
     | 
    
         
            +
            - lib/dependence/file_watcher.rb
         
     | 
| 
      
 36 
     | 
    
         
            +
            - lib/dependence/js_compiler.rb
         
     | 
| 
      
 37 
     | 
    
         
            +
            - lib/dependence.rb
         
     | 
| 
      
 38 
     | 
    
         
            +
            has_rdoc: true
         
     | 
| 
      
 39 
     | 
    
         
            +
            homepage: 
         
     | 
| 
      
 40 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 43 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            require_paths: 
         
     | 
| 
      
 46 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 47 
     | 
    
         
            +
            - compiler
         
     | 
| 
      
 48 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 49 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 51 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 52 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 53 
     | 
    
         
            +
                  hash: 3
         
     | 
| 
      
 54 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 55 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 56 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 57 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 58 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 59 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 60 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 61 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 62 
     | 
    
         
            +
                  hash: 3
         
     | 
| 
      
 63 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 64 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 65 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 66 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 69 
     | 
    
         
            +
            rubygems_version: 1.3.7
         
     | 
| 
      
 70 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 71 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
      
 72 
     | 
    
         
            +
            summary: An easy way to handle your client side javascript dependencies
         
     | 
| 
      
 73 
     | 
    
         
            +
            test_files: []
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     |