guard-flopbox 1.1 → 1.3
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/guard-flopbox.gemspec +1 -1
- data/lib/guard/flopbox.rb +93 -0
- data/lib/guard/flopbox/templates/Guardfile +16 -0
- metadata +3 -1
data/guard-flopbox.gemspec
CHANGED
@@ -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.
|
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.
|
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: []
|