alternate-folder 0.2.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/README.markdown +17 -0
- data/Rakefile +13 -0
- data/VERSION +1 -0
- data/alternate-folder.gemspec +44 -0
- data/bin/af +34 -0
- data/lib/alternate-folder.rb +52 -0
- metadata +60 -0
data/README.markdown
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# alternate-folder
|
2
|
+
|
3
|
+
# Information
|
4
|
+
|
5
|
+
This is a simple program that stores local_folder => remote_server:remote_folder mappings in ~/.afrc. When it is run, it'll attempt to transfer you to your defined remote. If one doesn't exist, it'll ask for one to be created.
|
6
|
+
|
7
|
+
# Usage
|
8
|
+
|
9
|
+
## Install the gem
|
10
|
+
gem install alternate-folder
|
11
|
+
|
12
|
+
## Run it
|
13
|
+
$ af
|
14
|
+
|
15
|
+
## Change a mapping later
|
16
|
+
$ af --change
|
17
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
begin
|
2
|
+
require 'jeweler'
|
3
|
+
Jeweler::Tasks.new do |gemspec|
|
4
|
+
gemspec.name = 'alternate-folder'
|
5
|
+
gemspec.summary = 'Quickly switch to pre-defined remote folders with one command.'
|
6
|
+
gemspec.description = ''
|
7
|
+
gemspec.email = 'andy@andymoreland.com'
|
8
|
+
gemspec.homepage = 'http://github.com/AndyMoreland/alternate-folder'
|
9
|
+
gemspec.authors = ['Andy Moreland']
|
10
|
+
end
|
11
|
+
rescue LoadError
|
12
|
+
puts 'Jeweler is not installed'
|
13
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.0
|
@@ -0,0 +1,44 @@
|
|
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{alternate-folder}
|
8
|
+
s.version = "0.2.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Andy Moreland"]
|
12
|
+
s.date = %q{2010-01-16}
|
13
|
+
s.default_executable = %q{af}
|
14
|
+
s.description = %q{}
|
15
|
+
s.email = %q{andy@andymoreland.com}
|
16
|
+
s.executables = ["af"]
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"README.markdown"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
"README.markdown",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION",
|
24
|
+
"alternate-folder.gemspec",
|
25
|
+
"bin/af",
|
26
|
+
"lib/alternate-folder.rb"
|
27
|
+
]
|
28
|
+
s.homepage = %q{http://github.com/AndyMoreland/alternate-folder}
|
29
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
30
|
+
s.require_paths = ["lib"]
|
31
|
+
s.rubygems_version = %q{1.3.5}
|
32
|
+
s.summary = %q{Quickly switch to pre-defined remote folders with one command.}
|
33
|
+
|
34
|
+
if s.respond_to? :specification_version then
|
35
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
36
|
+
s.specification_version = 3
|
37
|
+
|
38
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
39
|
+
else
|
40
|
+
end
|
41
|
+
else
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
data/bin/af
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
require 'optparse'
|
3
|
+
require 'alternate-folder'
|
4
|
+
|
5
|
+
include AlternateFolder
|
6
|
+
|
7
|
+
def ask?(question)
|
8
|
+
puts question
|
9
|
+
gets.chomp
|
10
|
+
end
|
11
|
+
|
12
|
+
options = {}
|
13
|
+
|
14
|
+
optparse = OptionParser.new do |opts|
|
15
|
+
opts.banner = 'Usage: af [Options] folder'
|
16
|
+
|
17
|
+
options[:change] = false
|
18
|
+
opts.on('-c', '--change', 'Change the mapping for the given folder') { options[:change] = true }
|
19
|
+
end
|
20
|
+
|
21
|
+
optparse.parse!
|
22
|
+
|
23
|
+
target = File.expand_path(ARGV.size > 0 ? ARGV[0] : '.')
|
24
|
+
m = Mapping.find(target)
|
25
|
+
|
26
|
+
#This code is run if the mapping doesn't exist or if the user specifically asks to change the mapping
|
27
|
+
if !m || options[:change]
|
28
|
+
remote_server = ask? "Which server?"
|
29
|
+
remote_folder = ask? "Which remote folder on #{remote_server}?"
|
30
|
+
|
31
|
+
m = Mapping.update(target, Mapping.new(target,remote_folder, remote_server))
|
32
|
+
end
|
33
|
+
|
34
|
+
m.ssh if m
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module AlternateFolder
|
5
|
+
class Mapping
|
6
|
+
attr_accessor :local_folder, :remote_folder, :remote_server
|
7
|
+
|
8
|
+
def initialize(loc_folder, rem_folder, rem_server)
|
9
|
+
@local_folder, @remote_folder, @remote_server = loc_folder, rem_folder, rem_server
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.find(folder)
|
13
|
+
maps = YAML::load(File.open(File.expand_path('~/.afrc')))
|
14
|
+
if maps
|
15
|
+
maps[folder] && Mapping.new(folder, maps[folder]['remote_folder'], maps[folder]['remote_server'])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_hash
|
20
|
+
{@local_folder => {'remote_folder' => @remote_folder, 'remote_server' => @remote_server}}
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_yaml
|
24
|
+
to_hash.to_yaml.gsub(/---/, '')
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.update(target, mapping)
|
28
|
+
if Mapping.find(mapping.local_folder)
|
29
|
+
maps = YAML::load(File.open(File.expand_path('~/.afrc')))
|
30
|
+
maps.delete(target)
|
31
|
+
payload = maps.size > 0 ? maps.to_yaml.gsub(/---/, '') : ''
|
32
|
+
|
33
|
+
f = File.open(File.expand_path('~/.afrc'), 'w')
|
34
|
+
f.write(payload)
|
35
|
+
f.close
|
36
|
+
end
|
37
|
+
mapping.write
|
38
|
+
mapping
|
39
|
+
end
|
40
|
+
|
41
|
+
def write
|
42
|
+
f = File.open(File.expand_path('~/.afrc'), 'a')
|
43
|
+
f.write(self.to_yaml)
|
44
|
+
f.close
|
45
|
+
end
|
46
|
+
|
47
|
+
def ssh
|
48
|
+
puts "Connecting to #{@remote_server}:#{@remote_folder}"
|
49
|
+
exec("ssh -t #{@remote_server} 'cd #{@remote_folder} ; eval $SHELL'")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: alternate-folder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andy Moreland
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-01-16 00:00:00 -08:00
|
13
|
+
default_executable: af
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: ""
|
17
|
+
email: andy@andymoreland.com
|
18
|
+
executables:
|
19
|
+
- af
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.markdown
|
24
|
+
files:
|
25
|
+
- README.markdown
|
26
|
+
- Rakefile
|
27
|
+
- VERSION
|
28
|
+
- alternate-folder.gemspec
|
29
|
+
- bin/af
|
30
|
+
- lib/alternate-folder.rb
|
31
|
+
has_rdoc: true
|
32
|
+
homepage: http://github.com/AndyMoreland/alternate-folder
|
33
|
+
licenses: []
|
34
|
+
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options:
|
37
|
+
- --charset=UTF-8
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "0"
|
45
|
+
version:
|
46
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: "0"
|
51
|
+
version:
|
52
|
+
requirements: []
|
53
|
+
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 1.3.5
|
56
|
+
signing_key:
|
57
|
+
specification_version: 3
|
58
|
+
summary: Quickly switch to pre-defined remote folders with one command.
|
59
|
+
test_files: []
|
60
|
+
|