workon 0.0.6
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/.gitignore +4 -0
 - data/.rvmrc +1 -0
 - data/Gemfile +4 -0
 - data/Rakefile +2 -0
 - data/bin/workon +7 -0
 - data/lib/workon/actor/base.rb +76 -0
 - data/lib/workon/actor/finder.rb +9 -0
 - data/lib/workon/actor/git.rb +14 -0
 - data/lib/workon/actor/passenger.rb +17 -0
 - data/lib/workon/actor/text_mate.rb +9 -0
 - data/lib/workon/actor/watchr.rb +13 -0
 - data/lib/workon/actor/web_browser.rb +12 -0
 - data/lib/workon/actor.rb +17 -0
 - data/lib/workon/cli/commands.rb +68 -0
 - data/lib/workon/cli.rb +31 -0
 - data/lib/workon/configuration.rb +88 -0
 - data/lib/workon/version.rb +3 -0
 - data/lib/workon.rb +53 -0
 - data/workon.gemspec +24 -0
 - metadata +75 -0
 
    
        data/.gitignore
    ADDED
    
    
    
        data/.rvmrc
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            rvm use ruby-1.9.2-p136@workon
         
     | 
    
        data/Gemfile
    ADDED
    
    
    
        data/Rakefile
    ADDED
    
    
    
        data/bin/workon
    ADDED
    
    
| 
         @@ -0,0 +1,76 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Workon
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Actor
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Base
         
     | 
| 
      
 4 
     | 
    
         
            +
                  attr_reader :path
         
     | 
| 
      
 5 
     | 
    
         
            +
                  attr_reader :project
         
     | 
| 
      
 6 
     | 
    
         
            +
                  
         
     | 
| 
      
 7 
     | 
    
         
            +
                  def self.inherited(base)
         
     | 
| 
      
 8 
     | 
    
         
            +
                    @_subclasses ||= []
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @_subclasses << base
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
                  
         
     | 
| 
      
 12 
     | 
    
         
            +
                  def self.option(*args, &block)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    Workon::Configuration.instance.parser.on(*args) do |v|
         
     | 
| 
      
 14 
     | 
    
         
            +
                      block.call(v)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  
         
     | 
| 
      
 18 
     | 
    
         
            +
                  def self.options
         
     | 
| 
      
 19 
     | 
    
         
            +
                    Workon.config
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  
         
     | 
| 
      
 22 
     | 
    
         
            +
                  def self.subclasses
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @_subclasses
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                  
         
     | 
| 
      
 26 
     | 
    
         
            +
                  def initialize(path)
         
     | 
| 
      
 27 
     | 
    
         
            +
                    @path = path
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                  
         
     | 
| 
      
 30 
     | 
    
         
            +
                  def options
         
     | 
| 
      
 31 
     | 
    
         
            +
                    self.class.options
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  
         
     | 
| 
      
 34 
     | 
    
         
            +
                  def has_option?(key)
         
     | 
| 
      
 35 
     | 
    
         
            +
                    key = key.to_sym
         
     | 
| 
      
 36 
     | 
    
         
            +
                    
         
     | 
| 
      
 37 
     | 
    
         
            +
                    !options[key].nil? && !options[key].empty?
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                  
         
     | 
| 
      
 40 
     | 
    
         
            +
                  def fetch_option(key, default = nil)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    has_option?(key) ? options[key] : default
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
                  
         
     | 
| 
      
 44 
     | 
    
         
            +
                  def project
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @project ||= Workon.project_name
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
                  
         
     | 
| 
      
 48 
     | 
    
         
            +
                  def commit
         
     | 
| 
      
 49 
     | 
    
         
            +
                    run command
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                  
         
     | 
| 
      
 52 
     | 
    
         
            +
                  def system(command)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    puts "Running #{command}"
         
     | 
| 
      
 54 
     | 
    
         
            +
                    Kernel.system command
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                  
         
     | 
| 
      
 57 
     | 
    
         
            +
                  def run(command)
         
     | 
| 
      
 58 
     | 
    
         
            +
                    puts "Running #{command}"
         
     | 
| 
      
 59 
     | 
    
         
            +
                    output = %x(#{command})
         
     | 
| 
      
 60 
     | 
    
         
            +
                    return output
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
                  
         
     | 
| 
      
 63 
     | 
    
         
            +
                  def screen(command, scope = nil)
         
     | 
| 
      
 64 
     | 
    
         
            +
                    identifier = screen_scope scope
         
     | 
| 
      
 65 
     | 
    
         
            +
                    
         
     | 
| 
      
 66 
     | 
    
         
            +
                    run %(screen -dmS #{identifier} #{command})
         
     | 
| 
      
 67 
     | 
    
         
            +
                    puts %(Reconnect with `screen -r #{identifier}')
         
     | 
| 
      
 68 
     | 
    
         
            +
                  end
         
     | 
| 
      
 69 
     | 
    
         
            +
                  
         
     | 
| 
      
 70 
     | 
    
         
            +
                  def screen_scope(scope = nil)
         
     | 
| 
      
 71 
     | 
    
         
            +
                    scope ||= self.class.name.to_s.split('::').last
         
     | 
| 
      
 72 
     | 
    
         
            +
                    "#{project}.#{scope}".downcase
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
              end
         
     | 
| 
      
 76 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Workon
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Actor
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Passenger < Base
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def is_rack_app?
         
     | 
| 
      
 5 
     | 
    
         
            +
                    !Dir['config.ru'].empty?
         
     | 
| 
      
 6 
     | 
    
         
            +
                  end
         
     | 
| 
      
 7 
     | 
    
         
            +
                  
         
     | 
| 
      
 8 
     | 
    
         
            +
                  def passenger_standalone_available?
         
     | 
| 
      
 9 
     | 
    
         
            +
                    !`which passenger`.empty?
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
                  
         
     | 
| 
      
 12 
     | 
    
         
            +
                  def commit
         
     | 
| 
      
 13 
     | 
    
         
            +
                    screen "passenger start" if is_rack_app? && passenger_standalone_available?
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,12 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Workon
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Actor
         
     | 
| 
      
 3 
     | 
    
         
            +
                class WebBrowser < Base
         
     | 
| 
      
 4 
     | 
    
         
            +
                  option('--host HOST', 'Ping this host') { |v| options[:host] = v}
         
     | 
| 
      
 5 
     | 
    
         
            +
                  
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def command
         
     | 
| 
      
 7 
     | 
    
         
            +
                    host_name = fetch_option :host, %{#{project}.local}
         
     | 
| 
      
 8 
     | 
    
         
            +
                    %{ping -q -c 1 -t 1 #{host_name} && open http://#{host_name}}
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/workon/actor.rb
    ADDED
    
    | 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'workon/actor/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'workon/actor/text_mate'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'workon/actor/web_browser'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'workon/actor/finder'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'workon/actor/git'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'workon/actor/watchr'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'workon/actor/passenger'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            module Workon
         
     | 
| 
      
 10 
     | 
    
         
            +
              module Actor
         
     | 
| 
      
 11 
     | 
    
         
            +
                include Enumerable
         
     | 
| 
      
 12 
     | 
    
         
            +
                
         
     | 
| 
      
 13 
     | 
    
         
            +
                def self.each(&block)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  Workon::Actor::Base.subclasses.each {|c| yield c }
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Workon
         
     | 
| 
      
 2 
     | 
    
         
            +
              module CLI
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Commands
         
     | 
| 
      
 4 
     | 
    
         
            +
                  module InstallHelper
         
     | 
| 
      
 5 
     | 
    
         
            +
                    BASH_PROFILE_PATH = '~/.bash_profile'
         
     | 
| 
      
 6 
     | 
    
         
            +
                    
         
     | 
| 
      
 7 
     | 
    
         
            +
                    def self.execute
         
     | 
| 
      
 8 
     | 
    
         
            +
                      install unless installed?
         
     | 
| 
      
 9 
     | 
    
         
            +
                    end
         
     | 
| 
      
 10 
     | 
    
         
            +
                    
         
     | 
| 
      
 11 
     | 
    
         
            +
                    def self.install
         
     | 
| 
      
 12 
     | 
    
         
            +
                      puts "Installing bash helper function to #{bash_profile_path}"
         
     | 
| 
      
 13 
     | 
    
         
            +
                      
         
     | 
| 
      
 14 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 15 
     | 
    
         
            +
                        File.open(bash_profile_path, 'a') do |f|
         
     | 
| 
      
 16 
     | 
    
         
            +
                          f.write "\n\n"
         
     | 
| 
      
 17 
     | 
    
         
            +
                          f.write finder
         
     | 
| 
      
 18 
     | 
    
         
            +
                          f.write helper_function
         
     | 
| 
      
 19 
     | 
    
         
            +
                        end
         
     | 
| 
      
 20 
     | 
    
         
            +
                        
         
     | 
| 
      
 21 
     | 
    
         
            +
                        puts "... Success!"
         
     | 
| 
      
 22 
     | 
    
         
            +
                      rescue => error
         
     | 
| 
      
 23 
     | 
    
         
            +
                        puts "... Failed!"
         
     | 
| 
      
 24 
     | 
    
         
            +
                        puts error
         
     | 
| 
      
 25 
     | 
    
         
            +
                      end
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
                    
         
     | 
| 
      
 28 
     | 
    
         
            +
                    def self.bash_profile_path
         
     | 
| 
      
 29 
     | 
    
         
            +
                      BASH_PROFILE_PATH.sub '~', ENV['HOME']
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
                    
         
     | 
| 
      
 32 
     | 
    
         
            +
                    def self.finder
         
     | 
| 
      
 33 
     | 
    
         
            +
                      "# Created by workon version #{Workon::VERSION}\n"
         
     | 
| 
      
 34 
     | 
    
         
            +
                    end
         
     | 
| 
      
 35 
     | 
    
         
            +
                    
         
     | 
| 
      
 36 
     | 
    
         
            +
                    def self.installed?
         
     | 
| 
      
 37 
     | 
    
         
            +
                      !(File.read(bash_profile_path) =~ /#{finder}/).nil?
         
     | 
| 
      
 38 
     | 
    
         
            +
                    end
         
     | 
| 
      
 39 
     | 
    
         
            +
                    
         
     | 
| 
      
 40 
     | 
    
         
            +
                    def self.helper_message(path)
         
     | 
| 
      
 41 
     | 
    
         
            +
                      lines = [ "This is for the bash helper function",
         
     | 
| 
      
 42 
     | 
    
         
            +
                                "cd #{path}" ]
         
     | 
| 
      
 43 
     | 
    
         
            +
                                
         
     | 
| 
      
 44 
     | 
    
         
            +
                      lines.each {|l| puts l } if installed?
         
     | 
| 
      
 45 
     | 
    
         
            +
                    end
         
     | 
| 
      
 46 
     | 
    
         
            +
                    
         
     | 
| 
      
 47 
     | 
    
         
            +
                    def self.helper_function
         
     | 
| 
      
 48 
     | 
    
         
            +
                      <<'BASH'
         
     | 
| 
      
 49 
     | 
    
         
            +
            wo () {
         
     | 
| 
      
 50 
     | 
    
         
            +
              OLDIFS=$IFS
         
     | 
| 
      
 51 
     | 
    
         
            +
              IFS=$'\n'
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
              workon_bin=$(which workon)
         
     | 
| 
      
 54 
     | 
    
         
            +
              output=$($workon_bin $1)
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
              for line in $output; do
         
     | 
| 
      
 57 
     | 
    
         
            +
                echo $line
         
     | 
| 
      
 58 
     | 
    
         
            +
              done
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
              eval $line
         
     | 
| 
      
 61 
     | 
    
         
            +
              IFS=$OLDIFS
         
     | 
| 
      
 62 
     | 
    
         
            +
            }
         
     | 
| 
      
 63 
     | 
    
         
            +
            BASH
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/workon/cli.rb
    ADDED
    
    | 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'workon'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'workon/cli/commands'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Workon
         
     | 
| 
      
 5 
     | 
    
         
            +
              module CLI
         
     | 
| 
      
 6 
     | 
    
         
            +
                def self.execute
         
     | 
| 
      
 7 
     | 
    
         
            +
                  config = Workon.config ARGV
         
     | 
| 
      
 8 
     | 
    
         
            +
                  
         
     | 
| 
      
 9 
     | 
    
         
            +
                  if config[:show_help]
         
     | 
| 
      
 10 
     | 
    
         
            +
                    puts Workon::Configuration.instance.parser
         
     | 
| 
      
 11 
     | 
    
         
            +
                    exit
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
                  
         
     | 
| 
      
 14 
     | 
    
         
            +
                  if config[:install_helper]
         
     | 
| 
      
 15 
     | 
    
         
            +
                    Workon::CLI::Commands::InstallHelper.execute
         
     | 
| 
      
 16 
     | 
    
         
            +
                    exit
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                  
         
     | 
| 
      
 19 
     | 
    
         
            +
                  raise OptionParser::MissingArgument unless Workon.has_project?
         
     | 
| 
      
 20 
     | 
    
         
            +
                  
         
     | 
| 
      
 21 
     | 
    
         
            +
                  Workon.find_project
         
     | 
| 
      
 22 
     | 
    
         
            +
                  
         
     | 
| 
      
 23 
     | 
    
         
            +
                  if config[:dump_configuration]
         
     | 
| 
      
 24 
     | 
    
         
            +
                    Workon::Configuration.instance.dump_to_project_rc
         
     | 
| 
      
 25 
     | 
    
         
            +
                    exit
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  
         
     | 
| 
      
 28 
     | 
    
         
            +
                  Workon.commit!
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,88 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'optparse'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Workon
         
     | 
| 
      
 5 
     | 
    
         
            +
              class Configuration
         
     | 
| 
      
 6 
     | 
    
         
            +
                attr_reader :options
         
     | 
| 
      
 7 
     | 
    
         
            +
                attr_reader :parser
         
     | 
| 
      
 8 
     | 
    
         
            +
                
         
     | 
| 
      
 9 
     | 
    
         
            +
                def self.instance(*args)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @_instance ||= new(*args)
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
                
         
     | 
| 
      
 13 
     | 
    
         
            +
                def initialize(*args)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @options = { without: [], only: [], install_helper: false, dump_configuration: false, project: nil, show_help: false }
         
     | 
| 
      
 15 
     | 
    
         
            +
                  parse_options args.first unless args.empty?
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
                
         
     | 
| 
      
 18 
     | 
    
         
            +
                def parse_options(args)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  parser.parse! args
         
     | 
| 
      
 20 
     | 
    
         
            +
                  options[:project] = args.first unless args.empty?
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
                
         
     | 
| 
      
 23 
     | 
    
         
            +
                def parser
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @parser ||= OptionParser.new do |o|
         
     | 
| 
      
 25 
     | 
    
         
            +
                    o.banner = "Usage: #{File.basename($0)} [options] project"
         
     | 
| 
      
 26 
     | 
    
         
            +
                    
         
     | 
| 
      
 27 
     | 
    
         
            +
                    o.on('-w', '--without ACTORS', Array, 'Exclude unwanted actors') do |v|
         
     | 
| 
      
 28 
     | 
    
         
            +
                      options[:without] = v
         
     | 
| 
      
 29 
     | 
    
         
            +
                    end
         
     | 
| 
      
 30 
     | 
    
         
            +
                    
         
     | 
| 
      
 31 
     | 
    
         
            +
                    o.on('-o', '--only ACTORS', Array, 'Only use certain actors') do |v|
         
     | 
| 
      
 32 
     | 
    
         
            +
                      options[:only] = v
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                    
         
     | 
| 
      
 35 
     | 
    
         
            +
                    o.on('-d', '--dump-configuration', 'Dump workon configuration to project_path/.workon.yml') do
         
     | 
| 
      
 36 
     | 
    
         
            +
                      options[:dump_configuration] = true
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
                    
         
     | 
| 
      
 39 
     | 
    
         
            +
                    o.on_tail('--install-helper', 'Install `wo` helper function to ~/.bash_profile') do
         
     | 
| 
      
 40 
     | 
    
         
            +
                      options[:install_helper] = true
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
                    
         
     | 
| 
      
 43 
     | 
    
         
            +
                    o.on_tail('-v', '--version', 'Show version information') do
         
     | 
| 
      
 44 
     | 
    
         
            +
                      puts Workon::VERSION
         
     | 
| 
      
 45 
     | 
    
         
            +
                      exit
         
     | 
| 
      
 46 
     | 
    
         
            +
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
                    
         
     | 
| 
      
 48 
     | 
    
         
            +
                    o.on_tail('-h', '--help', 'Show this help information') do
         
     | 
| 
      
 49 
     | 
    
         
            +
                      options[:show_help] = true
         
     | 
| 
      
 50 
     | 
    
         
            +
                      # exit
         
     | 
| 
      
 51 
     | 
    
         
            +
                    end
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
                
         
     | 
| 
      
 55 
     | 
    
         
            +
                def project_rc_path
         
     | 
| 
      
 56 
     | 
    
         
            +
                  @project_rc_path ||= File.join Workon.project_path, '.workonrc'
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
                
         
     | 
| 
      
 59 
     | 
    
         
            +
                def project_rc_exists?
         
     | 
| 
      
 60 
     | 
    
         
            +
                  File.exist? project_rc_path
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
                
         
     | 
| 
      
 63 
     | 
    
         
            +
                def merge_project_rc
         
     | 
| 
      
 64 
     | 
    
         
            +
                  if project_rc_exists?
         
     | 
| 
      
 65 
     | 
    
         
            +
                    opts = YAML.load_file(project_rc_path)
         
     | 
| 
      
 66 
     | 
    
         
            +
                    @options.merge! opts
         
     | 
| 
      
 67 
     | 
    
         
            +
                  end
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
                
         
     | 
| 
      
 70 
     | 
    
         
            +
                def dump_to_project_rc
         
     | 
| 
      
 71 
     | 
    
         
            +
                  o = options.dup
         
     | 
| 
      
 72 
     | 
    
         
            +
                  o.delete :install_helper
         
     | 
| 
      
 73 
     | 
    
         
            +
                  o.delete :dump_configuration
         
     | 
| 
      
 74 
     | 
    
         
            +
                  o.delete :project
         
     | 
| 
      
 75 
     | 
    
         
            +
                  o.delete :show_help
         
     | 
| 
      
 76 
     | 
    
         
            +
                  
         
     | 
| 
      
 77 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 78 
     | 
    
         
            +
                    File.open(project_rc_path, 'w') do |f|
         
     | 
| 
      
 79 
     | 
    
         
            +
                      YAML.dump o, f
         
     | 
| 
      
 80 
     | 
    
         
            +
                    end
         
     | 
| 
      
 81 
     | 
    
         
            +
                    
         
     | 
| 
      
 82 
     | 
    
         
            +
                    puts %(Saved workon configuration to #{project_rc_path})
         
     | 
| 
      
 83 
     | 
    
         
            +
                  rescue
         
     | 
| 
      
 84 
     | 
    
         
            +
                    STDERR.puts %(Could not save workon configuration to #{project_rc_path})
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
              end
         
     | 
| 
      
 88 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/workon.rb
    ADDED
    
    | 
         @@ -0,0 +1,53 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            $LOAD_PATH.unshift File.expand_path("../", __FILE__)
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'workon/configuration'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'workon/actor'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "workon/version"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Workon
         
     | 
| 
      
 8 
     | 
    
         
            +
              WORK_DIRS = '/Users/mike/Work/*/*'
         
     | 
| 
      
 9 
     | 
    
         
            +
              
         
     | 
| 
      
 10 
     | 
    
         
            +
              def self.all_directories
         
     | 
| 
      
 11 
     | 
    
         
            +
                @_all_directories ||= Dir[WORK_DIRS]
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
              
         
     | 
| 
      
 14 
     | 
    
         
            +
              def self.project_name
         
     | 
| 
      
 15 
     | 
    
         
            +
                config[:project]
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
              
         
     | 
| 
      
 18 
     | 
    
         
            +
              def self.project_path
         
     | 
| 
      
 19 
     | 
    
         
            +
                @_path
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
              
         
     | 
| 
      
 22 
     | 
    
         
            +
              def self.has_project?
         
     | 
| 
      
 23 
     | 
    
         
            +
                !project_name.nil? && 0 < project_name.to_s.length
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
              
         
     | 
| 
      
 26 
     | 
    
         
            +
              def self.find_project(str = project_name)
         
     | 
| 
      
 27 
     | 
    
         
            +
                candidate = all_directories.find { |d| d.end_with? "/#{str}" }
         
     | 
| 
      
 28 
     | 
    
         
            +
                
         
     | 
| 
      
 29 
     | 
    
         
            +
                unless candidate.nil?
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @_path = candidate
         
     | 
| 
      
 31 
     | 
    
         
            +
                  Workon::Configuration.instance.merge_project_rc
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
              
         
     | 
| 
      
 35 
     | 
    
         
            +
              def self.commit!
         
     | 
| 
      
 36 
     | 
    
         
            +
                Dir.chdir project_path
         
     | 
| 
      
 37 
     | 
    
         
            +
                
         
     | 
| 
      
 38 
     | 
    
         
            +
                Workon::Actor.each do |klass|
         
     | 
| 
      
 39 
     | 
    
         
            +
                  klass.new(project_path).commit
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
                
         
     | 
| 
      
 42 
     | 
    
         
            +
                Workon::CLI::Commands::InstallHelper.helper_message(project_path)
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
              
         
     | 
| 
      
 45 
     | 
    
         
            +
              def self.load_configuration(args)
         
     | 
| 
      
 46 
     | 
    
         
            +
                Workon::Configuration.instance.parse_options args
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
              
         
     | 
| 
      
 49 
     | 
    
         
            +
              def self.config(args = [])
         
     | 
| 
      
 50 
     | 
    
         
            +
                load_configuration args unless args.empty?
         
     | 
| 
      
 51 
     | 
    
         
            +
                Workon::Configuration.instance.options  
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
            end
         
     | 
    
        data/workon.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- encoding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            $:.push File.expand_path("../lib", __FILE__)
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "workon/version"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Gem::Specification.new do |s|
         
     | 
| 
      
 6 
     | 
    
         
            +
              s.name        = "workon"
         
     | 
| 
      
 7 
     | 
    
         
            +
              s.version     = Workon::VERSION
         
     | 
| 
      
 8 
     | 
    
         
            +
              s.platform    = Gem::Platform::RUBY
         
     | 
| 
      
 9 
     | 
    
         
            +
              s.authors     = ["Mike Wyatt"]
         
     | 
| 
      
 10 
     | 
    
         
            +
              s.email       = ["wyatt.mike@gmail.com"]
         
     | 
| 
      
 11 
     | 
    
         
            +
              s.homepage    = ""
         
     | 
| 
      
 12 
     | 
    
         
            +
              s.summary     = %q{Runs actions based on directories}
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.description = %q{Runs actions based on directories}
         
     | 
| 
      
 14 
     | 
    
         
            +
              
         
     | 
| 
      
 15 
     | 
    
         
            +
              # s.add_dependency "activesupport"
         
     | 
| 
      
 16 
     | 
    
         
            +
              # s.add_development_dependency "rspec"
         
     | 
| 
      
 17 
     | 
    
         
            +
              
         
     | 
| 
      
 18 
     | 
    
         
            +
              s.rubyforge_project = "workon"
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              s.files         = `git ls-files`.split("\n")
         
     | 
| 
      
 21 
     | 
    
         
            +
              s.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
         
     | 
| 
      
 22 
     | 
    
         
            +
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         
     | 
| 
      
 23 
     | 
    
         
            +
              s.require_paths = ["lib"]
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,75 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification 
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: workon
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version 
         
     | 
| 
      
 4 
     | 
    
         
            +
              prerelease: 
         
     | 
| 
      
 5 
     | 
    
         
            +
              version: 0.0.6
         
     | 
| 
      
 6 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 7 
     | 
    
         
            +
            authors: 
         
     | 
| 
      
 8 
     | 
    
         
            +
            - Mike Wyatt
         
     | 
| 
      
 9 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 10 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 11 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2011-02-25 00:00:00 -03:30
         
     | 
| 
      
 14 
     | 
    
         
            +
            default_executable: 
         
     | 
| 
      
 15 
     | 
    
         
            +
            dependencies: []
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            description: Runs actions based on directories
         
     | 
| 
      
 18 
     | 
    
         
            +
            email: 
         
     | 
| 
      
 19 
     | 
    
         
            +
            - wyatt.mike@gmail.com
         
     | 
| 
      
 20 
     | 
    
         
            +
            executables: 
         
     | 
| 
      
 21 
     | 
    
         
            +
            - workon
         
     | 
| 
      
 22 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            files: 
         
     | 
| 
      
 27 
     | 
    
         
            +
            - .gitignore
         
     | 
| 
      
 28 
     | 
    
         
            +
            - .rvmrc
         
     | 
| 
      
 29 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 30 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 31 
     | 
    
         
            +
            - bin/workon
         
     | 
| 
      
 32 
     | 
    
         
            +
            - lib/workon.rb
         
     | 
| 
      
 33 
     | 
    
         
            +
            - lib/workon/actor.rb
         
     | 
| 
      
 34 
     | 
    
         
            +
            - lib/workon/actor/base.rb
         
     | 
| 
      
 35 
     | 
    
         
            +
            - lib/workon/actor/finder.rb
         
     | 
| 
      
 36 
     | 
    
         
            +
            - lib/workon/actor/git.rb
         
     | 
| 
      
 37 
     | 
    
         
            +
            - lib/workon/actor/passenger.rb
         
     | 
| 
      
 38 
     | 
    
         
            +
            - lib/workon/actor/text_mate.rb
         
     | 
| 
      
 39 
     | 
    
         
            +
            - lib/workon/actor/watchr.rb
         
     | 
| 
      
 40 
     | 
    
         
            +
            - lib/workon/actor/web_browser.rb
         
     | 
| 
      
 41 
     | 
    
         
            +
            - lib/workon/cli.rb
         
     | 
| 
      
 42 
     | 
    
         
            +
            - lib/workon/cli/commands.rb
         
     | 
| 
      
 43 
     | 
    
         
            +
            - lib/workon/configuration.rb
         
     | 
| 
      
 44 
     | 
    
         
            +
            - lib/workon/version.rb
         
     | 
| 
      
 45 
     | 
    
         
            +
            - workon.gemspec
         
     | 
| 
      
 46 
     | 
    
         
            +
            has_rdoc: true
         
     | 
| 
      
 47 
     | 
    
         
            +
            homepage: ""
         
     | 
| 
      
 48 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 51 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            require_paths: 
         
     | 
| 
      
 54 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 55 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 56 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 57 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 58 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 59 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 60 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 61 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 62 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 63 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 64 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 65 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 66 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 67 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            rubyforge_project: workon
         
     | 
| 
      
 70 
     | 
    
         
            +
            rubygems_version: 1.5.2
         
     | 
| 
      
 71 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 72 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
      
 73 
     | 
    
         
            +
            summary: Runs actions based on directories
         
     | 
| 
      
 74 
     | 
    
         
            +
            test_files: []
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     |