db-clone 2.1.0 → 2.2.0
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.
- checksums.yaml +5 -5
- data/README.md +3 -1
- data/db-clone-danger_thumb.gif +0 -0
- data/db-clone.gemspec +1 -1
- data/db-clone_thumb.gif +0 -0
- data/lib/db/clone.rb +0 -1
- data/lib/db/clone/base.rb +35 -17
- data/lib/db/clone/cmd_prompt.rb +26 -31
- data/lib/db/clone/version.rb +1 -1
- metadata +8 -7
- data/screenshot.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8098963e39a01b0a5da856c1c21b5b89344bd142f70534f5bc79b0e361a55fd9
|
4
|
+
data.tar.gz: c90e55495f6fd48b7a8425d4fbe5393aae2abb590f18f7f452c3ae5dce4162ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ae240a2223dd8e0861ed9a80a0711f9d342aeeb6169c9e11e564db9bfbbd83ce75ac72eccc325883f7ef34aecd86f76de38605ae07e0f173b6b3ae852f44ea5
|
7
|
+
data.tar.gz: 3ba935eba5de0353e6ea1650c59e732e9e58d7bfc0f310a0e6b0ec92c0ea2a8776bf566b529f123fd78cda28e5511e200b5e0bfaeefd34cd84e1b6514a13e3b2
|
data/README.md
CHANGED
@@ -6,7 +6,9 @@
|
|
6
6
|
|
7
7
|
The `db-clone` gem provides a rake task for cloning one database into another. It does this by making a system call to `mysqldump` or `pg_dump` (currently only mysql and postgresql are supported) and uses the contents of your application's `database.yml` to determine the command line arguments.
|
8
8
|
|
9
|
-

|
10
|
+
|
11
|
+

|
10
12
|
|
11
13
|
## Requirements
|
12
14
|
|
Binary file
|
data/db-clone.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.add_dependency '
|
23
|
+
spec.add_dependency 'cli-ui', '~> 1.2.1'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.15'
|
26
26
|
spec.add_development_dependency 'rake', '~> 10.0'
|
data/db-clone_thumb.gif
ADDED
Binary file
|
data/lib/db/clone.rb
CHANGED
data/lib/db/clone/base.rb
CHANGED
@@ -20,34 +20,39 @@ module Db
|
|
20
20
|
|
21
21
|
cmd_builder = CmdBuilder.new src: @db_yml[src_db], dest: @db_yml[dest_db]
|
22
22
|
|
23
|
-
|
24
|
-
|
23
|
+
frame("Cloning #{src_db} into #{dest_db}") do
|
24
|
+
unless !invoke_cli || ask_yes_no("Continue?", default_to_yes: dest_db != @default_src)
|
25
|
+
puts fmt("\n{{x}} Cloning canceled.")
|
26
|
+
abort
|
27
|
+
end
|
28
|
+
|
29
|
+
puts fmt("\n Executing: {{cyan:#{cmd_builder.cmd}}}\n\n")
|
30
|
+
Process.wait spawn(cmd_builder.cmd)
|
31
|
+
puts fmt("\n{{v}} Cloning complete!")
|
32
|
+
end
|
25
33
|
end
|
26
34
|
|
27
35
|
private
|
28
36
|
|
29
37
|
def prompt_for_src_and_dest
|
30
|
-
|
31
|
-
|
38
|
+
frame('Manual DB Selection') do
|
39
|
+
databases = @db_yml.keys
|
32
40
|
|
33
|
-
|
34
|
-
puts "Source database = #{src_db.green}"
|
41
|
+
default_src = databases.include?(@default_src) ? @default_src : databases.first
|
35
42
|
|
36
|
-
|
37
|
-
default_dest = src_db != @default_dest && databases.include?(@default_dest) ? @default_dest : databases.first
|
43
|
+
src_db = prompt 'Which is the source database?', default_src, databases.map { |name| [name, fmt("{{reset:#{name}}}")] }.to_h
|
38
44
|
|
39
|
-
|
40
|
-
|
45
|
+
databases.delete src_db
|
46
|
+
default_dest = src_db != @default_dest && databases.include?(@default_dest) ? @default_dest : databases.first
|
41
47
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
puts "
|
46
|
-
abort
|
48
|
+
dest_db = prompt 'Which is the destination database?', default_dest, databases.map {|name| [name, colorize_destination(name)]}.to_h
|
49
|
+
|
50
|
+
if dest_db == @default_src
|
51
|
+
puts fmt("{{bold:{{yellow:WARNING!}} You have selected {{green:#{@default_src}}} as your destination database, meaning that db-clone will overwrite it with the contents of your {{green:#{src_db}}} database.}}")
|
47
52
|
end
|
48
|
-
end
|
49
53
|
|
50
|
-
|
54
|
+
[src_db, dest_db]
|
55
|
+
end
|
51
56
|
end
|
52
57
|
|
53
58
|
def default_src_and_dest
|
@@ -56,6 +61,19 @@ module Db
|
|
56
61
|
|
57
62
|
[@default_src, @default_dest]
|
58
63
|
end
|
64
|
+
|
65
|
+
def colorize_destination(database_name)
|
66
|
+
color = case database_name
|
67
|
+
when @default_src
|
68
|
+
'red'
|
69
|
+
when @default_dest
|
70
|
+
'green'
|
71
|
+
else
|
72
|
+
'yellow'
|
73
|
+
end
|
74
|
+
|
75
|
+
fmt("{{#{color}:#{database_name}}}")
|
76
|
+
end
|
59
77
|
end
|
60
78
|
end
|
61
79
|
end
|
data/lib/db/clone/cmd_prompt.rb
CHANGED
@@ -1,45 +1,40 @@
|
|
1
|
+
require 'cli/ui'
|
2
|
+
|
3
|
+
CLI::UI::StdoutRouter.enable
|
4
|
+
|
1
5
|
module Db
|
2
6
|
module Clone
|
3
7
|
module CmdPrompt
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
# end
|
10
|
-
# text = STDIN.gets.chomp.strip
|
11
|
-
# text = default_text if text.blank? && default_text
|
12
|
-
# text
|
13
|
-
# end
|
8
|
+
def frame(title)
|
9
|
+
CLI::UI::Frame.open(title) do
|
10
|
+
yield
|
11
|
+
end
|
12
|
+
end
|
14
13
|
|
15
|
-
def ask_yes_no question, default_to_yes
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
def ask_yes_no question, default_to_yes: true
|
15
|
+
if default_to_yes
|
16
|
+
CLI::UI.confirm question
|
17
|
+
else
|
18
|
+
CLI::UI.ask(question, options: %w(no yes)) == 'yes'
|
19
|
+
end
|
19
20
|
end
|
20
21
|
|
21
22
|
def prompt question, default, options={}
|
22
|
-
|
23
|
-
|
24
|
-
default_num = idx+1 if opt[0] == default
|
25
|
-
[idx+1, {ret_key: opt[0], label: opt[1]}]
|
26
|
-
end.to_h
|
23
|
+
opts = options.reject { |key,| key == default }
|
24
|
+
default_option = options[default]
|
27
25
|
|
28
|
-
|
29
|
-
|
26
|
+
CLI::UI::Prompt.ask(question) do |handler|
|
27
|
+
handler.option(default_option) { default }
|
30
28
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
selection = default_num if selection.zero?
|
35
|
-
|
36
|
-
if numbered_opts.has_key? selection
|
37
|
-
numbered_opts[selection][:ret_key]
|
38
|
-
else
|
39
|
-
puts "#{'Invalid selection:'.red} #{selection}"
|
40
|
-
prompt question, default, options
|
29
|
+
opts.each do |(value, text)|
|
30
|
+
handler.option(text.to_s) { value }
|
31
|
+
end
|
41
32
|
end
|
42
33
|
end
|
34
|
+
|
35
|
+
def fmt text
|
36
|
+
CLI::UI.fmt text
|
37
|
+
end
|
43
38
|
end
|
44
39
|
end
|
45
40
|
end
|
data/lib/db/clone/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db-clone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Huber
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: cli-ui
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.2.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.2.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -111,14 +111,15 @@ files:
|
|
111
111
|
- Rakefile
|
112
112
|
- bin/console
|
113
113
|
- bin/setup
|
114
|
+
- db-clone-danger_thumb.gif
|
114
115
|
- db-clone.gemspec
|
116
|
+
- db-clone_thumb.gif
|
115
117
|
- lib/db/clone.rb
|
116
118
|
- lib/db/clone/base.rb
|
117
119
|
- lib/db/clone/cmd_builder.rb
|
118
120
|
- lib/db/clone/cmd_prompt.rb
|
119
121
|
- lib/db/clone/rake_task.rb
|
120
122
|
- lib/db/clone/version.rb
|
121
|
-
- screenshot.png
|
122
123
|
homepage: https://github.com/seanhuber/db-clone
|
123
124
|
licenses:
|
124
125
|
- MIT
|
@@ -139,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
140
|
version: '0'
|
140
141
|
requirements: []
|
141
142
|
rubyforge_project:
|
142
|
-
rubygems_version: 2.
|
143
|
+
rubygems_version: 2.7.8
|
143
144
|
signing_key:
|
144
145
|
specification_version: 4
|
145
146
|
summary: rake db:clone will clone your production database to development
|
data/screenshot.png
DELETED
Binary file
|