wordmove 4.0.2.pre4 → 5.0.0.dev

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
- SHA1:
3
- metadata.gz: 61b90175b9da178c8ec673d6293e94d48d0cd8df
4
- data.tar.gz: 876fcfbc6578c22be82f8ab6983e583d70070902
2
+ SHA256:
3
+ metadata.gz: 1e6f34b9e96b87aa9b75b8f7638ab4a6f333276a8e190c91e48381f502af8415
4
+ data.tar.gz: 34a8960d6361f277ecf5245d52c4b3dcc50c6431074135a5900eb30c21689aba
5
5
  SHA512:
6
- metadata.gz: eebd3a034fb434fc4dc271fdfd5cef8c5e14a342ad986912835cf40cbb1824ca0dd426640039c02ba332c248afc0adae4a5aa7b85ca421a2e19ff6d446e3756f
7
- data.tar.gz: 6c4b035978bf61b95cdba46118ffede8ee639a9e6f184d14d829248433c83d45d993df924d1b6f6e06b8ef827cf7c220bd4d74a1f40b3992cc9c1b3ed30d483f
6
+ metadata.gz: d058c3fc18fae2a29d5b0ae7f5a86e1e5922ee10bdb9067db92ef18d56b940bdb51142806362086e927dc55420ca6fe31821ba5fc412cd72b0f7f2bcf7641ae8
7
+ data.tar.gz: cb0751f039fa0d3aad7fd939865d1b14ba43c5528b49ad4aaed3cb633f3da80dd7bcaaa1719a88f4de7fa42ca333056b64ab05c95ac62ad3e7595fb6d3448a1b
data/.rubocop.yml CHANGED
@@ -1,11 +1,5 @@
1
- Rails:
2
- Enabled: false
3
-
4
- Rails/Output:
5
- Enabled: false
6
-
7
1
  AllCops:
8
- TargetRubyVersion: 2.4
2
+ TargetRubyVersion: 2.6
9
3
  DisplayCopNames: true
10
4
  DisplayStyleGuide: true
11
5
 
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.4.1
1
+ 2.6.5
data/.travis.yml CHANGED
@@ -1,9 +1,7 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 2.4.0
5
- - 2.4.3
6
- - 2.5.0
4
+ - 2.6.5
7
5
 
8
6
  cache: bundler
9
7
 
@@ -23,4 +21,4 @@ deploy:
23
21
  on:
24
22
  tags: true
25
23
  branch: master
26
- ruby: '2.5.0'
24
+ ruby: '2.6.5'
data/README.mdown CHANGED
@@ -50,6 +50,7 @@ Commands:
50
50
  wordmove doctor # Do some local configuration and environment checks
51
51
  wordmove help [TASK] # Describe available tasks or one specific task
52
52
  wordmove init # Generates a brand new movefile.yml
53
+ wordmove list # List all environments and vhosts
53
54
  wordmove pull # Pulls WP data from remote host to the local machine
54
55
  wordmove push # Pushes WP data from local machine to remote host
55
56
  ```
@@ -121,29 +122,23 @@ production:
121
122
  host: host
122
123
  user: user
123
124
 
124
- # hooks: # Remote hooks won't work with FTP
125
- # push:
126
- # before:
127
- # local:
128
- # - 'echo "Do something locally before push"'
129
- # remote:
130
- # - 'echo "Do something remotely before push"'
131
- # after:
132
- # local:
133
- # - 'echo "Do something locally after push"'
134
- # remote:
135
- # - 'echo "Do something remotely after push"'
136
- # pull:
137
- # before:
138
- # local:
139
- # - 'echo "Do something locally before pull"'
140
- # remote:
141
- # - 'echo "Do something remotely before pull"'
142
- # after:
143
- # local:
144
- # - 'echo "Do something locally after pull"'
145
- # remote:
146
- # - 'echo "Do something remotely after pull"'
125
+ # hooks: # Remote hooks won't work with FTP
126
+ # push:
127
+ # before:
128
+ # - command: 'echo "do something"'
129
+ # where: local
130
+ # raise: false # raise is true by default
131
+ # after:
132
+ # - command: 'echo "do something"'
133
+ # where: remote
134
+ # pull:
135
+ # before:
136
+ # - command: 'echo "do something"'
137
+ # where: local
138
+ # raise: false
139
+ # after:
140
+ # - command: 'echo "do something"'
141
+ # where: remote
147
142
  ```
148
143
 
149
144
  **We warmly recommend to read the wiki article [Multiple environments explained
@@ -321,4 +316,3 @@ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
321
316
  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
322
317
  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
323
318
  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
324
-
data/exe/wordmove CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
+ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
4
4
 
5
5
  require 'wordmove'
6
6
  Wordmove::CLI.start
data/lib/wordmove.rb CHANGED
@@ -31,6 +31,7 @@ require 'wordmove/sql_adapter/default'
31
31
  require 'wordmove/sql_adapter/wpcli'
32
32
  require 'wordmove/wordpress_directory'
33
33
  require "wordmove/version"
34
+ require "wordmove/environments_list"
34
35
 
35
36
  require 'wordmove/generators/movefile_adapter'
36
37
  require 'wordmove/generators/movefile'
@@ -87,52 +87,65 @@ mapping:
87
87
  type: map
88
88
  mapping:
89
89
  before:
90
- type: map
91
- mapping:
92
- local:
93
- type: seq
94
- sequence:
95
- - type: str
96
- remote:
97
- type: seq
98
- sequence:
99
- - type: str
90
+ type: seq
91
+ sequence:
92
+ - type: map
93
+ mapping:
94
+ command:
95
+ type: str
96
+ required: true
97
+ where:
98
+ type: str
99
+ required: true
100
+ pattern: /\Alocal\Z|\Aremote\Z/
101
+ raise:
102
+ type: bool
100
103
  after:
101
- type: map
102
- mapping:
103
- local:
104
- type: seq
105
- sequence:
106
- - type: str
107
- remote:
108
- type: seq
109
- sequence:
110
- - type: str
104
+ type: seq
105
+ sequence:
106
+ - type: map
107
+ mapping:
108
+ command:
109
+ type: str
110
+ required: true
111
+ where:
112
+ type: str
113
+ required: true
114
+ pattern: /\Alocal\Z|\Aremote\Z/
115
+ raise:
116
+ type: bool
111
117
  pull:
112
118
  type: map
113
119
  mapping:
114
120
  before:
115
- type: map
116
- mapping:
117
- local:
118
- type: seq
119
- sequence:
120
- - type: str
121
- remote:
122
- type: seq
123
- sequence:
124
- - type: str
121
+ type: seq
122
+ sequence:
123
+ - type: map
124
+ mapping:
125
+ command:
126
+ type: str
127
+ required: true
128
+ where:
129
+ type: str
130
+ required: true
131
+ pattern: /\Alocal\Z|\Aremote\Z/
132
+ raise:
133
+ type: bool
125
134
  after:
126
- type: map
127
- mapping:
128
- local:
129
- type: seq
130
- sequence:
131
- - type: str
132
- remote:
133
- type: seq
134
- sequence:
135
- - type: str
135
+ type: seq
136
+ sequence:
137
+ - type: map
138
+ mapping:
139
+ command:
140
+ type: str
141
+ required: true
142
+ where:
143
+ type: str
144
+ required: true
145
+ pattern: /\Alocal\Z|\Aremote\Z/
146
+ raise:
147
+ type: bool
148
+
136
149
  forbid:
137
150
  type: map
138
151
  mapping:
data/lib/wordmove/cli.rb CHANGED
@@ -18,22 +18,20 @@ module Wordmove
18
18
  end
19
19
 
20
20
  shared_options = {
21
- wordpress: { aliases: "-w", type: :boolean },
22
- uploads: { aliases: "-u", type: :boolean },
23
- themes: { aliases: "-t", type: :boolean },
24
- plugins: { aliases: "-p", type: :boolean },
25
- mu_plugins: { aliases: "-m", type: :boolean },
26
- languages: { aliases: "-l", type: :boolean },
27
- db: { aliases: "-d", type: :boolean },
28
-
29
- verbose: { aliases: "-v", type: :boolean },
30
- simulate: { aliases: "-s", type: :boolean },
21
+ wordpress: { aliases: "-w", type: :boolean },
22
+ uploads: { aliases: "-u", type: :boolean },
23
+ themes: { aliases: "-t", type: :boolean },
24
+ plugins: { aliases: "-p", type: :boolean },
25
+ mu_plugins: { aliases: "-m", type: :boolean },
26
+ languages: { aliases: "-l", type: :boolean },
27
+ db: { aliases: "-d", type: :boolean },
28
+ verbose: { aliases: "-v", type: :boolean },
29
+ simulate: { aliases: "-s", type: :boolean },
31
30
  environment: { aliases: "-e" },
32
- config: { aliases: "-c" },
33
- debug: { type: :boolean },
34
-
35
- no_adapt: { type: :boolean },
36
- all: { type: :boolean }
31
+ config: { aliases: "-c" },
32
+ debug: { type: :boolean },
33
+ no_adapt: { type: :boolean },
34
+ all: { type: :boolean }
37
35
  }
38
36
 
39
37
  no_tasks do
@@ -49,6 +47,7 @@ module Wordmove
49
47
 
50
48
  def ensure_wordpress_options_presence!(options)
51
49
  return if (options.keys & (wordpress_options + ["all"])).present?
50
+
52
51
  puts "No options given. See wordmove --help"
53
52
  exit 1
54
53
  end
@@ -58,6 +57,20 @@ module Wordmove
58
57
  end
59
58
  end
60
59
 
60
+ desc "list", "List all environments and vhosts"
61
+ shared_options.each do |option, args|
62
+ method_option option, args
63
+ end
64
+ def list
65
+ Wordmove::EnvironmentsList.print(options)
66
+ rescue Wordmove::MovefileNotFound => e
67
+ logger.error(e.message)
68
+ exit 1
69
+ rescue Psych::SyntaxError => e
70
+ logger.error("Your movefile is not parsable due to a syntax error: #{e.message}")
71
+ exit 1
72
+ end
73
+
61
74
  desc "pull", "Pulls WP data from remote host to the local machine"
62
75
  shared_options.each do |option, args|
63
76
  method_option option, args
@@ -30,15 +30,17 @@ module Wordmove
30
30
  '.'
31
31
  end
32
32
 
33
- def logger
34
- Logger.new(STDOUT).tap { |l| l.level = Logger::DEBUG }
33
+ def logger(secrets)
34
+ Logger.new(STDOUT, secrets).tap { |l| l.level = Logger::DEBUG }
35
35
  end
36
36
  end
37
37
 
38
38
  def initialize(environment, options = {})
39
39
  @environment = environment.to_sym
40
40
  @options = options
41
- @logger = self.class.logger
41
+
42
+ movefile_secrets = Wordmove::Movefile.new(options[:config]).secrets
43
+ @logger = self.class.logger(movefile_secrets)
42
44
  end
43
45
 
44
46
  def push_db
@@ -98,9 +100,11 @@ module Wordmove
98
100
 
99
101
  return true if simulate?
100
102
 
103
+ # rubocop:todo Security/Open
101
104
  open(local_path, 'w') do |file|
102
105
  file << open(url).read
103
106
  end
107
+ # rubocop:enable Security/Open
104
108
  end
105
109
 
106
110
  def simulate?
@@ -2,7 +2,7 @@ module Wordmove
2
2
  module Deployer
3
3
  class FTP < Base
4
4
  def initialize(environment, options)
5
- super
5
+ super(environment, options)
6
6
  ftp_options = remote_options[:ftp]
7
7
  @copier = Photocopier::FTP.new(ftp_options).tap { |c| c.logger = logger }
8
8
  end
@@ -9,7 +9,7 @@ module Wordmove
9
9
  :local_gzipped_backup_path
10
10
 
11
11
  def initialize(environment, options)
12
- super
12
+ super(environment, options)
13
13
  ssh_options = remote_options[:ssh]
14
14
 
15
15
  if simulate? && ssh_options[:rsync_options]
@@ -46,7 +46,8 @@ module Wordmove
46
46
  return if options[:no_adapt]
47
47
 
48
48
  logger.task_step true, "adapt dump for #{config_key}"
49
- SqlAdapter::Wpcli.new(local, remote, config_key).command unless simulate?
49
+ path = local_options[:wordpress_path]
50
+ SqlAdapter::Wpcli.new(local, remote, config_key, path).command unless simulate?
50
51
  end
51
52
  end
52
53
  end
@@ -19,13 +19,13 @@ module Wordmove
19
19
  logger.error <<-LONG
20
20
  wp-cli is not up to date.
21
21
  Use `wp cli update` to update to the latest version.
22
- LONG
22
+ LONG
23
23
  end
24
24
  else
25
25
  logger.error <<-LONG
26
26
  wp-cli is not installed (or not in your $PATH).
27
27
  Read http://wp-cli.org/#installing for installation info.
28
- LONG
28
+ LONG
29
29
  end
30
30
  end
31
31
 
@@ -0,0 +1,68 @@
1
+ module Wordmove
2
+ class EnvironmentsList
3
+ attr_reader :movefile, :logger, :remote_vhosts, :local_vhost
4
+
5
+ class << self
6
+ def print(cli_options)
7
+ new(cli_options).print
8
+ end
9
+ end
10
+
11
+ def initialize(options)
12
+ @logger = Logger.new(STDOUT).tap { |l| l.level = Logger::INFO }
13
+ @movefile = Wordmove::Movefile.new(options[:config])
14
+ @remote_vhosts = []
15
+ @local_vhost = []
16
+ end
17
+
18
+ def print
19
+ contents = parse_movefile(movefile: movefile)
20
+ generate_vhost_list(contents: contents)
21
+ output
22
+ end
23
+
24
+ private
25
+
26
+ def select_vhost(contents:)
27
+ target = contents.select { |_key, env| env[:vhost].present? }
28
+ target.map { |key, env| { env: key, vhost: env[:vhost] } }
29
+ end
30
+
31
+ def parse_movefile(movefile:)
32
+ movefile.fetch
33
+ end
34
+
35
+ def output
36
+ logger.task('Listing Local')
37
+ logger.plain(output_string(vhost_list: local_vhost))
38
+
39
+ logger.task('Listing Remotes')
40
+ logger.plain(output_string(vhost_list: remote_vhosts))
41
+ end
42
+
43
+ def output_string(vhost_list:)
44
+ return 'vhost list is empty' if vhost_list.empty?
45
+
46
+ vhost_list.each_with_object("") do |entry, retval|
47
+ retval << "#{entry[:env]}: #{entry[:vhost]}\n"
48
+ end
49
+ end
50
+
51
+ #
52
+ # return env, vhost map
53
+ # Exp. {:env=>:local, :vhost=>"http://vhost.local"},
54
+ # {:env=>:production, :vhost=>"http://example.com"}
55
+ #
56
+ def generate_vhost_list(contents:)
57
+ # select object which has 'vhost' only
58
+ vhosts = select_vhost(contents: contents)
59
+ vhosts.each do |list|
60
+ if list[:env] == :local
61
+ @local_vhost << list
62
+ else
63
+ @remote_vhosts << list
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -71,26 +71,21 @@ production:
71
71
  # hooks: # Remote hooks won't work with FTP
72
72
  # push:
73
73
  # before:
74
- # local:
75
- # - 'echo "Do something locally before push"'
76
- # remote:
77
- # - 'echo "Do something remotely before push"'
74
+ # - command: 'echo "do something"'
75
+ # where: local
76
+ # raise: false # raise is true by default
78
77
  # after:
79
- # local:
80
- # - 'echo "Do something locally after push"'
81
- # remote:
82
- # - 'echo "Do something remotely after push"'
78
+ # - command: 'echo "do something"'
79
+ # where: remote
83
80
  # pull:
84
81
  # before:
85
- # local:
86
- # - 'echo "Do something locally before pull"'
87
- # remote:
88
- # - 'echo "Do something remotely before pull"'
82
+ # - command: 'echo "do something"'
83
+ # where: local
84
+ # raise: false
89
85
  # after:
90
- # local:
91
- # - 'echo "Do something locally after pull"'
92
- # remote:
93
- # - 'echo "Do something remotely after pull"'
86
+ # - command: 'echo "do something"'
87
+ # where: remote
88
+ #
94
89
  # forbid:
95
90
  # push:
96
91
  # db: false
@@ -22,6 +22,7 @@ module Wordmove
22
22
 
23
23
  def forbidden?(task)
24
24
  return false unless forbidden_tasks[task].present?
25
+
25
26
  forbidden_tasks[task] == true
26
27
  end
27
28
 
data/lib/wordmove/hook.rb CHANGED
@@ -41,13 +41,15 @@ module Wordmove
41
41
  def local_hooks
42
42
  return [] if empty_step?
43
43
 
44
- options[action][step][:local] || []
44
+ options[action][step]
45
+ .select { |hook| hook[:where] == 'local' } || []
45
46
  end
46
47
 
47
48
  def remote_hooks
48
49
  return [] if empty_step?
49
50
 
50
- options[action][step][:remote] || []
51
+ options[action][step]
52
+ .select { |hook| hook[:where] == 'remote' } || []
51
53
  end
52
54
 
53
55
  private
@@ -56,6 +58,7 @@ module Wordmove
56
58
  return true unless options
57
59
  return true if options[action].nil?
58
60
  return true if options[action][step].nil?
61
+ return true if options[action][step].empty?
59
62
 
60
63
  false
61
64
  end
@@ -66,23 +69,23 @@ module Wordmove
66
69
  parent.logger
67
70
  end
68
71
 
69
- def self.run(commands, options, simulate = false)
72
+ def self.run(hooks, options, simulate = false)
70
73
  logger.task "Running local hooks"
71
74
 
72
75
  wordpress_path = options[:wordpress_path]
73
76
 
74
- commands.each do |command|
75
- logger.task_step true, "Exec command: #{command}"
77
+ hooks.each do |hook|
78
+ logger.task_step true, "Exec command: #{hook[:command]}"
76
79
  return true if simulate
77
80
 
78
- stdout_return = `cd #{wordpress_path} && #{command} 2>&1`
81
+ stdout_return = `cd #{wordpress_path} && #{hook[:command]} 2>&1`
79
82
  logger.task_step true, "Output: #{stdout_return}"
80
83
 
81
84
  if $CHILD_STATUS.exitstatus.zero?
82
85
  logger.success ""
83
86
  else
84
87
  logger.error "Error code: #{$CHILD_STATUS.exitstatus}"
85
- raise Wordmove::LocalHookException
88
+ raise Wordmove::LocalHookException unless hook[:raise].eql? false
86
89
  end
87
90
  end
88
91
  end
@@ -93,19 +96,19 @@ module Wordmove
93
96
  parent.logger
94
97
  end
95
98
 
96
- def self.run(commands, options, simulate = false)
99
+ def self.run(hooks, options, simulate = false)
97
100
  logger.task "Running remote hooks"
98
101
 
99
102
  ssh_options = options[:ssh]
100
103
  wordpress_path = options[:wordpress_path]
101
104
 
102
105
  copier = Photocopier::SSH.new(ssh_options).tap { |c| c.logger = logger }
103
- commands.each do |command|
104
- logger.task_step false, "Exec command: #{command}"
106
+ hooks.each do |hook|
107
+ logger.task_step false, "Exec command: #{hook[:command]}"
105
108
  return true if simulate
106
109
 
107
110
  stdout, stderr, exit_code =
108
- copier.exec!("cd #{wordpress_path} && #{command}")
111
+ copier.exec!("cd #{wordpress_path} && #{hook[:command]}")
109
112
 
110
113
  if exit_code.zero?
111
114
  logger.task_step false, "Output: #{stdout}"
@@ -113,7 +116,7 @@ module Wordmove
113
116
  else
114
117
  logger.task_step false, "Output: #{stderr}"
115
118
  logger.error "Error code #{exit_code}"
116
- raise Wordmove::RemoteHookException
119
+ raise Wordmove::RemoteHookException unless hook[:raise].eql? false
117
120
  end
118
121
  end
119
122
  end
@@ -2,40 +2,55 @@ module Wordmove
2
2
  class Logger < ::Logger
3
3
  MAX_LINE = 70
4
4
 
5
+ def initialize(device, strings_to_hide = [])
6
+ super(device, formatter: proc { |_severity, _datetime, _progname, message|
7
+ formatted_message = if strings_to_hide.empty?
8
+ message
9
+ else
10
+ message.gsub(Regexp.new(strings_to_hide.join('|')), '[secret]')
11
+ end
12
+
13
+ "\n#{formatted_message}\n"
14
+ })
15
+ end
16
+
5
17
  def task(title)
6
18
  prefix = "▬" * 2
7
19
  title = " #{title} "
8
20
  padding = "▬" * padding_length(title)
9
-
10
- puts "\n" + prefix + title.light_white + padding
21
+ add(INFO, prefix + title.light_white + padding)
11
22
  end
12
23
 
13
24
  def task_step(local_step, title)
14
25
  if local_step
15
- puts " local".cyan + " | ".black + title.to_s
26
+ add(INFO, " local".cyan + " | ".black + title.to_s)
16
27
  else
17
- puts " remote".yellow + " | ".black + title.to_s
28
+ add(INFO, " remote".yellow + " | ".black + title.to_s)
18
29
  end
19
30
  end
20
31
 
21
32
  def error(message)
22
- puts " ❌ error".red + " | ".black + message.to_s
33
+ add(ERROR, " ❌ error".red + " | ".black + message.to_s)
23
34
  end
24
35
 
25
36
  def success(message)
26
- puts " ✅ success".green + " | ".black + message.to_s
37
+ add(INFO, " ✅ success".green + " | ".black + message.to_s)
27
38
  end
28
39
 
29
40
  def debug(message)
30
- puts " 🛠 debug".magenta + " | ".black + message.to_s
41
+ add(DEBUG, " 🛠 debug".magenta + " | ".black + message.to_s)
31
42
  end
32
43
 
33
44
  def warn(message)
34
- puts " ⚠️ warning".yellow + " | ".black + message.to_s
45
+ add(WARN, " ⚠️ warning".yellow + " | ".black + message.to_s)
35
46
  end
36
47
 
37
48
  def info(message)
38
- puts " ℹ️ info".yellow + " | ".black + message.to_s
49
+ add(INFO, " ℹ️ info".yellow + " | ".black + message.to_s)
50
+ end
51
+
52
+ def plain(message)
53
+ add(INFO, message.to_s)
39
54
  end
40
55
 
41
56
  private
@@ -16,9 +16,13 @@ module Wordmove
16
16
  end
17
17
 
18
18
  if entries.empty?
19
- raise MovefileNotFound, "Could not find a valid Movefile" if last_dir?(start_dir)
19
+ if last_dir?(start_dir)
20
+ raise MovefileNotFound, "Could not find a valid Movefile. Searched"\
21
+ " for filename \"#{name}\" in folder \"#{start_dir}\""
22
+ end
23
+
20
24
  @start_dir = upper_dir(start_dir)
21
- return fetch
25
+ return fetch(verbose)
22
26
  end
23
27
 
24
28
  found = entries.first
@@ -53,6 +57,24 @@ module Wordmove
53
57
  (options[:environment] || available_enviroments.first).to_sym
54
58
  end
55
59
 
60
+ def secrets
61
+ options = fetch(false)
62
+
63
+ secrets = []
64
+ options.each_key do |env|
65
+ secrets << options.dig(env, :database, :password)
66
+ secrets << options.dig(env, :database, :host)
67
+ secrets << options.dig(env, :vhost)
68
+ secrets << options.dig(env, :ssh, :password)
69
+ secrets << options.dig(env, :ssh, :host)
70
+ secrets << options.dig(env, :ftp, :password)
71
+ secrets << options.dig(env, :ftp, :host)
72
+ secrets << options.dig(env, :wordpress_path)
73
+ end
74
+
75
+ secrets.compact.delete_if(&:empty?)
76
+ end
77
+
56
78
  private
57
79
 
58
80
  def extract_available_envs(options)
@@ -2,11 +2,12 @@ module Wordmove
2
2
  module SqlAdapter
3
3
  class Wpcli
4
4
  attr_accessor :sql_content
5
- attr_reader :from, :to
5
+ attr_reader :from, :to, :local_path
6
6
 
7
- def initialize(source_config, dest_config, config_key)
7
+ def initialize(source_config, dest_config, config_key, local_path)
8
8
  @from = source_config[config_key]
9
9
  @to = dest_config[config_key]
10
+ @local_path = local_path
10
11
  end
11
12
 
12
13
  def command
@@ -14,7 +15,8 @@ module Wordmove
14
15
  raise UnmetPeerDependencyError, "WP-CLI is not installed or not in your $PATH"
15
16
  end
16
17
 
17
- "wp search-replace #{from} #{to} --quiet --skip-columns=guid --all-tables --allow-root"
18
+ "wp search-replace --path=#{local_path} #{from} #{to} --quiet "\
19
+ "--skip-columns=guid --all-tables --allow-root"
18
20
  end
19
21
  end
20
22
  end
@@ -1,3 +1,3 @@
1
1
  module Wordmove
2
- VERSION = "4.0.2.pre4".freeze
2
+ VERSION = "5.0.0.dev".freeze
3
3
  end
@@ -10,12 +10,12 @@ class WordpressDirectory
10
10
 
11
11
  DEFAULT_PATHS = {
12
12
  Path::WP_CONTENT => 'wp-content',
13
- Path::WP_CONFIG => 'wp-config.php',
14
- Path::PLUGINS => 'wp-content/plugins',
13
+ Path::WP_CONFIG => 'wp-config.php',
14
+ Path::PLUGINS => 'wp-content/plugins',
15
15
  Path::MU_PLUGINS => 'wp-content/mu-plugins',
16
- Path::THEMES => 'wp-content/themes',
17
- Path::UPLOADS => 'wp-content/uploads',
18
- Path::LANGUAGES => 'wp-content/languages'
16
+ Path::THEMES => 'wp-content/themes',
17
+ Path::UPLOADS => 'wp-content/uploads',
18
+ Path::LANGUAGES => 'wp-content/languages'
19
19
  }.freeze
20
20
 
21
21
  def self.default_path_for(sym)
data/wordmove.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'wordmove/version'
4
4
 
@@ -31,20 +31,20 @@ Gem::Specification.new do |spec|
31
31
 
32
32
  spec.add_runtime_dependency "activesupport", '~> 5.1', '>= 5.1.1'
33
33
  spec.add_runtime_dependency "colorize", "~> 0.8.1"
34
- spec.add_runtime_dependency "dotenv", "~> 2.2.1"
34
+ spec.add_runtime_dependency "dotenv", "~> 2.7.5"
35
35
  spec.add_runtime_dependency "kwalify", "~> 0"
36
36
  spec.add_runtime_dependency "photocopier", "1.3.3.pre3"
37
- spec.add_runtime_dependency "thor", "~> 0.19.4"
37
+ spec.add_runtime_dependency "thor", "~> 0.20.3"
38
38
 
39
- spec.required_ruby_version = ">= 2.4.0"
39
+ spec.required_ruby_version = ">= 2.6.0"
40
40
 
41
41
  spec.add_development_dependency "bundler", "~> 2.0"
42
42
  spec.add_development_dependency "priscilla", "~> 1.0"
43
43
  spec.add_development_dependency "pry-byebug", "~> 3.1"
44
- spec.add_development_dependency "rake", "~> 10.0"
45
- spec.add_development_dependency "rspec", "~> 3.3"
46
- spec.add_development_dependency "rubocop", "~> 0.52.0"
47
- spec.add_development_dependency "simplecov", "~> 0.9"
44
+ spec.add_development_dependency "rake", "~> 13.0.1"
45
+ spec.add_development_dependency "rspec", "~> 3.9"
46
+ spec.add_development_dependency "rubocop", "~> 0.76.0"
47
+ spec.add_development_dependency "simplecov", "~> 0.17.1"
48
48
 
49
49
  spec.post_install_message = <<-RAINBOW
50
50
  Starting from version 3.0.0 `database.charset` option is no longer accepted.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wordmove
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.2.pre4
4
+ version: 5.0.0.dev
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefano Verna
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: exe
14
14
  cert_chain: []
15
- date: 2019-06-09 00:00:00.000000000 Z
15
+ date: 2019-11-27 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activesupport
@@ -54,14 +54,14 @@ dependencies:
54
54
  requirements:
55
55
  - - "~>"
56
56
  - !ruby/object:Gem::Version
57
- version: 2.2.1
57
+ version: 2.7.5
58
58
  type: :runtime
59
59
  prerelease: false
60
60
  version_requirements: !ruby/object:Gem::Requirement
61
61
  requirements:
62
62
  - - "~>"
63
63
  - !ruby/object:Gem::Version
64
- version: 2.2.1
64
+ version: 2.7.5
65
65
  - !ruby/object:Gem::Dependency
66
66
  name: kwalify
67
67
  requirement: !ruby/object:Gem::Requirement
@@ -96,14 +96,14 @@ dependencies:
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: 0.19.4
99
+ version: 0.20.3
100
100
  type: :runtime
101
101
  prerelease: false
102
102
  version_requirements: !ruby/object:Gem::Requirement
103
103
  requirements:
104
104
  - - "~>"
105
105
  - !ruby/object:Gem::Version
106
- version: 0.19.4
106
+ version: 0.20.3
107
107
  - !ruby/object:Gem::Dependency
108
108
  name: bundler
109
109
  requirement: !ruby/object:Gem::Requirement
@@ -152,56 +152,56 @@ dependencies:
152
152
  requirements:
153
153
  - - "~>"
154
154
  - !ruby/object:Gem::Version
155
- version: '10.0'
155
+ version: 13.0.1
156
156
  type: :development
157
157
  prerelease: false
158
158
  version_requirements: !ruby/object:Gem::Requirement
159
159
  requirements:
160
160
  - - "~>"
161
161
  - !ruby/object:Gem::Version
162
- version: '10.0'
162
+ version: 13.0.1
163
163
  - !ruby/object:Gem::Dependency
164
164
  name: rspec
165
165
  requirement: !ruby/object:Gem::Requirement
166
166
  requirements:
167
167
  - - "~>"
168
168
  - !ruby/object:Gem::Version
169
- version: '3.3'
169
+ version: '3.9'
170
170
  type: :development
171
171
  prerelease: false
172
172
  version_requirements: !ruby/object:Gem::Requirement
173
173
  requirements:
174
174
  - - "~>"
175
175
  - !ruby/object:Gem::Version
176
- version: '3.3'
176
+ version: '3.9'
177
177
  - !ruby/object:Gem::Dependency
178
178
  name: rubocop
179
179
  requirement: !ruby/object:Gem::Requirement
180
180
  requirements:
181
181
  - - "~>"
182
182
  - !ruby/object:Gem::Version
183
- version: 0.52.0
183
+ version: 0.76.0
184
184
  type: :development
185
185
  prerelease: false
186
186
  version_requirements: !ruby/object:Gem::Requirement
187
187
  requirements:
188
188
  - - "~>"
189
189
  - !ruby/object:Gem::Version
190
- version: 0.52.0
190
+ version: 0.76.0
191
191
  - !ruby/object:Gem::Dependency
192
192
  name: simplecov
193
193
  requirement: !ruby/object:Gem::Requirement
194
194
  requirements:
195
195
  - - "~>"
196
196
  - !ruby/object:Gem::Version
197
- version: '0.9'
197
+ version: 0.17.1
198
198
  type: :development
199
199
  prerelease: false
200
200
  version_requirements: !ruby/object:Gem::Requirement
201
201
  requirements:
202
202
  - - "~>"
203
203
  - !ruby/object:Gem::Version
204
- version: '0.9'
204
+ version: 0.17.1
205
205
  description: Wordmove deploys your WordPress websites at the speed of light.
206
206
  email:
207
207
  - stefano.verna@welaika.com
@@ -264,6 +264,7 @@ files:
264
264
  - lib/wordmove/doctor/rsync.rb
265
265
  - lib/wordmove/doctor/ssh.rb
266
266
  - lib/wordmove/doctor/wpcli.rb
267
+ - lib/wordmove/environments_list.rb
267
268
  - lib/wordmove/exceptions.rb
268
269
  - lib/wordmove/generators/movefile.rb
269
270
  - lib/wordmove/generators/movefile.yml
@@ -299,15 +300,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
299
300
  requirements:
300
301
  - - ">="
301
302
  - !ruby/object:Gem::Version
302
- version: 2.4.0
303
+ version: 2.6.0
303
304
  required_rubygems_version: !ruby/object:Gem::Requirement
304
305
  requirements:
305
306
  - - ">"
306
307
  - !ruby/object:Gem::Version
307
308
  version: 1.3.1
308
309
  requirements: []
309
- rubyforge_project:
310
- rubygems_version: 2.6.11
310
+ rubygems_version: 3.0.3
311
311
  signing_key:
312
312
  specification_version: 4
313
313
  summary: Wordmove, Capistrano for Wordpress