caravan 0.4.0 → 0.5.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3056289441f97341f8e54ae2e285dbf7720e0d64
4
- data.tar.gz: a65424290ac39ba323ba1608366cd206f2d68c32
3
+ metadata.gz: ba029c54b538361378d648eb8e1bd8cc78079a1b
4
+ data.tar.gz: cc59b3a03e11ae33e636aa4feac5261c5a239de8
5
5
  SHA512:
6
- metadata.gz: b6879a9ce50b92bc462c22f02133416d892c962c9c3d1aed742c48adf28c57e8794aa169ec1b82a6e11266f7ef1e4dfa5200b6af09f50996ab3b7d0156d08dfe
7
- data.tar.gz: 495b3c418566110b17ffecdfa8052a29e1c035a3949da42117e5feb2d7d7c3376b8d0bd426ca34bc2a952b191025e4447335c1474d033361a9088c534083ce7d
6
+ metadata.gz: 6425491bd500a8ce5d21362b8d01667a317d15a9f61772c8f70b09341605049dae897d13058545b9f1600ad8ad93c059438adef9ec131b9ebd05abe6f3ac197d
7
+ data.tar.gz: 4350a3578c5c0bfdfe99763f5a0c6d34ba04cc255c3b8619bf68bb5db721477f536df68c7b4a5a939915ee0d686f687592b31a2a997e655484b13d05884024cf
data/.codeclimate.yml CHANGED
@@ -1,10 +1,7 @@
1
1
  ---
2
2
  engines:
3
3
  duplication:
4
- enabled: true
5
- config:
6
- languages:
7
- - ruby
4
+ enabled: false
8
5
  fixme:
9
6
  enabled: true
10
7
  rubocop:
data/.travis.yml CHANGED
@@ -2,6 +2,7 @@ language: ruby
2
2
  cache: bundler
3
3
  rvm:
4
4
  - 2.3.0
5
+ - 2.4.0
5
6
  after_success:
6
7
  - CODECLIMATE_REPO_TOKEN=b72ccd136db6874a3d5dd842c50c1dc0933a1f49a02c55ce8567ec7311600af3 bundle exec codeclimate-test-reporter
7
8
  notifications:
data/README.md CHANGED
@@ -60,7 +60,12 @@ exclude:
60
60
  - [x] Exclude watching unwanted files
61
61
  - [x] `caravan.yml` for project-specialized configuration
62
62
  - [ ] Watch and deploy only the changed file instead of the whole folder
63
- - [ ] Callbacks for deployment
63
+ - [x] Callbacks for deployment
64
+ - [x] `after_create`
65
+ - [x] `after_change`
66
+ - [x] `before_deploy`
67
+ - [x] `after_deploy`
68
+ - [x] `before_destroy`
64
69
  - [ ] Multiple deployment configurations
65
70
 
66
71
  ## LICENSE
data/caravan.gemspec CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["David Zhang"]
10
10
  spec.email = ["crispgm@gmail.com"]
11
11
 
12
- spec.summary = %q{Simple watcher and deployer}
13
- spec.description = %q{Caravan is a simple file watcher and deployer for local development.}
12
+ spec.summary = %q{Simple project files watcher and deployer}
13
+ spec.description = %q{Caravan is a simple file watcher and deployer of project files for local development.}
14
14
  spec.homepage = "https://crispgm.github.io/caravan/"
15
15
  spec.license = "MIT"
16
16
 
@@ -3,42 +3,132 @@ require "colorize"
3
3
  module Caravan
4
4
  module Deploy
5
5
  class << self
6
- def create_deployer(method = "shell")
6
+ def create_deployer(src, dst, method = "shell")
7
7
  case method
8
8
  when "shell"
9
- return Caravan::DeployMethods::Shell.new
9
+ Caravan::DeployMethods::Shell.new(src, dst)
10
10
  when "scp"
11
- return Caravan::DeployMethods::Scp.new
11
+ Caravan::DeployMethods::Scp.new(src, dst)
12
12
  when "rsync"
13
- return Caravan::DeployMethods::Rsync.new
13
+ Caravan::DeployMethods::Rsync.new(src, dst)
14
14
  when "rsync_local"
15
- return Caravan::DeployMethods::RsyncLocal.new
15
+ Caravan::DeployMethods::RsyncLocal.new(src, dst)
16
16
  else
17
17
  Message.error("Unknown deploy method \"#{method}\"")
18
- return nil
18
+ nil
19
19
  end
20
20
  end
21
21
  end
22
22
 
23
23
  class Base
24
24
  attr_accessor :debug
25
+ attr_reader :src, :dst
25
26
 
26
- def initialize
27
+ def initialize(src, dst)
27
28
  Message.info("Creating #{self.class.name}...")
29
+ @src = src
30
+ @dst = dst
28
31
  @debug = false
29
32
  end
30
33
 
31
- def run(src, dst)
34
+ def handle_change(modified, added, removed)
35
+ @modified = modified
36
+ @added = added
37
+ @removed = removed
38
+
39
+ after_change
40
+ end
41
+
42
+ def after_create
43
+ Message.info("#{self.class.name} is created.")
44
+
45
+ if block_given?
46
+ ret_val = yield
47
+ debug_msg("Block `after_create` returned #{ret_val}")
48
+ false if ret_val == false
49
+ end
50
+
51
+ true
52
+ end
53
+
54
+ def after_change
55
+ @modified.each do |change|
56
+ Caravan::Message.info("#{change} was changed.")
57
+ end
58
+
59
+ @added.each do |change|
60
+ Caravan::Message.info("#{change} was created.")
61
+ end
62
+
63
+ @removed.each do |change|
64
+ Caravan::Message.info("#{change} was removed.")
65
+ end
66
+
67
+ if block_given?
68
+ ret_val = yield @modified, @added, @removed
69
+ debug_msg("Block `after_change` returned #{ret_val}")
70
+ false if ret_val == false
71
+ end
72
+
73
+ true
74
+ end
75
+
76
+ def before_deploy
77
+ if block_given?
78
+ ret_val = yield
79
+ debug_msg("Block `before_deploy` returned #{ret_val}")
80
+ false if ret_val == false
81
+ end
82
+
83
+ true
84
+ end
85
+
86
+ def run
32
87
  time_str = Time.now.strftime("%H:%M:%S").green
33
88
  Message.info("#{time_str} Deploying #{src} to #{dst}...")
34
89
 
35
90
  status = 0
36
91
  if block_given?
37
92
  status, output = yield src, dst
93
+ debug_msg("Block `run` returned #{status}")
94
+ end
95
+
96
+ Message.error("Deploying block returned false") unless status == 0
97
+ status
98
+ end
99
+
100
+ def after_deploy
101
+ if block_given?
102
+ ret_val = yield
103
+ debug_msg("Block `after_deploy` returned #{ret_val}")
104
+ false if ret_val == false
105
+ end
106
+
107
+ true
108
+ end
109
+
110
+ def before_destroy
111
+ if block_given?
112
+ ret_val = yield
113
+ debug_msg("Block `before_destroy` returned #{ret_val}")
114
+ false if ret_val == false
38
115
  end
39
116
 
40
- Message.error("deploying block returned false") unless status == 0
41
- return status
117
+ true
118
+ end
119
+
120
+ def relative_path(path)
121
+ working_dir = Dir.pwd
122
+ path_routes = path.split(working_dir)
123
+ return nil if path_routes.nil? || path_routes.empty? || path_routes.size < 2
124
+
125
+ path_routes[-1]
126
+ end
127
+
128
+ private
129
+
130
+ def debug_msg(msg)
131
+ Caravan::Message.debug(msg) if @debug
42
132
  end
43
133
  end
44
134
  end
@@ -3,8 +3,8 @@ require "caravan/deploy"
3
3
  module Caravan
4
4
  module DeployMethods
5
5
  class Rsync < Deploy::Base
6
- def run(src, dst)
7
- super(src, dst) do |s, d|
6
+ def run
7
+ super do |s, d|
8
8
  Caravan::Command.run("rsync -avl #{s} #{d}", @debug)
9
9
  end
10
10
  end
@@ -3,8 +3,8 @@ require "caravan/deploy"
3
3
  module Caravan
4
4
  module DeployMethods
5
5
  class RsyncLocal < Deploy::Base
6
- def run(src, dst)
7
- super(src, dst) do |s, d|
6
+ def run
7
+ super do |s, d|
8
8
  Caravan::Command.run("rsync -rv #{s} #{d}", @debug)
9
9
  end
10
10
  end
@@ -3,8 +3,8 @@ require "caravan/deploy"
3
3
  module Caravan
4
4
  module DeployMethods
5
5
  class Scp < Deploy::Base
6
- def run(src, dst)
7
- super(src, dst) do |s, d|
6
+ def run
7
+ super do |s, d|
8
8
  Caravan::Command.run("scp -r #{s} #{d}", @debug)
9
9
  end
10
10
  end
@@ -1,11 +1,35 @@
1
1
  module Caravan
2
2
  module DeployMethods
3
3
  class Shell < Caravan::Deploy::Base
4
- def run(src, dst)
5
- super(src, dst) do |s, d|
4
+ def after_create
5
+ super do
6
+ Caravan::Message.info("Notice: Shell Deployer is like copy, mainly designed for test.")
7
+ end
8
+ end
9
+
10
+ def before_deploy
11
+ super do
12
+ Caravan::Message.info("Hook: before_deploy")
13
+ end
14
+ end
15
+
16
+ def run
17
+ super do |s, d|
6
18
  Caravan::Command.run("cp -r #{s} #{d}", @debug)
7
19
  end
8
20
  end
21
+
22
+ def after_deploy
23
+ super do
24
+ Caravan::Message.info("Hook: after_deploy")
25
+ end
26
+ end
27
+
28
+ def before_destroy
29
+ super do
30
+ Caravan::Message.info("Deployer destroyed")
31
+ end
32
+ end
9
33
  end
10
34
  end
11
35
  end
@@ -1,3 +1,3 @@
1
1
  module Caravan
2
- VERSION = "0.4.0".freeze
2
+ VERSION = "0.5.0.alpha1".freeze
3
3
  end
data/lib/caravan.rb CHANGED
@@ -24,39 +24,36 @@ module Caravan
24
24
 
25
25
  Caravan::Config.pretty_puts(merged_conf)
26
26
 
27
- deployer = Caravan::Deploy.create_deployer(deploy_mode)
27
+ deployer = Caravan::Deploy.create_deployer(src_path, target_path, deploy_mode)
28
28
  deployer.debug = true if debug
29
- if deployer.nil?
30
- exit -1
31
- end
29
+ exit(-1) if deployer.nil?
32
30
 
33
- listener = create_listener(deployer, src_path, target_path)
31
+ listener = create_listener(deployer, src_path)
34
32
  ignores.each do |item|
35
33
  listener.ignore(Regexp.compile(item))
36
34
  end
37
35
 
38
36
  Caravan::Message.success("Starting to watch #{src_path}...")
39
- deployer.run(src_path, target_path)
37
+ deployer.after_create
40
38
  listener.start
41
39
 
42
40
  trap("INT") do
43
41
  listener.stop
42
+ deployer.before_destroy
44
43
  Caravan::Message.success("\tHalting watching.")
45
- exit 0
44
+ exit(0)
46
45
  end
47
46
 
48
47
  sleep_forever
49
48
  end
50
49
 
51
- def create_listener(deployer, src_path, target_path)
50
+ def create_listener(deployer, src_path)
52
51
  Listen.to(src_path) do |modified, added, removed|
53
- unless (modified.empty? && added.empty? && removed.empty?)
54
- (added + modified + removed).each do |change|
55
- Caravan::Message.info("#{change} was changed.")
56
- end
57
-
58
- deployer.run(src_path, target_path)
59
- end
52
+ # rubocop:disable Lint/NonLocalExitFromIterator
53
+ return unless deployer.handle_change(modified, added, removed)
54
+ return unless deployer.before_deploy
55
+ deployer.run
56
+ deployer.after_deploy
60
57
  end
61
58
  end
62
59
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caravan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0.alpha1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Zhang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-08 00:00:00.000000000 Z
11
+ date: 2017-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: listen
@@ -108,7 +108,8 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 1.0.0
111
- description: Caravan is a simple file watcher and deployer for local development.
111
+ description: Caravan is a simple file watcher and deployer of project files for local
112
+ development.
112
113
  email:
113
114
  - crispgm@gmail.com
114
115
  executables:
@@ -152,13 +153,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
152
153
  version: '0'
153
154
  required_rubygems_version: !ruby/object:Gem::Requirement
154
155
  requirements:
155
- - - ">="
156
+ - - ">"
156
157
  - !ruby/object:Gem::Version
157
- version: '0'
158
+ version: 1.3.1
158
159
  requirements: []
159
160
  rubyforge_project:
160
161
  rubygems_version: 2.6.11
161
162
  signing_key:
162
163
  specification_version: 4
163
- summary: Simple watcher and deployer
164
+ summary: Simple project files watcher and deployer
164
165
  test_files: []