heroswitch 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/PostInstall.txt ADDED
@@ -0,0 +1,3 @@
1
+
2
+ For more information on heroswitch, see http://github.com/JohnFord/heroswitch
3
+
data/README.rdoc ADDED
@@ -0,0 +1,78 @@
1
+ = heroswitch
2
+
3
+ * http://github.com/JohnFord/heroswitch
4
+
5
+ == DESCRIPTION:
6
+
7
+ Heroswitch allows you to easily switch between multiple Heroku account profiles. For example, if you have a work and a personal account, or if you have a seperate account for each client you work with, switching between account manually can be a tedious process. With just a few lines of configuration, heroswitch solves that pain.
8
+
9
+ == REQUIREMENTS:
10
+
11
+ You will need to create a credentials file in ~/.heroku for each account you wish to switch between. Name the files account_name.credentials. Example:
12
+
13
+ work.credentials file:
14
+ username@work.com
15
+ work_heroku_password
16
+
17
+ personal.credentials file:
18
+ username@gmail.com
19
+ personal_heroku_password
20
+
21
+ (Sorry about the plaintext credentials. Talk to Heroku about that!)
22
+
23
+ You will also want to setup a special ssh-config for each account in your ~/.ssh/config file. You will need a section for each account, changing the Host param to match the name of your account.
24
+
25
+ Host personal.heroku.com
26
+ HostName heroku.com
27
+ User git
28
+ IdentityFile ~/.ssh/path/to/personal/account/private_key.identity
29
+ IdentitiesOnly yes
30
+
31
+ Last, you will need to remember to use "account".heroku.com when adding heroku remotes. i.e.:
32
+
33
+ $ git remote add heroku git@personal.heroku.com:MyApp.git
34
+
35
+
36
+ == INSTALL:
37
+
38
+ The <code>heroswitch</code> application is distributed as a RubyGem and is available immediately after installation.
39
+
40
+ sudo gem install heroswitch
41
+
42
+ Alternately, download the gem and install manually.
43
+
44
+ == USAGE
45
+
46
+ Print your current credentials to the screen
47
+ $ heroswitch
48
+
49
+ Show a list of the accounts for which you've setup credentials
50
+ $ heroswitch -l
51
+
52
+ Switch to a different account profile
53
+ $ heroswitch personal
54
+
55
+ == LICENSE:
56
+
57
+ (The MIT License)
58
+
59
+ Copyright (c) 2010 John Ford
60
+
61
+ Permission is hereby granted, free of charge, to any person obtaining
62
+ a copy of this software and associated documentation files (the
63
+ 'Software'), to deal in the Software without restriction, including
64
+ without limitation the rights to use, copy, modify, merge, publish,
65
+ distribute, sublicense, and/or sell copies of the Software, and to
66
+ permit persons to whom the Software is furnished to do so, subject to
67
+ the following conditions:
68
+
69
+ The above copyright notice and this permission notice shall be
70
+ included in all copies or substantial portions of the Software.
71
+
72
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
73
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
74
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
75
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
76
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
77
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
78
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'rake' ; FileList['tasks/*.rake'].each { |file| import file }
data/bin/heroswitch ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created on 2010-8-24.
4
+ # Copyright (c) 2010. All rights reserved.
5
+
6
+ require 'rubygems'
7
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/heroswitch")
8
+ require "heroswitch/cli"
9
+
10
+ Heroswitch::CLI.execute(STDOUT, ARGV)
@@ -0,0 +1,19 @@
1
+ spec = Gem::Specification.new do |s|
2
+ s.name = 'heroswitch'
3
+ s.version = '0.0.1'
4
+ s.author = "John Ford"
5
+ s.email = "jwford@gmail.com"
6
+ s.summary = "Easily switch between multiple heroku accounts."
7
+ s.description = %{Switch between multiple Heroku accounts.}
8
+ s.files = Dir['lib/**/*.rb'] + Dir['test/**/*.rb'] + Dir['tasks/**/*.rb'] + %w[
9
+ PostInstall.txt
10
+ Rakefile
11
+ heroswitch.gemspec
12
+ README.rdoc
13
+ ]
14
+ s.require_path = 'lib'
15
+ s.autorequire = 'heroswitch'
16
+ s.has_rdoc = false
17
+ s.homepage = "http://github.com/JohnFord/heroswitch"
18
+ s.executables = ['heroswitch']
19
+ end
data/lib/heroswitch.rb ADDED
@@ -0,0 +1,8 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'heroswitch/credentials'
5
+
6
+ module Heroswitch
7
+ VERSION = '0.0.1'
8
+ end
@@ -0,0 +1,42 @@
1
+ require 'optparse'
2
+
3
+ module Heroswitch
4
+ class CLI
5
+ def self.execute(stdout, arguments=[])
6
+
7
+ parser = OptionParser.new do |opts|
8
+ opts.banner = <<-BANNER.gsub(/^ /,'')
9
+ Switch easily between multiple heroku envinments.
10
+
11
+ Usage: #{File.basename($0)} [options] [account]
12
+
13
+ Omit the account name to show the current credentials.
14
+
15
+ Options are:
16
+ BANNER
17
+ opts.separator ""
18
+ #opts.on("-l", "--list", "List accounts and exit") { options[:list_credentials] = true }
19
+ opts.on("-l", "--list", "List accounts and exit") { Heroswitch::Credentials.list_credentials; exit }
20
+ opts.on("-h", "--help", "Show this help message.") { stdout.puts opts; exit }
21
+ opts.parse!(arguments)
22
+ opts.banner = <<-BANNER.gsub(/^ /,'')
23
+ Manage multiple Heroku accounts
24
+
25
+ Usage: #{File.basename($0)} [options] [account]
26
+
27
+ Options are:
28
+ BANNER
29
+
30
+ end
31
+
32
+ account = ARGV[0]
33
+
34
+ if account
35
+ Heroswitch::Credentials.switch account
36
+ else
37
+ Heroswitch::Credentials.show_credentials
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,57 @@
1
+ require "ftools"
2
+ module Heroswitch
3
+ class Credentials
4
+ HEROKU_HOME = File.join ENV["HOME"], ".heroku"
5
+ CREDENTIALS_FILE = "credentials"
6
+
7
+ def self.show_credentials
8
+ credentials_path = File.join HEROKU_HOME, CREDENTIALS_FILE
9
+ if File.exists? credentials_path
10
+ credentials = `cat #{credentials_path}`.split "\n"
11
+ puts "\nYour active Heroku credentials are:\n\n"
12
+ puts credentials.first
13
+ puts '*' * credentials.last.size
14
+ puts "\n"
15
+ else
16
+ puts "ERROR: Heroku credentials not found!"
17
+ end
18
+ end
19
+
20
+ def self.list_credentials
21
+ puts "\nYou have credentials files for the following accounts in\n"
22
+ puts "#{HEROKU_HOME}\n\n"
23
+ Dir[HEROKU_HOME+"/*."+CREDENTIALS_FILE].each do |file|
24
+ puts " #{(File.basename file).gsub(/\.#{CREDENTIALS_FILE}/, "")}"
25
+ end
26
+ puts "\n"
27
+ end
28
+
29
+ def self.switch(account)
30
+ account_path = File.join HEROKU_HOME, account + '.' + CREDENTIALS_FILE
31
+ credentials_path = File.join HEROKU_HOME, CREDENTIALS_FILE
32
+ puts "\nSwitching to the \"#{account}\" Heroku account..."
33
+ if File.exists? account_path
34
+ File.copy(account_path, credentials_path)
35
+ print_reminder account
36
+ else
37
+ puts "ERROR: Heroku account credentials do not exist!"
38
+ end
39
+ end
40
+
41
+ def self.print_reminder(account)
42
+ puts <<-OUT.gsub(/^ /,'')
43
+
44
+ \033[31mRemember to add an entry in your ~/.ssh/config file like:\033[0m
45
+ Host \033[33m#{account}\033[0m.heroku.com
46
+ HostName heroku.com
47
+ User git
48
+ IdentityFile ~/.ssh/path/to/#{account}/account/private_key.identity
49
+ IdentitiesOnly yes
50
+
51
+ \033[31mAlso, use \033[33m#{account}.heroku.com\033[31m when setting up your heroku remote in git:\033[0m
52
+ $ git remote add heroku git@\033[33m#{account}.heroku.com\033[0m:MyApp.git
53
+
54
+ OUT
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/heroswitch'
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestHeroswitch < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+ require 'heroswitch/cli'
3
+
4
+ class TestHeroswitchCli < Test::Unit::TestCase
5
+ def setup
6
+ Heroswitch::CLI.execute(@stdout_io = StringIO.new, [])
7
+ @stdout_io.rewind
8
+ @stdout = @stdout_io.read
9
+ end
10
+
11
+ def test_truth
12
+ assert true
13
+ end
14
+
15
+ end
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: heroswitch
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - John Ford
14
+ autorequire: heroswitch
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-25 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: Switch between multiple Heroku accounts.
23
+ email: jwford@gmail.com
24
+ executables:
25
+ - heroswitch
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - lib/heroswitch/cli.rb
32
+ - lib/heroswitch/credentials.rb
33
+ - lib/heroswitch.rb
34
+ - test/test_helper.rb
35
+ - test/test_heroswitch.rb
36
+ - test/test_heroswitch_cli.rb
37
+ - PostInstall.txt
38
+ - Rakefile
39
+ - heroswitch.gemspec
40
+ - README.rdoc
41
+ - bin/heroswitch
42
+ has_rdoc: true
43
+ homepage: http://github.com/JohnFord/heroswitch
44
+ licenses: []
45
+
46
+ post_install_message:
47
+ rdoc_options: []
48
+
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ hash: 3
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ requirements: []
70
+
71
+ rubyforge_project:
72
+ rubygems_version: 1.3.7
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: Easily switch between multiple heroku accounts.
76
+ test_files: []
77
+