jim 0.1.0
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/.document +5 -0
 - data/.gitignore +22 -0
 - data/LICENSE +20 -0
 - data/README.rdoc +87 -0
 - data/Rakefile +59 -0
 - data/bin/jim +6 -0
 - data/jim.gemspec +83 -0
 - data/lib/jim.rb +31 -0
 - data/lib/jim/bundler.rb +102 -0
 - data/lib/jim/cli.rb +143 -0
 - data/lib/jim/index.rb +70 -0
 - data/lib/jim/installer.rb +120 -0
 - data/lib/jim/rack.rb +44 -0
 - data/lib/jim/templates/commands +43 -0
 - data/lib/jim/templates/jimfile +6 -0
 - data/lib/jim/version_parser.rb +27 -0
 - data/test/fixtures/infoincomments.js +4 -0
 - data/test/fixtures/jimfile +7 -0
 - data/test/fixtures/jquery-1.4.1.js +6078 -0
 - data/test/fixtures/jquery.color.js +128 -0
 - data/test/fixtures/jquery.metadata-2.0.zip +0 -0
 - data/test/fixtures/mustache.js/mustache.js +1 -0
 - data/test/fixtures/mustache.js/package.json +7 -0
 - data/test/fixtures/noversion.js +1 -0
 - data/test/helper.rb +38 -0
 - data/test/test_jim_bundler.rb +151 -0
 - data/test/test_jim_cli.rb +71 -0
 - data/test/test_jim_index.rb +97 -0
 - data/test/test_jim_installer.rb +119 -0
 - data/test/test_jim_version_parser.rb +48 -0
 - metadata +109 -0
 
    
        data/.document
    ADDED
    
    
    
        data/.gitignore
    ADDED
    
    
    
        data/LICENSE
    ADDED
    
    | 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Copyright (c) 2010 Aaron Quint
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 4 
     | 
    
         
            +
            a copy of this software and associated documentation files (the
         
     | 
| 
      
 5 
     | 
    
         
            +
            "Software"), to deal in the Software without restriction, including
         
     | 
| 
      
 6 
     | 
    
         
            +
            without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 7 
     | 
    
         
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
      
 8 
     | 
    
         
            +
            permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
      
 9 
     | 
    
         
            +
            the following conditions:
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            The above copyright notice and this permission notice shall be
         
     | 
| 
      
 12 
     | 
    
         
            +
            included in all copies or substantial portions of the Software.
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
      
 15 
     | 
    
         
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
      
 16 
     | 
    
         
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
      
 17 
     | 
    
         
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
      
 18 
     | 
    
         
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
      
 19 
     | 
    
         
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
      
 20 
     | 
    
         
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
    
        data/README.rdoc
    ADDED
    
    | 
         @@ -0,0 +1,87 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            = jim
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            jim is your friendly javascript library manager. 
         
     | 
| 
      
 4 
     | 
    
         
            +
            He downloads, stores, bundles, vendors and compresses.
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            == What is a jim?
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            I'm frustrated with a lot of copy and pasting JS files from one directory to another and downloading new versions to who knows where and only really being able to use sprockets in Rails and lots of other small annoying things about the existing JS package/asset managers. 
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            Jim uses a lot of stolen ideas from a lot of great projects. Namely:
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            * version management and flexible project fetching from rip
         
     | 
| 
      
 13 
     | 
    
         
            +
            * asset compression from jammit and sprockets
         
     | 
| 
      
 14 
     | 
    
         
            +
            * Gemfile and bundle from bundler
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            The goals are simple:
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            * Install a file, archive, git repo, etc from a local path or a URL into a common directory stored with a specific name and version number. Because should be able to install anything from anywhere, theres no need for a central package host.
         
     | 
| 
      
 19 
     | 
    
         
            +
            * Specify the local and installed files required for a project by name and version number in a single place. Dependencies for each project are not managed by the system, the onus is on you to specify them in the order you want them. _The project does not have to be in Ruby or even have a backend system._
         
     | 
| 
      
 20 
     | 
    
         
            +
            * Run a command to bundle all the required files into a single file.
         
     | 
| 
      
 21 
     | 
    
         
            +
            * Run a command to bundle the files _and_ run them through a JavaScript compressor.
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            So far I've accomplished the goals, but this is all very very very beta and the API is sure to change and thing straight-up might not work.
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            == Usage
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            From anywhere, install a project:
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              // From a URL
         
     | 
| 
      
 30 
     | 
    
         
            +
              $ jim install http://code.jquery.com/jquery-1.4.2.js
         
     | 
| 
      
 31 
     | 
    
         
            +
              // From a zip (with name and version)
         
     | 
| 
      
 32 
     | 
    
         
            +
              $ jim install http://github.com/jquery/jquery-metadata/zipball/master jquery-metadata 2.0
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            In your project run:
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              $ jim init
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            Which create an empty "Jimfile". Open it up and add your requirements:
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              // bundled_path: public/javascripts/bundled.js
         
     | 
| 
      
 41 
     | 
    
         
            +
              // compressed_path: public/javascripts/compressed.js
         
     | 
| 
      
 42 
     | 
    
         
            +
              // vendor_dir: public/javascripts/vendor
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              jquery 1.4.2
         
     | 
| 
      
 45 
     | 
    
         
            +
              jquery-metadata 2.0
         
     | 
| 
      
 46 
     | 
    
         
            +
              // a local file (comments are fine)
         
     | 
| 
      
 47 
     | 
    
         
            +
              app.js
         
     | 
| 
      
 48 
     | 
    
         
            +
              
         
     | 
| 
      
 49 
     | 
    
         
            +
            If its a rack project, mount the Jim::Rack middleware which gives you live updates of your bundled and compressed js files:
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              use Jim::Rack, :bundled_uri => '/javascripts/bundled-live.js', 
         
     | 
| 
      
 52 
     | 
    
         
            +
                             :compressed_uri => '/javascripts/compressed-live.js'
         
     | 
| 
      
 53 
     | 
    
         
            +
              
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            Otherwise and also before deploys, etc, use the command line tool from your project's dir:
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
              $ jim bundle 
         
     | 
| 
      
 58 
     | 
    
         
            +
              // or
         
     | 
| 
      
 59 
     | 
    
         
            +
              $ jim compress
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            Run `jim commands` for a full list of commands.
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            == You're probably wondering
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            ==== Why not implement it in JavaScript itself?
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            CommonJS has certainly come a long way in a year, but in general the file system support and variety of libraries just isnt completely there yet for this type of project (IMHO). Also, I love Ruby and writing this was actually fun and pretty fast. 
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            With that said, I would gladly welcome anyone cloning the API in CommonJS (I'm just being lazy about it)
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            ==== Does it work with __ library or __ development platform?
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
            Probably?? Its all very new at this point so please test it out and let me know.
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            == Note on Patches/Pull Requests
         
     | 
| 
      
 76 
     | 
    
         
            +
             
         
     | 
| 
      
 77 
     | 
    
         
            +
            * Fork the project.
         
     | 
| 
      
 78 
     | 
    
         
            +
            * Make your feature addition or bug fix.
         
     | 
| 
      
 79 
     | 
    
         
            +
            * Add tests for it. This is important so I don't break it in a
         
     | 
| 
      
 80 
     | 
    
         
            +
              future version unintentionally.
         
     | 
| 
      
 81 
     | 
    
         
            +
            * Commit, do not mess with rakefile, version, or history.
         
     | 
| 
      
 82 
     | 
    
         
            +
              (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
         
     | 
| 
      
 83 
     | 
    
         
            +
            * Send me a pull request. Bonus points for topic branches.
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            == Copyright
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            Copyright (c) 2010 Aaron Quint. See LICENSE for details.
         
     | 
    
        data/Rakefile
    ADDED
    
    | 
         @@ -0,0 +1,59 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rake'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require 'jim'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            begin
         
     | 
| 
      
 9 
     | 
    
         
            +
              require 'jeweler'
         
     | 
| 
      
 10 
     | 
    
         
            +
              Jeweler::Tasks.new do |gem|
         
     | 
| 
      
 11 
     | 
    
         
            +
                gem.name = "jim"
         
     | 
| 
      
 12 
     | 
    
         
            +
                gem.version = Jim::VERSION
         
     | 
| 
      
 13 
     | 
    
         
            +
                gem.summary = %Q{jim is your friendly javascript library manager}
         
     | 
| 
      
 14 
     | 
    
         
            +
                gem.description = %Q{jim is your friendly javascript library manager. He downloads, stores, bundles, vendors and compresses.}
         
     | 
| 
      
 15 
     | 
    
         
            +
                gem.email = "aaron@quirkey.com"
         
     | 
| 
      
 16 
     | 
    
         
            +
                gem.homepage = "http://github.com/quirkey/jim"
         
     | 
| 
      
 17 
     | 
    
         
            +
                gem.authors = ["Aaron Quint"]
         
     | 
| 
      
 18 
     | 
    
         
            +
                gem.add_dependency "downlow", ">= 0.1.1"
         
     | 
| 
      
 19 
     | 
    
         
            +
                gem.add_development_dependency "shoulda", ">= 0"
         
     | 
| 
      
 20 
     | 
    
         
            +
                # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
              Jeweler::GemcutterTasks.new
         
     | 
| 
      
 23 
     | 
    
         
            +
            rescue LoadError
         
     | 
| 
      
 24 
     | 
    
         
            +
              puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            require 'rake/testtask'
         
     | 
| 
      
 28 
     | 
    
         
            +
            Rake::TestTask.new(:test) do |test|
         
     | 
| 
      
 29 
     | 
    
         
            +
              test.libs << 'lib' << 'test'
         
     | 
| 
      
 30 
     | 
    
         
            +
              test.pattern = 'test/**/test_*.rb'
         
     | 
| 
      
 31 
     | 
    
         
            +
              test.verbose = true
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            begin
         
     | 
| 
      
 35 
     | 
    
         
            +
              require 'rcov/rcovtask'
         
     | 
| 
      
 36 
     | 
    
         
            +
              Rcov::RcovTask.new do |test|
         
     | 
| 
      
 37 
     | 
    
         
            +
                test.libs << 'test'
         
     | 
| 
      
 38 
     | 
    
         
            +
                test.pattern = 'test/**/test_*.rb'
         
     | 
| 
      
 39 
     | 
    
         
            +
                test.verbose = true
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
            rescue LoadError
         
     | 
| 
      
 42 
     | 
    
         
            +
              task :rcov do
         
     | 
| 
      
 43 
     | 
    
         
            +
                abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
            end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            task :test => :check_dependencies
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            task :default => :test
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            require 'rake/rdoctask'
         
     | 
| 
      
 52 
     | 
    
         
            +
            Rake::RDocTask.new do |rdoc|
         
     | 
| 
      
 53 
     | 
    
         
            +
              version = File.exist?('VERSION') ? File.read('VERSION') : ""
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              rdoc.rdoc_dir = 'rdoc'
         
     | 
| 
      
 56 
     | 
    
         
            +
              rdoc.title = "jim #{version}"
         
     | 
| 
      
 57 
     | 
    
         
            +
              rdoc.rdoc_files.include('README*')
         
     | 
| 
      
 58 
     | 
    
         
            +
              rdoc.rdoc_files.include('lib/**/*.rb')
         
     | 
| 
      
 59 
     | 
    
         
            +
            end
         
     | 
    
        data/bin/jim
    ADDED
    
    
    
        data/jim.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,83 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Generated by jeweler
         
     | 
| 
      
 2 
     | 
    
         
            +
            # DO NOT EDIT THIS FILE DIRECTLY
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
         
     | 
| 
      
 4 
     | 
    
         
            +
            # -*- encoding: utf-8 -*-
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            Gem::Specification.new do |s|
         
     | 
| 
      
 7 
     | 
    
         
            +
              s.name = %q{jim}
         
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.1.0"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
      
 11 
     | 
    
         
            +
              s.authors = ["Aaron Quint"]
         
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = %q{2010-02-19}
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.default_executable = %q{jim}
         
     | 
| 
      
 14 
     | 
    
         
            +
              s.description = %q{jim is your friendly javascript library manager. He downloads, stores, bundles, vendors and compresses.}
         
     | 
| 
      
 15 
     | 
    
         
            +
              s.email = %q{aaron@quirkey.com}
         
     | 
| 
      
 16 
     | 
    
         
            +
              s.executables = ["jim"]
         
     | 
| 
      
 17 
     | 
    
         
            +
              s.extra_rdoc_files = [
         
     | 
| 
      
 18 
     | 
    
         
            +
                "LICENSE",
         
     | 
| 
      
 19 
     | 
    
         
            +
                 "README.rdoc"
         
     | 
| 
      
 20 
     | 
    
         
            +
              ]
         
     | 
| 
      
 21 
     | 
    
         
            +
              s.files = [
         
     | 
| 
      
 22 
     | 
    
         
            +
                ".document",
         
     | 
| 
      
 23 
     | 
    
         
            +
                 ".gitignore",
         
     | 
| 
      
 24 
     | 
    
         
            +
                 "LICENSE",
         
     | 
| 
      
 25 
     | 
    
         
            +
                 "README.rdoc",
         
     | 
| 
      
 26 
     | 
    
         
            +
                 "Rakefile",
         
     | 
| 
      
 27 
     | 
    
         
            +
                 "bin/jim",
         
     | 
| 
      
 28 
     | 
    
         
            +
                 "jim.gemspec",
         
     | 
| 
      
 29 
     | 
    
         
            +
                 "lib/jim.rb",
         
     | 
| 
      
 30 
     | 
    
         
            +
                 "lib/jim/bundler.rb",
         
     | 
| 
      
 31 
     | 
    
         
            +
                 "lib/jim/cli.rb",
         
     | 
| 
      
 32 
     | 
    
         
            +
                 "lib/jim/index.rb",
         
     | 
| 
      
 33 
     | 
    
         
            +
                 "lib/jim/installer.rb",
         
     | 
| 
      
 34 
     | 
    
         
            +
                 "lib/jim/rack.rb",
         
     | 
| 
      
 35 
     | 
    
         
            +
                 "lib/jim/templates/commands",
         
     | 
| 
      
 36 
     | 
    
         
            +
                 "lib/jim/templates/jimfile",
         
     | 
| 
      
 37 
     | 
    
         
            +
                 "lib/jim/version_parser.rb",
         
     | 
| 
      
 38 
     | 
    
         
            +
                 "test/fixtures/infoincomments.js",
         
     | 
| 
      
 39 
     | 
    
         
            +
                 "test/fixtures/jimfile",
         
     | 
| 
      
 40 
     | 
    
         
            +
                 "test/fixtures/jquery-1.4.1.js",
         
     | 
| 
      
 41 
     | 
    
         
            +
                 "test/fixtures/jquery.color.js",
         
     | 
| 
      
 42 
     | 
    
         
            +
                 "test/fixtures/jquery.metadata-2.0.zip",
         
     | 
| 
      
 43 
     | 
    
         
            +
                 "test/fixtures/mustache.js/mustache.js",
         
     | 
| 
      
 44 
     | 
    
         
            +
                 "test/fixtures/mustache.js/package.json",
         
     | 
| 
      
 45 
     | 
    
         
            +
                 "test/fixtures/noversion.js",
         
     | 
| 
      
 46 
     | 
    
         
            +
                 "test/helper.rb",
         
     | 
| 
      
 47 
     | 
    
         
            +
                 "test/test_jim_bundler.rb",
         
     | 
| 
      
 48 
     | 
    
         
            +
                 "test/test_jim_cli.rb",
         
     | 
| 
      
 49 
     | 
    
         
            +
                 "test/test_jim_index.rb",
         
     | 
| 
      
 50 
     | 
    
         
            +
                 "test/test_jim_installer.rb",
         
     | 
| 
      
 51 
     | 
    
         
            +
                 "test/test_jim_version_parser.rb"
         
     | 
| 
      
 52 
     | 
    
         
            +
              ]
         
     | 
| 
      
 53 
     | 
    
         
            +
              s.homepage = %q{http://github.com/quirkey/jim}
         
     | 
| 
      
 54 
     | 
    
         
            +
              s.rdoc_options = ["--charset=UTF-8"]
         
     | 
| 
      
 55 
     | 
    
         
            +
              s.require_paths = ["lib"]
         
     | 
| 
      
 56 
     | 
    
         
            +
              s.rubygems_version = %q{1.3.5}
         
     | 
| 
      
 57 
     | 
    
         
            +
              s.summary = %q{jim is your friendly javascript library manager}
         
     | 
| 
      
 58 
     | 
    
         
            +
              s.test_files = [
         
     | 
| 
      
 59 
     | 
    
         
            +
                "test/helper.rb",
         
     | 
| 
      
 60 
     | 
    
         
            +
                 "test/test_jim_bundler.rb",
         
     | 
| 
      
 61 
     | 
    
         
            +
                 "test/test_jim_cli.rb",
         
     | 
| 
      
 62 
     | 
    
         
            +
                 "test/test_jim_index.rb",
         
     | 
| 
      
 63 
     | 
    
         
            +
                 "test/test_jim_installer.rb",
         
     | 
| 
      
 64 
     | 
    
         
            +
                 "test/test_jim_version_parser.rb"
         
     | 
| 
      
 65 
     | 
    
         
            +
              ]
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
              if s.respond_to? :specification_version then
         
     | 
| 
      
 68 
     | 
    
         
            +
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         
     | 
| 
      
 69 
     | 
    
         
            +
                s.specification_version = 3
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
         
     | 
| 
      
 72 
     | 
    
         
            +
                  s.add_runtime_dependency(%q<downlow>, [">= 0.1.1"])
         
     | 
| 
      
 73 
     | 
    
         
            +
                  s.add_development_dependency(%q<shoulda>, [">= 0"])
         
     | 
| 
      
 74 
     | 
    
         
            +
                else
         
     | 
| 
      
 75 
     | 
    
         
            +
                  s.add_dependency(%q<downlow>, [">= 0.1.1"])
         
     | 
| 
      
 76 
     | 
    
         
            +
                  s.add_dependency(%q<shoulda>, [">= 0"])
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
              else
         
     | 
| 
      
 79 
     | 
    
         
            +
                s.add_dependency(%q<downlow>, [">= 0.1.1"])
         
     | 
| 
      
 80 
     | 
    
         
            +
                s.add_dependency(%q<shoulda>, [">= 0"])
         
     | 
| 
      
 81 
     | 
    
         
            +
              end
         
     | 
| 
      
 82 
     | 
    
         
            +
            end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
    
        data/lib/jim.rb
    ADDED
    
    | 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'downlow'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'logger'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'yajl'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Jim
         
     | 
| 
      
 6 
     | 
    
         
            +
              VERSION = '0.1.0'
         
     | 
| 
      
 7 
     | 
    
         
            +
              
         
     | 
| 
      
 8 
     | 
    
         
            +
              class Error < RuntimeError; end
         
     | 
| 
      
 9 
     | 
    
         
            +
              class FileExists < Error; end
         
     | 
| 
      
 10 
     | 
    
         
            +
              
         
     | 
| 
      
 11 
     | 
    
         
            +
              def self.logger=(logger)
         
     | 
| 
      
 12 
     | 
    
         
            +
                @logger = logger
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
              
         
     | 
| 
      
 15 
     | 
    
         
            +
              def self.logger
         
     | 
| 
      
 16 
     | 
    
         
            +
                @logger ||= LOGGER if defined?(LOGGER)
         
     | 
| 
      
 17 
     | 
    
         
            +
                if !@logger
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @logger           = Logger.new(STDOUT)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  @logger.level     = Logger::INFO
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @logger.formatter = Proc.new {|s, t, n, msg| "#{msg}\n"}
         
     | 
| 
      
 21 
     | 
    
         
            +
                  @logger
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
                @logger
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
              
         
     | 
| 
      
 26 
     | 
    
         
            +
              autoload :Installer, 'jim/installer'
         
     | 
| 
      
 27 
     | 
    
         
            +
              autoload :Index, 'jim/index'
         
     | 
| 
      
 28 
     | 
    
         
            +
              autoload :Bundler, 'jim/bundler'
         
     | 
| 
      
 29 
     | 
    
         
            +
              autoload :VersionParser, 'jim/version_parser'
         
     | 
| 
      
 30 
     | 
    
         
            +
              autoload :CLI, 'jim/cli'
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/jim/bundler.rb
    ADDED
    
    | 
         @@ -0,0 +1,102 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Jim
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Bundler
         
     | 
| 
      
 3 
     | 
    
         
            +
                class MissingFile < Jim::Error; end
         
     | 
| 
      
 4 
     | 
    
         
            +
                
         
     | 
| 
      
 5 
     | 
    
         
            +
                attr_accessor :jimfile, :index, :requirements, :paths, :options 
         
     | 
| 
      
 6 
     | 
    
         
            +
               
         
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize(jimfile, index, options = {})
         
     | 
| 
      
 8 
     | 
    
         
            +
                  self.jimfile      = jimfile.is_a?(Pathname) ? jimfile.read : jimfile
         
     | 
| 
      
 9 
     | 
    
         
            +
                  self.index        = index || Jim::Index.new
         
     | 
| 
      
 10 
     | 
    
         
            +
                  self.options      = {}
         
     | 
| 
      
 11 
     | 
    
         
            +
                  self.requirements = []
         
     | 
| 
      
 12 
     | 
    
         
            +
                  parse_jimfile
         
     | 
| 
      
 13 
     | 
    
         
            +
                  self.options.merge(options)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  self.add(options[:vendor_dir]) if options[:vendor_dir]
         
     | 
| 
      
 15 
     | 
    
         
            +
                  self.paths        = []
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
                
         
     | 
| 
      
 18 
     | 
    
         
            +
                def resolve!
         
     | 
| 
      
 19 
     | 
    
         
            +
                  self.requirements.each do |search|
         
     | 
| 
      
 20 
     | 
    
         
            +
                    name, version = search.strip.split(/\s+/)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    path = self.index.find(name, version)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    if !path
         
     | 
| 
      
 23 
     | 
    
         
            +
                      raise(MissingFile, 
         
     | 
| 
      
 24 
     | 
    
         
            +
                      "Could not find #{name} #{version} in any of these paths #{index.directories.join(':')}")
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
      
 26 
     | 
    
         
            +
                    self.paths << path
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  paths
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
                
         
     | 
| 
      
 31 
     | 
    
         
            +
                def bundle!(to = nil)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  resolve! if paths.empty?
         
     | 
| 
      
 33 
     | 
    
         
            +
                  to = options[:bundled_path] if to.nil? && options[:bundled_path]
         
     | 
| 
      
 34 
     | 
    
         
            +
                  io = io_for_path(to)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  logger.info "bundling to #{to}" if to
         
     | 
| 
      
 36 
     | 
    
         
            +
                  paths.each do |path|
         
     | 
| 
      
 37 
     | 
    
         
            +
                    io << path.read << "\n"
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                  io
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
                
         
     | 
| 
      
 42 
     | 
    
         
            +
                def compress!(to = nil)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  to = options[:compressed_path] if to.nil? && options[:compressed_path]
         
     | 
| 
      
 44 
     | 
    
         
            +
                  io = io_for_path(to)
         
     | 
| 
      
 45 
     | 
    
         
            +
                  logger.info "compressing to #{to}"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  io << js_compress(bundle!(false))
         
     | 
| 
      
 47 
     | 
    
         
            +
                  io
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
                
         
     | 
| 
      
 50 
     | 
    
         
            +
                def vendor!(dir = nil)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  resolve! if paths.empty?
         
     | 
| 
      
 52 
     | 
    
         
            +
                  dir ||= options[:vendor_dir]
         
     | 
| 
      
 53 
     | 
    
         
            +
                  dir ||= 'vendor' # default
         
     | 
| 
      
 54 
     | 
    
         
            +
                  logger.info "vendoring to #{dir}"
         
     | 
| 
      
 55 
     | 
    
         
            +
                  paths.each do |path|
         
     | 
| 
      
 56 
     | 
    
         
            +
                    Jim::Installer.new(path, dir, :shallow => true).install
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
                
         
     | 
| 
      
 60 
     | 
    
         
            +
                private
         
     | 
| 
      
 61 
     | 
    
         
            +
                def io_for_path(to)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  case to
         
     | 
| 
      
 63 
     | 
    
         
            +
                  when IO
         
     | 
| 
      
 64 
     | 
    
         
            +
                    to
         
     | 
| 
      
 65 
     | 
    
         
            +
                  when Pathname
         
     | 
| 
      
 66 
     | 
    
         
            +
                    to.dirname.mkpath
         
     | 
| 
      
 67 
     | 
    
         
            +
                    to.open('w')
         
     | 
| 
      
 68 
     | 
    
         
            +
                  when String
         
     | 
| 
      
 69 
     | 
    
         
            +
                    to = Pathname.new(to)
         
     | 
| 
      
 70 
     | 
    
         
            +
                    io_for_path(to)
         
     | 
| 
      
 71 
     | 
    
         
            +
                  else
         
     | 
| 
      
 72 
     | 
    
         
            +
                    ""
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
               
         
     | 
| 
      
 76 
     | 
    
         
            +
                def parse_jimfile
         
     | 
| 
      
 77 
     | 
    
         
            +
                  jimfile.each_line do |line|
         
     | 
| 
      
 78 
     | 
    
         
            +
                    if /^\/\/\s?([^\:]+)\:\s(.*)$/.match line
         
     | 
| 
      
 79 
     | 
    
         
            +
                      self.options[$1.to_sym] = $2.strip
         
     | 
| 
      
 80 
     | 
    
         
            +
                    elsif line !~ /^\// && line.strip != ''
         
     | 
| 
      
 81 
     | 
    
         
            +
                      self.requirements << line
         
     | 
| 
      
 82 
     | 
    
         
            +
                    end
         
     | 
| 
      
 83 
     | 
    
         
            +
                  end
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
                
         
     | 
| 
      
 86 
     | 
    
         
            +
                def js_compress(uncompressed)
         
     | 
| 
      
 87 
     | 
    
         
            +
                  if options[:compressor] == 'yui'
         
     | 
| 
      
 88 
     | 
    
         
            +
                    require "yui/compressor"
         
     | 
| 
      
 89 
     | 
    
         
            +
                    compressor = ::YUI::JavaScriptCompressor.new
         
     | 
| 
      
 90 
     | 
    
         
            +
                  else 
         
     | 
| 
      
 91 
     | 
    
         
            +
                    require 'closure-compiler'
         
     | 
| 
      
 92 
     | 
    
         
            +
                    compressor = ::Closure::Compiler.new
         
     | 
| 
      
 93 
     | 
    
         
            +
                  end
         
     | 
| 
      
 94 
     | 
    
         
            +
                  compressor.compress(uncompressed)
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
                
         
     | 
| 
      
 97 
     | 
    
         
            +
                def logger
         
     | 
| 
      
 98 
     | 
    
         
            +
                  Jim.logger
         
     | 
| 
      
 99 
     | 
    
         
            +
                end
         
     | 
| 
      
 100 
     | 
    
         
            +
                
         
     | 
| 
      
 101 
     | 
    
         
            +
              end
         
     | 
| 
      
 102 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/jim/cli.rb
    ADDED
    
    | 
         @@ -0,0 +1,143 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Jim
         
     | 
| 
      
 2 
     | 
    
         
            +
              class CLI
         
     | 
| 
      
 3 
     | 
    
         
            +
                
         
     | 
| 
      
 4 
     | 
    
         
            +
                attr_accessor :jimfile, :jimhome, :force
         
     | 
| 
      
 5 
     | 
    
         
            +
                
         
     | 
| 
      
 6 
     | 
    
         
            +
                def initialize(args)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @output = ""
         
     | 
| 
      
 8 
     | 
    
         
            +
                  # set the default jimhome
         
     | 
| 
      
 9 
     | 
    
         
            +
                  self.jimhome = Pathname.new(ENV['JIMHOME'] || '~/.jim').expand_path
         
     | 
| 
      
 10 
     | 
    
         
            +
                  # parse the options
         
     | 
| 
      
 11 
     | 
    
         
            +
                  self.jimfile = Pathname.new('Jimfile')
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @args = parse_options(args)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  ## try to run based on args
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
                
         
     | 
| 
      
 16 
     | 
    
         
            +
                def run
         
     | 
| 
      
 17 
     | 
    
         
            +
                  command = @args.shift
         
     | 
| 
      
 18 
     | 
    
         
            +
                  if command && respond_to?(command)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    self.send(command, *@args)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  elsif command.nil? || command.strip == ''
         
     | 
| 
      
 21 
     | 
    
         
            +
                    cheat
         
     | 
| 
      
 22 
     | 
    
         
            +
                  else 
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @output << "No action found for #{command}. Run -h for help."
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @output
         
     | 
| 
      
 26 
     | 
    
         
            +
                rescue Jim::FileExists => e
         
     | 
| 
      
 27 
     | 
    
         
            +
                  @output << "#{e.message} already exists, bailing. Use --force if you're sure"
         
     | 
| 
      
 28 
     | 
    
         
            +
                rescue => e
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @output << e.message + " (#{e.class})"
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
                
         
     | 
| 
      
 32 
     | 
    
         
            +
                def commands
         
     | 
| 
      
 33 
     | 
    
         
            +
                  logger.info "Usage: jim [options] [command] [args]\n"
         
     | 
| 
      
 34 
     | 
    
         
            +
                  logger.info "Commands:"
         
     | 
| 
      
 35 
     | 
    
         
            +
                  logger.info template('commands')
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
                
         
     | 
| 
      
 38 
     | 
    
         
            +
                def cheat
         
     | 
| 
      
 39 
     | 
    
         
            +
                  logger.info "Usage: jim [options] [command] [args]\n"
         
     | 
| 
      
 40 
     | 
    
         
            +
                  logger.info "Commands:"
         
     | 
| 
      
 41 
     | 
    
         
            +
                  logger.info template('commands').find_all {|l| l.match(/^\w/) }.join("")
         
     | 
| 
      
 42 
     | 
    
         
            +
                  logger.info "run commands for details"
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
                
         
     | 
| 
      
 45 
     | 
    
         
            +
                def init(dir = nil)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  dir = Pathname.new(dir || '')
         
     | 
| 
      
 47 
     | 
    
         
            +
                  jimfile_path = dir + 'Jimfile'
         
     | 
| 
      
 48 
     | 
    
         
            +
                  if jimfile_path.readable? && !force
         
     | 
| 
      
 49 
     | 
    
         
            +
                    raise Jim::FileExists(jimfile_path)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  else
         
     | 
| 
      
 51 
     | 
    
         
            +
                    File.open(jimfile_path, 'w') do |f|
         
     | 
| 
      
 52 
     | 
    
         
            +
                      f << template('Jimfile')
         
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
      
 54 
     | 
    
         
            +
                    logger.info "wrote Jimfile to #{jimfile_path}"
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
                
         
     | 
| 
      
 58 
     | 
    
         
            +
                def install(url, name = false, version = false)
         
     | 
| 
      
 59 
     | 
    
         
            +
                  Jim::Installer.new(url, jimhome, :force => force, :name => name, :version => version).install
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
                
         
     | 
| 
      
 62 
     | 
    
         
            +
                def bundle(to = nil)
         
     | 
| 
      
 63 
     | 
    
         
            +
                  path = bundler.bundle!(to)
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
                
         
     | 
| 
      
 66 
     | 
    
         
            +
                def compress(to = nil)
         
     | 
| 
      
 67 
     | 
    
         
            +
                  path = bundler.compress!(to)
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
                
         
     | 
| 
      
 70 
     | 
    
         
            +
                def list
         
     | 
| 
      
 71 
     | 
    
         
            +
                  logger.info "Getting list of installed files in #{index.directories.join(':')}"
         
     | 
| 
      
 72 
     | 
    
         
            +
                  list = index.list
         
     | 
| 
      
 73 
     | 
    
         
            +
                  logger.info "Installed:\n#{list.collect {|i| "#{i[0]} (#{i[1].join(', ')})"}.join("\n")}"
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
                
         
     | 
| 
      
 76 
     | 
    
         
            +
                def resolve
         
     | 
| 
      
 77 
     | 
    
         
            +
                  resolved = bundler.resolve!
         
     | 
| 
      
 78 
     | 
    
         
            +
                  logger.info "Files:\n#{resolved.join("\n")}"
         
     | 
| 
      
 79 
     | 
    
         
            +
                  resolved
         
     | 
| 
      
 80 
     | 
    
         
            +
                end
         
     | 
| 
      
 81 
     | 
    
         
            +
                
         
     | 
| 
      
 82 
     | 
    
         
            +
                def vendor(dir = nil)
         
     | 
| 
      
 83 
     | 
    
         
            +
                  bundler.vendor!(dir)
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
                
         
     | 
| 
      
 86 
     | 
    
         
            +
                private
         
     | 
| 
      
 87 
     | 
    
         
            +
                def parse_options(runtime_args)
         
     | 
| 
      
 88 
     | 
    
         
            +
                  OptionParser.new("", 24, '  ') do |opts|
         
     | 
| 
      
 89 
     | 
    
         
            +
                    opts.banner = "Usage: jim [options] [command] [args]"
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                    opts.separator ""
         
     | 
| 
      
 92 
     | 
    
         
            +
                    opts.separator "jim options:"
         
     | 
| 
      
 93 
     | 
    
         
            +
                    
         
     | 
| 
      
 94 
     | 
    
         
            +
                    opts.on("--jimhome path/to/home", "set the install path/JIMHOME dir (default ~/.jim)") {|h| 
         
     | 
| 
      
 95 
     | 
    
         
            +
                      self.jimhome = Pathname.new(h)
         
     | 
| 
      
 96 
     | 
    
         
            +
                    }
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                    opts.on("-j", "--jimfile path/to/jimfile", "load specific Jimfile at path (default ./Jimfile)") { |j|
         
     | 
| 
      
 99 
     | 
    
         
            +
                      self.jimfile = Pathname.new(j)
         
     | 
| 
      
 100 
     | 
    
         
            +
                    }
         
     | 
| 
      
 101 
     | 
    
         
            +
                    
         
     | 
| 
      
 102 
     | 
    
         
            +
                    opts.on("-f", "--force", "force file creation/overwrite") {|f|
         
     | 
| 
      
 103 
     | 
    
         
            +
                      self.force = true
         
     | 
| 
      
 104 
     | 
    
         
            +
                    }
         
     | 
| 
      
 105 
     | 
    
         
            +
                    
         
     | 
| 
      
 106 
     | 
    
         
            +
                    opts.on("-d", "--debug", "set log level to debug") {|d|
         
     | 
| 
      
 107 
     | 
    
         
            +
                      logger.level = Logger::DEBUG
         
     | 
| 
      
 108 
     | 
    
         
            +
                    }
         
     | 
| 
      
 109 
     | 
    
         
            +
                    
         
     | 
| 
      
 110 
     | 
    
         
            +
                    opts.on("-v", "--version", "print version") {|d|
         
     | 
| 
      
 111 
     | 
    
         
            +
                      puts "jim #{Jim::VERSION}"
         
     | 
| 
      
 112 
     | 
    
         
            +
                      exit
         
     | 
| 
      
 113 
     | 
    
         
            +
                    }
         
     | 
| 
      
 114 
     | 
    
         
            +
                    
         
     | 
| 
      
 115 
     | 
    
         
            +
                    opts.on_tail("-h", "--help", "Show this message. Run jim commands for list of commands.") do
         
     | 
| 
      
 116 
     | 
    
         
            +
                      puts opts.help
         
     | 
| 
      
 117 
     | 
    
         
            +
                      exit
         
     | 
| 
      
 118 
     | 
    
         
            +
                    end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                  end.parse! runtime_args
         
     | 
| 
      
 121 
     | 
    
         
            +
                rescue OptionParser::MissingArgument => e
         
     | 
| 
      
 122 
     | 
    
         
            +
                  logger.warn "#{e}, run -h for options"
         
     | 
| 
      
 123 
     | 
    
         
            +
                  exit
         
     | 
| 
      
 124 
     | 
    
         
            +
                end
         
     | 
| 
      
 125 
     | 
    
         
            +
                
         
     | 
| 
      
 126 
     | 
    
         
            +
                def index
         
     | 
| 
      
 127 
     | 
    
         
            +
                  @index ||= Jim::Index.new(jimhome + 'lib')
         
     | 
| 
      
 128 
     | 
    
         
            +
                end
         
     | 
| 
      
 129 
     | 
    
         
            +
                
         
     | 
| 
      
 130 
     | 
    
         
            +
                def bundler
         
     | 
| 
      
 131 
     | 
    
         
            +
                  @bundler ||= Jim::Bundler.new(jimfile, index)
         
     | 
| 
      
 132 
     | 
    
         
            +
                end
         
     | 
| 
      
 133 
     | 
    
         
            +
                
         
     | 
| 
      
 134 
     | 
    
         
            +
                def template(path)
         
     | 
| 
      
 135 
     | 
    
         
            +
                  (Pathname.new(__FILE__).dirname + 'templates' + path).read
         
     | 
| 
      
 136 
     | 
    
         
            +
                end
         
     | 
| 
      
 137 
     | 
    
         
            +
                
         
     | 
| 
      
 138 
     | 
    
         
            +
                def logger
         
     | 
| 
      
 139 
     | 
    
         
            +
                  Jim.logger
         
     | 
| 
      
 140 
     | 
    
         
            +
                end
         
     | 
| 
      
 141 
     | 
    
         
            +
                
         
     | 
| 
      
 142 
     | 
    
         
            +
              end
         
     | 
| 
      
 143 
     | 
    
         
            +
            end
         
     |