wire-edit 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/wired +9 -0
  2. data/lib/wire-edit.rb +65 -0
  3. metadata +49 -0
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ require 'wire-edit'
3
+
4
+ # parse arguments
5
+ # ssh args: [user@]server-name:/directory[/]
6
+ WireEdit.new ARGV[0] # the only argument right now
7
+
8
+
9
+
@@ -0,0 +1,65 @@
1
+ require 'fileutils'
2
+ require 'rb-fsevent'
3
+
4
+ # cases:
5
+ # user@server w/ password, w/o password. server w/password, w/o password.
6
+ # pass it a file. pass it a directory.
7
+ # file exists, doesn't exist. directory exists, doesn't exist.
8
+ # absolute path vs relative path
9
+ # prefixed w home dir ~
10
+ class WireEdit
11
+ attr_accessor :user, :server_name, :remote_dir, :ssh_cmd
12
+
13
+ def initialize ssh_opt
14
+ @m = /(?<ssh_cmd>((?<user>.*)@)?(?<server_name>.*)):(?<remote_dir>.*)/.match(ssh_opt)
15
+ flunk("require the ssh parameter!") unless @m
16
+ [:user, :server_name, :remote_dir, :ssh_cmd].each { |attr| self.send("#{attr}=", @m[attr]) }
17
+
18
+ FileUtils.mkdir_p local_path
19
+
20
+ download
21
+ edit
22
+ fsevent = FSEvent.new
23
+ puts "Watching #{local_path}"
24
+ fsevent.watch(local_path) do |dirs|
25
+ puts "Upload changes from: #{dirs.join(' ')}"
26
+ upload
27
+ end
28
+ fsevent.run
29
+ end
30
+
31
+ def download
32
+ puts 'Downloading...'
33
+ # dl = @sftp.download!(remote_dir, local_path, :recursive => true)
34
+ puts %x{ rsync -avz #{ssh_cmd}:#{remote_dir} #{File.dirname(local_path)} }
35
+ end
36
+
37
+ def upload
38
+ # @sftp.upload!(local_path, File.dirname(remote_dir))
39
+ puts %x{ rsync -avz #{local_path} #{ssh_cmd}:#{File.dirname(remote_dir)} }
40
+ end
41
+
42
+ # def read_ssh_config
43
+ # config = Net::SSH.configuration_for(server_name)
44
+ # flunk("No user specified and no ~/.ssh/config entry for the server name.") if config.empty?
45
+ # self.user = config[:user]
46
+ # self.server_name = config[:host_name]
47
+ # end
48
+
49
+ def edit
50
+ %x{ mate #{local_path} }
51
+ end
52
+
53
+ def servername_dir
54
+ @local_dir ||= (user ? (user + '-') : '') + server_name
55
+ end
56
+
57
+ def local_path
58
+ "/tmp/wire-edit/#{servername_dir}/#{remote_dir}"
59
+ end
60
+
61
+ def flunk(msg)
62
+ STDERR << msg << "\n"
63
+ exit 1
64
+ end
65
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wire-edit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Duke Jones
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-19 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Edit files on a server in TextMate and they are uploaded back to the
15
+ server automatically!
16
+ email: dukeofjones@gmail.com
17
+ executables:
18
+ - wired
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - lib/wire-edit.rb
23
+ - bin/wired
24
+ homepage: ''
25
+ licenses: []
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 1.8.18
45
+ signing_key:
46
+ specification_version: 3
47
+ summary: Edit files on a server in TextMate and they are uploaded back to the server
48
+ automatically!
49
+ test_files: []