db-clone 1.1.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +12 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +9 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +61 -0
  8. data/Rakefile +13 -20
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/db-clone.gemspec +30 -0
  12. data/lib/db/clone.rb +50 -0
  13. data/lib/db/clone/base.rb +59 -0
  14. data/lib/{db_clone → db/clone}/cmd_builder.rb +10 -12
  15. data/lib/db/clone/cmd_prompt.rb +43 -0
  16. data/lib/db/clone/rake_task.rb +17 -0
  17. data/lib/db/clone/version.rb +5 -0
  18. data/screenshot.png +0 -0
  19. metadata +54 -123
  20. data/MIT-LICENSE +0 -20
  21. data/app/assets/javascripts/db_clone/application.js +0 -13
  22. data/app/assets/stylesheets/db_clone/application.css +0 -15
  23. data/app/controllers/db_clone/application_controller.rb +0 -5
  24. data/app/helpers/db_clone/application_helper.rb +0 -4
  25. data/app/views/layouts/db_clone/application.html.erb +0 -14
  26. data/config/routes.rb +0 -2
  27. data/lib/db_clone.rb +0 -27
  28. data/lib/db_clone/db_selections.rb +0 -65
  29. data/lib/db_clone/engine.rb +0 -14
  30. data/lib/db_clone/version.rb +0 -3
  31. data/lib/tasks/db_clone_tasks.rake +0 -6
  32. data/spec/cmd_builder_spec.rb +0 -73
  33. data/spec/db_clone_spec.rb +0 -15
  34. data/spec/db_selections_spec.rb +0 -74
  35. data/spec/dummy/README.rdoc +0 -28
  36. data/spec/dummy/Rakefile +0 -6
  37. data/spec/dummy/app/assets/javascripts/application.js +0 -13
  38. data/spec/dummy/app/assets/stylesheets/application.css +0 -15
  39. data/spec/dummy/app/controllers/application_controller.rb +0 -5
  40. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  41. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  42. data/spec/dummy/bin/bundle +0 -3
  43. data/spec/dummy/bin/rails +0 -4
  44. data/spec/dummy/bin/rake +0 -4
  45. data/spec/dummy/bin/setup +0 -29
  46. data/spec/dummy/config.ru +0 -4
  47. data/spec/dummy/config/application.rb +0 -31
  48. data/spec/dummy/config/boot.rb +0 -5
  49. data/spec/dummy/config/database.yml +0 -59
  50. data/spec/dummy/config/environment.rb +0 -5
  51. data/spec/dummy/config/environments/development.rb +0 -41
  52. data/spec/dummy/config/environments/production.rb +0 -79
  53. data/spec/dummy/config/environments/test.rb +0 -42
  54. data/spec/dummy/config/initializers/assets.rb +0 -11
  55. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  56. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -3
  57. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  58. data/spec/dummy/config/initializers/inflections.rb +0 -16
  59. data/spec/dummy/config/initializers/mime_types.rb +0 -4
  60. data/spec/dummy/config/initializers/session_store.rb +0 -3
  61. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  62. data/spec/dummy/config/locales/en.yml +0 -23
  63. data/spec/dummy/config/routes.rb +0 -4
  64. data/spec/dummy/config/secrets.yml +0 -22
  65. data/spec/dummy/log/test.log +0 -40
  66. data/spec/dummy/public/404.html +0 -67
  67. data/spec/dummy/public/422.html +0 -67
  68. data/spec/dummy/public/500.html +0 -66
  69. data/spec/dummy/public/favicon.ico +0 -0
  70. data/spec/rails_helper.rb +0 -59
  71. data/spec/spec_helper.rb +0 -92
@@ -0,0 +1,5 @@
1
+ module Db
2
+ module Clone
3
+ VERSION = '2.0.0'
4
+ end
5
+ end
Binary file
metadata CHANGED
@@ -1,91 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: db-clone
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Huber
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-06 00:00:00.000000000 Z
11
+ date: 2017-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: colorize
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '4.0'
20
- - - "<"
17
+ - - "~>"
21
18
  - !ruby/object:Gem::Version
22
- version: '6.0'
19
+ version: '0.7'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: '4.0'
30
- - - "<"
24
+ - - "~>"
31
25
  - !ruby/object:Gem::Version
32
- version: '6.0'
26
+ version: '0.7'
33
27
  - !ruby/object:Gem::Dependency
34
- name: colorize
28
+ name: bundler
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
- version: '0.7'
40
- type: :runtime
33
+ version: '1.15'
34
+ type: :development
41
35
  prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
38
  - - "~>"
45
39
  - !ruby/object:Gem::Version
46
- version: '0.7'
40
+ version: '1.15'
47
41
  - !ruby/object:Gem::Dependency
48
- name: sqlite3
42
+ name: rake
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
45
  - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: '1.3'
47
+ version: '10.0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
51
  requirements:
58
52
  - - "~>"
59
53
  - !ruby/object:Gem::Version
60
- version: '1.3'
54
+ version: '10.0'
61
55
  - !ruby/object:Gem::Dependency
62
- name: awesome_print
56
+ name: rspec
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
59
  - - "~>"
66
60
  - !ruby/object:Gem::Version
67
- version: '1.6'
61
+ version: '3.0'
68
62
  type: :development
69
63
  prerelease: false
70
64
  version_requirements: !ruby/object:Gem::Requirement
71
65
  requirements:
72
66
  - - "~>"
73
67
  - !ruby/object:Gem::Version
74
- version: '1.6'
68
+ version: '3.0'
75
69
  - !ruby/object:Gem::Dependency
76
- name: rspec-rails
70
+ name: coveralls
77
71
  requirement: !ruby/object:Gem::Requirement
78
72
  requirements:
79
73
  - - "~>"
80
74
  - !ruby/object:Gem::Version
81
- version: '3.4'
75
+ version: '0.8'
82
76
  type: :development
83
77
  prerelease: false
84
78
  version_requirements: !ruby/object:Gem::Requirement
85
79
  requirements:
86
80
  - - "~>"
87
81
  - !ruby/object:Gem::Version
88
- version: '3.4'
82
+ version: '0.8'
83
+ - !ruby/object:Gem::Dependency
84
+ name: awesome_print
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
89
97
  description: rake db:clone[manual] provides a CLI for selecting a specific source
90
98
  database to copy to a specific destination database. Supports postgreql and mysql.
91
99
  email:
@@ -94,60 +102,23 @@ executables: []
94
102
  extensions: []
95
103
  extra_rdoc_files: []
96
104
  files:
97
- - MIT-LICENSE
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - ".travis.yml"
108
+ - Gemfile
109
+ - LICENSE.txt
110
+ - README.md
98
111
  - Rakefile
99
- - app/assets/javascripts/db_clone/application.js
100
- - app/assets/stylesheets/db_clone/application.css
101
- - app/controllers/db_clone/application_controller.rb
102
- - app/helpers/db_clone/application_helper.rb
103
- - app/views/layouts/db_clone/application.html.erb
104
- - config/routes.rb
105
- - lib/db_clone.rb
106
- - lib/db_clone/cmd_builder.rb
107
- - lib/db_clone/db_selections.rb
108
- - lib/db_clone/engine.rb
109
- - lib/db_clone/version.rb
110
- - lib/tasks/db_clone_tasks.rake
111
- - spec/cmd_builder_spec.rb
112
- - spec/db_clone_spec.rb
113
- - spec/db_selections_spec.rb
114
- - spec/dummy/README.rdoc
115
- - spec/dummy/Rakefile
116
- - spec/dummy/app/assets/javascripts/application.js
117
- - spec/dummy/app/assets/stylesheets/application.css
118
- - spec/dummy/app/controllers/application_controller.rb
119
- - spec/dummy/app/helpers/application_helper.rb
120
- - spec/dummy/app/views/layouts/application.html.erb
121
- - spec/dummy/bin/bundle
122
- - spec/dummy/bin/rails
123
- - spec/dummy/bin/rake
124
- - spec/dummy/bin/setup
125
- - spec/dummy/config.ru
126
- - spec/dummy/config/application.rb
127
- - spec/dummy/config/boot.rb
128
- - spec/dummy/config/database.yml
129
- - spec/dummy/config/environment.rb
130
- - spec/dummy/config/environments/development.rb
131
- - spec/dummy/config/environments/production.rb
132
- - spec/dummy/config/environments/test.rb
133
- - spec/dummy/config/initializers/assets.rb
134
- - spec/dummy/config/initializers/backtrace_silencers.rb
135
- - spec/dummy/config/initializers/cookies_serializer.rb
136
- - spec/dummy/config/initializers/filter_parameter_logging.rb
137
- - spec/dummy/config/initializers/inflections.rb
138
- - spec/dummy/config/initializers/mime_types.rb
139
- - spec/dummy/config/initializers/session_store.rb
140
- - spec/dummy/config/initializers/wrap_parameters.rb
141
- - spec/dummy/config/locales/en.yml
142
- - spec/dummy/config/routes.rb
143
- - spec/dummy/config/secrets.yml
144
- - spec/dummy/log/test.log
145
- - spec/dummy/public/404.html
146
- - spec/dummy/public/422.html
147
- - spec/dummy/public/500.html
148
- - spec/dummy/public/favicon.ico
149
- - spec/rails_helper.rb
150
- - spec/spec_helper.rb
112
+ - bin/console
113
+ - bin/setup
114
+ - db-clone.gemspec
115
+ - lib/db/clone.rb
116
+ - lib/db/clone/base.rb
117
+ - lib/db/clone/cmd_builder.rb
118
+ - lib/db/clone/cmd_prompt.rb
119
+ - lib/db/clone/rake_task.rb
120
+ - lib/db/clone/version.rb
121
+ - screenshot.png
151
122
  homepage: https://github.com/seanhuber/db-clone
152
123
  licenses:
153
124
  - MIT
@@ -160,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
160
131
  requirements:
161
132
  - - ">="
162
133
  - !ruby/object:Gem::Version
163
- version: '2.1'
134
+ version: '0'
164
135
  required_rubygems_version: !ruby/object:Gem::Requirement
165
136
  requirements:
166
137
  - - ">="
@@ -168,48 +139,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
139
  version: '0'
169
140
  requirements: []
170
141
  rubyforge_project:
171
- rubygems_version: 2.5.1
142
+ rubygems_version: 2.6.13
172
143
  signing_key:
173
144
  specification_version: 4
174
145
  summary: rake db:clone will clone your production database to development
175
- test_files:
176
- - spec/cmd_builder_spec.rb
177
- - spec/db_clone_spec.rb
178
- - spec/db_selections_spec.rb
179
- - spec/dummy/app/assets/javascripts/application.js
180
- - spec/dummy/app/assets/stylesheets/application.css
181
- - spec/dummy/app/controllers/application_controller.rb
182
- - spec/dummy/app/helpers/application_helper.rb
183
- - spec/dummy/app/views/layouts/application.html.erb
184
- - spec/dummy/bin/bundle
185
- - spec/dummy/bin/rails
186
- - spec/dummy/bin/rake
187
- - spec/dummy/bin/setup
188
- - spec/dummy/config/application.rb
189
- - spec/dummy/config/boot.rb
190
- - spec/dummy/config/database.yml
191
- - spec/dummy/config/environment.rb
192
- - spec/dummy/config/environments/development.rb
193
- - spec/dummy/config/environments/production.rb
194
- - spec/dummy/config/environments/test.rb
195
- - spec/dummy/config/initializers/assets.rb
196
- - spec/dummy/config/initializers/backtrace_silencers.rb
197
- - spec/dummy/config/initializers/cookies_serializer.rb
198
- - spec/dummy/config/initializers/filter_parameter_logging.rb
199
- - spec/dummy/config/initializers/inflections.rb
200
- - spec/dummy/config/initializers/mime_types.rb
201
- - spec/dummy/config/initializers/session_store.rb
202
- - spec/dummy/config/initializers/wrap_parameters.rb
203
- - spec/dummy/config/locales/en.yml
204
- - spec/dummy/config/routes.rb
205
- - spec/dummy/config/secrets.yml
206
- - spec/dummy/config.ru
207
- - spec/dummy/log/test.log
208
- - spec/dummy/public/404.html
209
- - spec/dummy/public/422.html
210
- - spec/dummy/public/500.html
211
- - spec/dummy/public/favicon.ico
212
- - spec/dummy/Rakefile
213
- - spec/dummy/README.rdoc
214
- - spec/rails_helper.rb
215
- - spec/spec_helper.rb
146
+ test_files: []
@@ -1,20 +0,0 @@
1
- Copyright 2016 Sean Huber
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,13 +0,0 @@
1
- // This is a manifest file that'll be compiled into application.js, which will include all the files
2
- // listed below.
3
- //
4
- // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
- // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
- //
7
- // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
- // compiled file.
9
- //
10
- // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
- // about supported directives.
12
- //
13
- //= require_tree .
@@ -1,15 +0,0 @@
1
- /*
2
- * This is a manifest file that'll be compiled into application.css, which will include all the files
3
- * listed below.
4
- *
5
- * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
- * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
- *
8
- * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
- * compiled file so the styles you add here take precedence over styles defined in any styles
10
- * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
- * file per style scope.
12
- *
13
- *= require_tree .
14
- *= require_self
15
- */
@@ -1,5 +0,0 @@
1
- module DbClone
2
- class ApplicationController < ActionController::Base
3
- protect_from_forgery with: :exception
4
- end
5
- end
@@ -1,4 +0,0 @@
1
- module DbClone
2
- module ApplicationHelper
3
- end
4
- end
@@ -1,14 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>DbClone</title>
5
- <%= stylesheet_link_tag "db_clone/application", media: "all" %>
6
- <%= javascript_include_tag "db_clone/application" %>
7
- <%= csrf_meta_tags %>
8
- </head>
9
- <body>
10
-
11
- <%= yield %>
12
-
13
- </body>
14
- </html>
@@ -1,2 +0,0 @@
1
- DbClone::Engine.routes.draw do
2
- end
@@ -1,27 +0,0 @@
1
- require 'colorize'
2
- require 'db_clone/cmd_builder'
3
- require 'db_clone/db_selections'
4
- require 'db_clone/engine'
5
-
6
- module DbClone
7
- mattr_accessor :config
8
-
9
- def self.clone!( **opts )
10
- DbClone.config ||= {}
11
- DbClone.config[:ignore_tables] ||= []
12
- DbClone.config[:default_source] ||= 'production'
13
- DbClone.config[:default_destination] ||= 'development'
14
-
15
- ds = DbSelections.new Rails.root.join('config', 'database.yml')
16
- src_dest = if opts[:manual]
17
- [:source_prompt, :source_get, :dest_prompt, :dest_get].each{|m| ds.send(m)}
18
- ds.selections
19
- else
20
- ds.selections( use_defaults: true )
21
- end
22
-
23
- cb = CmdBuilder.new src_dest
24
- puts "\n Executing: #{cb.get_cmd.light_blue}\n\n"
25
- cb.exec!
26
- end
27
- end
@@ -1,65 +0,0 @@
1
- require 'yaml'
2
-
3
- module DbClone
4
- class DbSelections
5
- # read database blocks from config/database.yml
6
- def initialize( database_yml )
7
- h = YAML.load_file database_yml
8
- @dbs = h.sort_by{|k,v| k}.map{|k,v| v.merge(label: k)}
9
- @default_src_idx = @dbs.find_index{|db| db[:label] == DbClone.config[:default_source]}
10
- @default_dest_idx = @dbs.find_index{|db| db[:label] == DbClone.config[:default_destination]}
11
- @selections = {src: nil, dest: nil}
12
- end
13
-
14
- # STEP 1: prompt user for which database block to use as the source
15
- def source_prompt
16
- db_prompt 'source'
17
- end
18
-
19
- # STEP 2: retrieve from use which database block to use as the source
20
- def source_get
21
- db_select 'source'
22
- end
23
-
24
- # STEP 3: prompt user for which database block to use as the destination
25
- def dest_prompt
26
- db_prompt 'destination'
27
- end
28
-
29
- # STEP 4: retrieve from use which database block to use as the destination
30
- def dest_get
31
- db_select 'destination'
32
- end
33
-
34
- def selections( **opts )
35
- opts[:use_defaults] ? {src: @dbs[@default_src_idx], dest: @dbs[@default_dest_idx]} : @selections.map{|k,v| [k, v.nil? ? nil : @dbs[v]] }.to_h
36
- end
37
-
38
- private
39
-
40
- def db_prompt( src_dest )
41
- num_dbs = @dbs.length
42
- puts "\n Choose a #{src_dest.magenta} database from one of the blocks defined in #{'config/database.yml'.light_green}:\n\n"
43
- @dbs.each_with_index do |db, idx|
44
- if src_dest == 'destination' && idx == @selections[:src]
45
- puts " [ #{"#{'X'.ljust(num_dbs.to_s.length).red}"} ] #{db[:label].red}"
46
- else
47
- puts " [ #{"#{(idx+1).to_s.ljust(num_dbs.to_s.length).light_blue}"} ] #{db[:label].yellow}"
48
- end
49
- end
50
- default = src_dest=='source' ? "#{@dbs[@default_src_idx][:label]} = #{(@default_src_idx+1).to_s.light_blue}" : "#{@dbs[@default_dest_idx][:label]} = #{(@default_dest_idx+1).to_s.light_blue}"
51
- print "\n Choose a #{src_dest.magenta} database (#{'1'.light_blue}-#{num_dbs.to_s.light_blue}) [#{default}]: "
52
- end
53
-
54
- def db_select( src_dest )
55
- sk = src_dest=='source' ? :src : :dest
56
- idx = STDIN.gets.chomp
57
- idx = ((src_dest=='source' ? @default_src_idx : @default_dest_idx)+1).to_s if idx == ''
58
- raise(ArgumentError, "Invalid selection: #{src_idx}") unless (1..@dbs.length).map(&:to_s).include?(idx)
59
- @selections[sk] = idx.to_i - 1
60
- raise(ArgumentError, 'Destination cannot be the same as the source') unless @selections.values.uniq.length == 2
61
- raise(ArgumentError, 'Source and destination databases must be of the same type') if src_dest=='destination' && @dbs[@selections[:src]]['adapter'] != @dbs[@selections[:dest]]['adapter']
62
- puts "\n #{src_dest.capitalize.magenta} set to: #{@dbs[@selections[sk]][:label].yellow}"
63
- end
64
- end
65
- end