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 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