go 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +42 -0
- data/iterm_rails.gemspec +35 -0
- data/iterm_rails.rb +1 -0
- data/lib/iterm_rails.rb +130 -0
- metadata +66 -0
data/README.markdown
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
GO - Iterm-Rails
|
2
|
+
===================
|
3
|
+
|
4
|
+
A script to launch commands in differents iTerm tabs for a Rails project: console, server, mate...
|
5
|
+
inspired by http://github.com/chrisjpowers/iterm_window examples
|
6
|
+
|
7
|
+
Examples:
|
8
|
+
--------------
|
9
|
+
|
10
|
+
iterm-rails /path/to/project
|
11
|
+
|
12
|
+
iterm-rails project # you can set a default project directory (see configuration options below)
|
13
|
+
|
14
|
+
|
15
|
+
Configuration:
|
16
|
+
--------------
|
17
|
+
You can override default configuration options:
|
18
|
+
|
19
|
+
- globally in ~/.iterm-rails.config
|
20
|
+
|
21
|
+
- per project in project/.iterm-rails.config
|
22
|
+
|
23
|
+
|
24
|
+
Configuration options in DEFAULT_CONFIG:
|
25
|
+
----------------------------------------
|
26
|
+
|
27
|
+
DEFAULT_CONFIG = {
|
28
|
+
:projects_dir => Dir.getwd,
|
29
|
+
:launch_server => true,
|
30
|
+
:launch_console => true,
|
31
|
+
:launch_spork_for_rspec => false,
|
32
|
+
:launch_spork_for_cuc => false,
|
33
|
+
:rails3 => false,
|
34
|
+
:prepend_command => nil, # example: 'rvm ruby-1.9.2-head'
|
35
|
+
}
|
36
|
+
|
37
|
+
Author
|
38
|
+
------
|
39
|
+
|
40
|
+
- Florent Guilleux (Author): github.com/Florent2 | florent2 AT gmail DOT com
|
41
|
+
|
42
|
+
- Alvaro Pereyra (Contributor): github.com/xenda | alvaro AT xendacentral DOT com
|
data/iterm_rails.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env gem build
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require "base64"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "go"
|
8
|
+
s.version = "0.0.1"
|
9
|
+
s.authors = ["Florent Guilleux", "Alvaro Pereyra"]
|
10
|
+
s.homepage = "http://github.com/xenda/iterm-rails"
|
11
|
+
s.summary = "A script to launch commands in differents iTerm tabs for a Rails project"
|
12
|
+
s.description = "#{s.summary}. inspired by http://github.com/chrisjpowers/iterm_window examples."
|
13
|
+
s.cert_chain = nil
|
14
|
+
s.email = Base64.decode64("YWx2YXJvQHhlbmRhY2VudHJhbC5jb20=\n")
|
15
|
+
s.has_rdoc = false
|
16
|
+
|
17
|
+
# files
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
|
20
|
+
Dir["bin/*"].map(&File.method(:basename))
|
21
|
+
s.default_executable = "go"
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
|
24
|
+
# Ruby version
|
25
|
+
s.required_ruby_version = ::Gem::Requirement.new("~> 1.9")
|
26
|
+
|
27
|
+
begin
|
28
|
+
require "changelog"
|
29
|
+
rescue LoadError
|
30
|
+
warn "You have to have changelog gem installed for post install message"
|
31
|
+
else
|
32
|
+
s.post_install_message = CHANGELOG.new.version_changes
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
data/iterm_rails.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "iterm_rails"
|
data/lib/iterm_rails.rb
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# a script to launch commands in differents iTerm tabs for a Rails project: console, server, mate...
|
4
|
+
# inspired by http://github.com/chrisjpowers/iterm_window examples
|
5
|
+
|
6
|
+
# examples:
|
7
|
+
# iterm-rails /path/to/project
|
8
|
+
# iterm-rails project # you can set a default project directory (see configuration options below)
|
9
|
+
|
10
|
+
# you can override default configuration options:
|
11
|
+
# globally in ~/.iterm-rails.config
|
12
|
+
# per project in project/.iterm-rails.config
|
13
|
+
# see configuration options in DEFAULT_CONFIG below
|
14
|
+
|
15
|
+
|
16
|
+
require 'rubygems'
|
17
|
+
require 'iterm_window'
|
18
|
+
require 'pathname'
|
19
|
+
require 'yaml'
|
20
|
+
require 'socket'
|
21
|
+
require 'timeout'
|
22
|
+
|
23
|
+
module ItermRails
|
24
|
+
|
25
|
+
DEFAULT_CONFIG = {
|
26
|
+
:projects_dir => Dir.getwd,
|
27
|
+
:launch_server => true,
|
28
|
+
:launch_console => true,
|
29
|
+
:launch_spork_for_rspec => false,
|
30
|
+
:launch_spork_for_cuc => false,
|
31
|
+
:rails3 => false,
|
32
|
+
:prepend_command => nil, # example: 'rvm ruby-1.9.2-head'
|
33
|
+
}
|
34
|
+
|
35
|
+
def create_tab(project_path, *commands)
|
36
|
+
project_name = project_path.basename
|
37
|
+
open_tab :new_tab do
|
38
|
+
write "cd #{project_path}"
|
39
|
+
set_title "- #{project_name}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def find_available_port_from(port_number)
|
44
|
+
result = port_number
|
45
|
+
result += 1 while is_port_open?(result)
|
46
|
+
result
|
47
|
+
end
|
48
|
+
|
49
|
+
def is_a_rails_project_directory?(project_path)
|
50
|
+
%w{app config db script}.all? { |directory| project_path.join(directory).exist? }
|
51
|
+
end
|
52
|
+
|
53
|
+
# from http://stackoverflow.com/questions/517219/ruby-see-if-a-port-is-open
|
54
|
+
def is_port_open?(port_number)
|
55
|
+
begin
|
56
|
+
Timeout::timeout(1) do
|
57
|
+
begin
|
58
|
+
s = TCPSocket.new('localhost', port_number)
|
59
|
+
s.close
|
60
|
+
return true
|
61
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
62
|
+
return false
|
63
|
+
end
|
64
|
+
end
|
65
|
+
rescue Timeout::Error
|
66
|
+
end
|
67
|
+
|
68
|
+
return false
|
69
|
+
end
|
70
|
+
|
71
|
+
def merge_configs(config, custom_config_file_path)
|
72
|
+
if custom_config_file_path.exist?
|
73
|
+
config.merge YAML::load(File.open custom_config_file_path)
|
74
|
+
else
|
75
|
+
config
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
config = merge_configs DEFAULT_CONFIG, Pathname.new('~').expand_path.join('.iterm-rails.config')
|
80
|
+
|
81
|
+
raise "missing project path" if ARGV.first.nil?
|
82
|
+
project_path = Pathname.new ARGV.first
|
83
|
+
project_path = Pathname.new(config[:projects_dir]).join(project_path) if project_path.relative?
|
84
|
+
project_path = project_path.expand_path
|
85
|
+
raise "'#{project_path}' does not exist or is not a directory" if !project_path.directory?
|
86
|
+
raise "'#{project_path}' is not a Rails project directory" if !is_a_rails_project_directory?(project_path)
|
87
|
+
config = merge_configs config, project_path.join('.iterm-rails.config')
|
88
|
+
|
89
|
+
puts "open new window with tabs for '#{project_path}'"
|
90
|
+
puts " with config: #{config.inspect}"
|
91
|
+
|
92
|
+
Tab = Struct.new :title, :commands
|
93
|
+
tabs = []
|
94
|
+
|
95
|
+
if config[:launch_spork_for_rspec]
|
96
|
+
port = find_available_port_from 8989
|
97
|
+
tabs << Tab.new("spork #{port}", ["spork -p #{port}"])
|
98
|
+
end
|
99
|
+
|
100
|
+
if config[:launch_spork_for_cuc]
|
101
|
+
port = find_available_port_from 9989
|
102
|
+
tabs << Tab.new("spork cuc #{port}", ["spork cuc -p #{port}"])
|
103
|
+
end
|
104
|
+
|
105
|
+
if config[:launch_console]
|
106
|
+
command = if config[:rails3] then "rails console" else "script/console" end
|
107
|
+
tabs << Tab.new("console", [command])
|
108
|
+
end
|
109
|
+
|
110
|
+
tabs << Tab.new("main", ["mate ./ &"])
|
111
|
+
|
112
|
+
if config[:launch_console]
|
113
|
+
port = find_available_port_from 3000
|
114
|
+
command = if config[:rails3] then "rails server" else "script/server" end
|
115
|
+
tabs << Tab.new("server #{port}", ["#{command} -p #{port}"])
|
116
|
+
end
|
117
|
+
|
118
|
+
ItermWindow.open do
|
119
|
+
project_name = project_path.basename
|
120
|
+
tabs.each do |tab|
|
121
|
+
open_tab :new_tab do
|
122
|
+
write "cd #{project_path}"
|
123
|
+
write config[:prepend_command] unless config[:prepend_command] == "nil" || config[:prepend_command].empty?
|
124
|
+
tab.commands.each { |command| write command }
|
125
|
+
set_title "#{tab.title} - #{project_name}"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: go
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Florent Guilleux
|
13
|
+
- Alvaro Pereyra
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain:
|
17
|
+
date: 2010-04-13 00:00:00 -05:00
|
18
|
+
default_executable: go
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: A script to launch commands in differents iTerm tabs for a Rails project. inspired by http://github.com/chrisjpowers/iterm_window examples.
|
22
|
+
email: alvaro@xendacentral.com
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- README.markdown
|
31
|
+
- iterm_rails.gemspec
|
32
|
+
- iterm_rails.rb
|
33
|
+
- lib/iterm_rails.rb
|
34
|
+
has_rdoc: true
|
35
|
+
homepage: http://github.com/xenda/iterm-rails
|
36
|
+
licenses: []
|
37
|
+
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options: []
|
40
|
+
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
segments:
|
48
|
+
- 1
|
49
|
+
- 9
|
50
|
+
version: "1.9"
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
58
|
+
requirements: []
|
59
|
+
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 1.3.6
|
62
|
+
signing_key:
|
63
|
+
specification_version: 3
|
64
|
+
summary: A script to launch commands in differents iTerm tabs for a Rails project
|
65
|
+
test_files: []
|
66
|
+
|