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
|
+
|