guard-flopbox 1.1 → 1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "guard-flopbox"
6
- s.version = 1.1
6
+ s.version = 1.3
7
7
  s.authors = ["Vincent Chu"]
8
8
  s.email = ["vincentchu at gmail dot com"]
9
9
  s.homepage = "http://github.com/vincentchu/guard-flopbox"
@@ -0,0 +1,93 @@
1
+ require 'net/sftp'
2
+ require 'growl'
3
+ require 'guard'
4
+ require 'guard/guard'
5
+
6
+ module Guard
7
+ class Flopbox < Guard
8
+
9
+ attr_reader :sftp_session, :remote, :pwd, :growl_image
10
+
11
+ def initialize(watchers = [], options = {})
12
+ @sftp_session = Net::SFTP.start(options[:hostname], options[:user], options[:sftp_opts])
13
+ @remote = options[:remote]
14
+ @debug = options[:debug]
15
+ @growl = options[:growl]
16
+ @growl_image = options[:growl_image]
17
+ @pwd = Dir.pwd
18
+
19
+ log "Initialized with watchers = #{watchers.inspect}"
20
+ log "Initialized with options = #{options.inspect}"
21
+
22
+ super
23
+ end
24
+
25
+ def run_on_change(paths)
26
+ paths.each do |path|
27
+ local_file = File.join(pwd, path)
28
+ remote_file = File.join(remote, path)
29
+
30
+ attempts = 0
31
+ begin
32
+ log "Upload #{local_file} => #{remote_file}"
33
+ sftp_session.upload!(local_file, remote_file)
34
+
35
+ rescue Net::SFTP::StatusException => ex
36
+ log "Exception on upload #{path} - directory likely doesn't exist"
37
+
38
+ attempts += 1
39
+ remote_dir = File.dirname(remote_file)
40
+ recursively_create_dirs( remote_dir )
41
+
42
+ retry if (attempts < 3)
43
+ log "Exceeded 3 attempts to upload #{path}"
44
+ end
45
+
46
+ growl("Synced:\n#{paths.join("\n")}")
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def growl?
53
+ @growl || false
54
+ end
55
+
56
+ def debug?
57
+ @debug || false
58
+ end
59
+
60
+ def growl(mesg)
61
+ return unless growl?
62
+
63
+ growl_opts = {
64
+ :name => "flopbox",
65
+ :title => "Flopbox: #{File.basename(pwd)}",
66
+ :message => mesg,
67
+ :image => growl_image
68
+ }
69
+
70
+ Growl::Base.new(growl_opts).run
71
+ end
72
+
73
+ def log(mesg)
74
+ return unless debug?
75
+
76
+ puts "[#{Time.now}] #{mesg}"
77
+ end
78
+
79
+ def recursively_create_dirs(remote_dir)
80
+ new_dir = remote
81
+ remote_dir.gsub(remote, "").split("/").each do |dir|
82
+
83
+ new_dir = File.join(new_dir, dir)
84
+
85
+ begin
86
+ log "Creating #{new_dir}"
87
+ sftp_session.mkdir!(new_dir)
88
+ rescue Net::SFTP::StatusException => ex
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,16 @@
1
+
2
+ # Configuration Options for guard-flopbox
3
+ opts = {
4
+ :hostname => "postercloud.com", # remote host
5
+ :user => "capuser", # remote user
6
+ :sftp_opts => {}, # options passed to Net::SFTP
7
+ :remote => "/home/capuser/test", # remote directory
8
+ :debug => true, # output debug information
9
+ :growl => true # growl on completion
10
+ }
11
+
12
+ group 'flopbox' do
13
+ guard 'flopbox', opts do
14
+ watch(/.*/)
15
+ end
16
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: guard-flopbox
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: "1.1"
5
+ version: "1.3"
6
6
  platform: ruby
7
7
  authors:
8
8
  - Vincent Chu
@@ -29,6 +29,8 @@ files:
29
29
  - README.md
30
30
  - Rakefile
31
31
  - guard-flopbox.gemspec
32
+ - lib/guard/flopbox.rb
33
+ - lib/guard/flopbox/templates/Guardfile
32
34
  has_rdoc: true
33
35
  homepage: http://github.com/vincentchu/guard-flopbox
34
36
  licenses: []