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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0b5b95c07deaed846e15c2316eda7101833acdfb
4
- data.tar.gz: 512399b9b7471805f42e0f4d819363334ad67091
2
+ SHA256:
3
+ metadata.gz: 8098963e39a01b0a5da856c1c21b5b89344bd142f70534f5bc79b0e361a55fd9
4
+ data.tar.gz: c90e55495f6fd48b7a8425d4fbe5393aae2abb590f18f7f452c3ae5dce4162ae
5
5
  SHA512:
6
- metadata.gz: 9c83fdd42b1ccb598dc1aa20ce78256a2fbfc93851924880a25b6ffc6eb1db5f45a662e55ed3499b43fdd90c95dfb4b0ff9a6f5f42740f0b68d49973663406e0
7
- data.tar.gz: 82b4e8cbbc5bdfa4e531842ccb8a97a7f99d7a3ad7dad9df67d0e5d78e5a5f3aa33c879db83e9e4280222ba521886aee867a031caf49cec9c8aef078296b52a4
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/screenshot.png)
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
@@ -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 'colorize', '~> 0.7'
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'
Binary file
@@ -1,4 +1,3 @@
1
- require 'colorize'
2
1
  require 'yaml'
3
2
 
4
3
  require 'db/clone/cmd_builder.rb'
@@ -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
- puts "\n Executing: #{cmd_builder.cmd.light_blue}\n\n"
24
- exec cmd_builder.cmd
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
- databases = @db_yml.keys.sort
31
- default_src = databases.include?(@default_src) ? @default_src : databases.first
38
+ frame('Manual DB Selection') do
39
+ databases = @db_yml.keys
32
40
 
33
- src_db = prompt 'Which is the source database?', default_src, databases.map{|name| [name, name.yellow]}.to_h
34
- puts "Source database = #{src_db.green}"
41
+ default_src = databases.include?(@default_src) ? @default_src : databases.first
35
42
 
36
- databases.delete src_db
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
- dest_db = prompt 'Which is the destination database?', default_dest, databases.map{|name| [name, name.yellow]}.to_h
40
- puts "Destination database = #{dest_db.green}"
45
+ databases.delete src_db
46
+ default_dest = src_db != @default_dest && databases.include?(@default_dest) ? @default_dest : databases.first
41
47
 
42
- if dest_db == @default_src
43
- proceed = ask_yes_no "#{'WARNING!'.black.on_yellow} You have selected #{@default_src.green} as your destination database, meaning that db-clone will overwrite it with the contents of your #{src_db.green} database. Do you want to proceed anyway?", false
44
- unless proceed
45
- puts "\nCloning #{'canceled'.red}."
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
- [src_db, dest_db]
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
@@ -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
- # def ask_for_text instruction, default_text=nil
5
- # if default_text
6
- # print "\n#{instruction} [default = \"#{default_text}\"]: "
7
- # else
8
- # print "\n#{instruction}: "
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=true
16
- print "\n#{question} [#{default_to_yes ? 'Yn' : 'yN'}]: "
17
- answer = STDIN.gets.chomp.strip.downcase
18
- default_to_yes ? !(answer == 'n') : answer == 'y'
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
- default_num = nil
23
- numbered_opts = options.map.with_index do |opt, idx|
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
- puts "\n"
29
- numbered_opts.each{|choice_num, opt| puts " [#{choice_num.to_s.white}] #{opt[:label]}" }
26
+ CLI::UI::Prompt.ask(question) do |handler|
27
+ handler.option(default_option) { default }
30
28
 
31
- print "\n#{question} [1-#{options.length}, default=#{default_num}]: "
32
-
33
- selection = STDIN.gets.chomp.strip.to_i
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
@@ -1,5 +1,5 @@
1
1
  module Db
2
2
  module Clone
3
- VERSION = '2.1.0'
3
+ VERSION = '2.2.0'
4
4
  end
5
5
  end
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.1.0
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: 2017-12-01 00:00:00.000000000 Z
11
+ date: 2018-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: colorize
14
+ name: cli-ui
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.7'
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: '0.7'
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.6.13
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
Binary file