db-clone 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
![Screenshot](https://cdn.rawgit.com/seanhuber/db-clone/master/
|
9
|
+
![Screenshot](https://cdn.rawgit.com/seanhuber/db-clone/master/db-clone_thumb.gif)
|
10
|
+
|
11
|
+
![Screenshot](https://cdn.rawgit.com/seanhuber/db-clone/master/db-clone-danger_thumb.gif)
|
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
|