db_replicator 0.0.2 → 0.0.3

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
2
  SHA1:
3
- metadata.gz: 0b13e8390763a001058f09c528e101e1404269c3
4
- data.tar.gz: cd3c96d96ab055228b7523e059cc95e304308bcd
3
+ metadata.gz: a550c35aaa759054879bed457b8c93c1c0850eed
4
+ data.tar.gz: e982b43bf8ebfe6a4893f375eee65168d06ccb25
5
5
  SHA512:
6
- metadata.gz: b21fa62236a3b26f09dca63700af1c171eb394be08914e9372e597be1f5869d70af4e254954dffd621b726f50b540c629c135df26226c49a46d380257e4b94ec
7
- data.tar.gz: b07bcf1fe16dda7e64c0fb240b2f131e642aef0fa1c6baed28e9ce9585c43171c88d68e2f0ba7681f74c9e2bf0f5668ab746fd180d5bc793af9302cd1e4decf9
6
+ metadata.gz: 65a35755a6ef13683f1dd46b63d028b12abbe75593265daa590357194aee7e7cdb7a7e0dfd3db76999df3cf01a8bbd361fb03a1ed87f854a323ae6851e4b3d7e
7
+ data.tar.gz: d98919eccc50f9702e24f3f1d73b86f8a9afd6a682b4447f600082083e609239cf0091a00535255ff4081cf8f6427370f2593103442980d1883d3c2f03341b83
data/.travis.yml CHANGED
@@ -2,4 +2,4 @@ language: ruby
2
2
  cache: bundler
3
3
  rvm:
4
4
  - 2.0.0
5
- - 2.1.0
5
+ - 2.2.0
data/Gemfile CHANGED
@@ -5,3 +5,7 @@ gemspec
5
5
  gem 'ruby-progressbar'
6
6
  gem 'net-ssh'
7
7
  gem 'net-scp'
8
+
9
+ group :test do
10
+ gem 'rake'
11
+ end
data/README.md CHANGED
@@ -9,13 +9,15 @@ As of now I only suport MySQL. I plan to add more adapters in the future. See TO
9
9
  Add this line to your application's Gemfile:
10
10
 
11
11
  ```ruby
12
- gem 'db_replicator', '~> 0.0.1'
12
+ gem 'db_replicator', '~> 0.0.2'
13
13
  ```
14
14
 
15
15
  And then execute:
16
16
 
17
17
  $ rails g db_replicator:install
18
18
 
19
+ Be sure to set the proxy_host to a server that can access your production database `db_replicator.rb` initializers file.
20
+
19
21
  ## Usage
20
22
 
21
23
  You can download your production db by running:
@@ -27,6 +29,7 @@ You can download your production db by running:
27
29
 
28
30
  * Allow secure upload of production db to another enviroment. e.g. staging
29
31
  * Add more adapters.
32
+ * Write better tests!!!!
30
33
 
31
34
 
32
35
  ## Contributing
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency 'bundler', '~> 1.7'
21
+ spec.add_development_dependency 'bundler', '~> 1.6'
22
22
  spec.add_development_dependency 'rake', '~> 10.0'
23
23
  spec.add_development_dependency 'generator_spec'
24
24
  spec.add_development_dependency 'rspec'
@@ -0,0 +1,15 @@
1
+ require 'open3'
2
+ module ExecCommand
3
+ def exec_cmd(cmd)
4
+ Open3.popen2e(cmd) do |_, stdout_err, wait_thr|
5
+ while line = stdout_err.gets
6
+ puts line
7
+ end
8
+
9
+ exit_status = wait_thr.value
10
+ unless exit_status.success?
11
+ raise "Shell Error From: #{cmd}".colorize(:red)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,11 +1,13 @@
1
+ require 'db_replicator/exec_command'
1
2
  module DbReplicator
2
3
  class Importer
3
- attr_accessor :to_db_env, :db_env
4
+ include ExecCommand
5
+ attr_accessor :to_db_env, :tmp_db_configs
4
6
  def initialize(to_db_env)
5
7
  @to_db_env = to_db_env
6
8
  @to_db_configs = DbReplicator.db_configs(@to_db_env)
7
9
  if @to_db_configs['adapter'] == 'sqlite3'
8
- @tmp_db_configs = create_tmp_db_configs
10
+ set_tmp_db_configs
9
11
  else
10
12
  @tmp_db_configs = nil
11
13
  end
@@ -22,40 +24,38 @@ module DbReplicator
22
24
  end
23
25
  else
24
26
  puts "mysql -u root --database=#{@to_db_configs['database']} < #{DbReplicator.dump_file}"
25
- puts system "mysql -u root --database=#{@to_db_configs['database']} < #{DbReplicator.dump_file}"
27
+ exec_cmd "mysql -u root --database=#{@to_db_configs['database']} < #{DbReplicator.dump_file}"
26
28
  end
27
29
  end
28
30
  DbReplicator.document_action 'Executing db:migrate to update database Just in case their are pending migrations', 'Migrate complete.' do
29
- system 'bundle exec rake db:migrate'
31
+ exec_cmd 'bundle exec rake db:migrate'
30
32
  end
31
33
  end
32
34
 
33
35
  private
34
36
 
35
37
  def convert_sql_dump_and_import
36
- DbReplicator.document_action "Creating temp db for transfer #{create_tmp_db_configs['database']}", 'Create complete' do
37
- ActiveRecord::Tasks::DatabaseTasks.create(create_tmp_db_configs)
38
+ DbReplicator.document_action "Creating temp db for transfer #{@tmp_db_configs['database']}", 'Create complete' do
39
+ ActiveRecord::Tasks::DatabaseTasks.create(@tmp_db_configs)
38
40
  end
39
- DbReplicator.document_action "Importing data to temp db. DB: #{create_tmp_db_configs['database']}; File: #{DbReplicator.dump_file}", 'Import complete' do
40
- puts "Executing: mysql -u root #{create_tmp_db_configs['database']} < #{DbReplicator.dump_file}"
41
- system "mysql -u root #{create_tmp_db_configs['database']} < #{DbReplicator.dump_file}"
41
+ DbReplicator.document_action "Importing data to temp db. DB: #{@tmp_db_configs['database']}; File: #{DbReplicator.dump_file}", 'Import complete' do
42
+ puts "Executing: mysql -u root --database=#{@tmp_db_configs['database']} < #{DbReplicator.dump_file}"
43
+ exec_cmd "mysql -u root --database=#{@tmp_db_configs['database']} < #{DbReplicator.dump_file}"
42
44
  end
43
45
  DbReplicator.document_action 'Starting data transfer', 'Data transfer complete.' do
44
- puts "Executing: sequel #{DbReplicator.prod_db_configs['adapter']}://localhost/#{create_tmp_db_configs['database']}?user=root -C sqlite://#{@to_db_configs['database']}"
45
- system "sequel #{DbReplicator.prod_db_configs['adapter']}://localhost/#{create_tmp_db_configs['database']}?user=root -C sqlite://#{@to_db_configs['database']}"
46
+ puts "Executing: sequel #{DbReplicator.prod_db_configs['adapter']}://localhost/#{@tmp_db_configs['database']}?user=root -C sqlite://#{@to_db_configs['database']}"
47
+ exec_cmd "sequel #{DbReplicator.prod_db_configs['adapter']}://localhost/#{@tmp_db_configs['database']}?user=root -C sqlite://#{@to_db_configs['database']}"
46
48
  end
47
49
  end
48
50
 
49
- def create_tmp_db_configs
51
+ def set_tmp_db_configs
50
52
  tmp_configs = @to_db_configs.clone
51
53
  tmp_configs['database'] = "#{DbReplicator.prod_db_configs['database']}_db_replicator"
52
- # tmp_configs['host'] = 'localhost'
53
- tmp_configs.reject! { |k, v| %w(password username).include?(k.to_s) || v.nil? }
54
- tmp_configs
54
+ @tmp_db_configs = tmp_configs.reject { |k, v| %w(password username).include?(k.to_s) || v.nil? }
55
55
  end
56
56
 
57
57
  def create_fresh_db
58
- system 'bundle exec rake db:drop db:create'
58
+ exec_cmd 'bundle exec rake db:drop db:create'
59
59
  end
60
60
  end
61
61
  end
@@ -1,3 +1,3 @@
1
1
  module DbReplicator
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+ require "active_record/railtie"
3
+ module DbReplicator
4
+ describe Importer do
5
+ before do
6
+ DbReplicator.stub(:prod_db_configs) { Hash["adapter" => "mysql2", "user" => "user1", "database" => "development", "password" => "123"] }
7
+ end
8
+ describe "tmp_db_configs" do
9
+ before do
10
+ expect(DbReplicator).to receive(:db_configs).and_return(Hash['adapter', 'sqlite3'])
11
+ end
12
+ it 'will set the tmp_db_configs if the development adapter is sqlite3' do
13
+ importer = Importer.new('development')
14
+ importer.tmp_db_configs['database'].should == 'development_db_replicator'
15
+ end
16
+ end
17
+ describe "#import_db!" do
18
+ let(:importer) { Importer.new('development') }
19
+ context 'convert mysql to sqlite3' do
20
+ before do
21
+ DbReplicator.stub(:dump_file) {'dump_file'}
22
+ expect(DbReplicator).to receive(:db_configs).with('development').and_return(Hash['adapter', 'sqlite3', 'database', 'db/development.sqlite3'])
23
+ expect(ActiveRecord::Tasks::DatabaseTasks).to receive(:create)
24
+ expect(importer).to receive(:exec_cmd).with("bundle exec rake db:drop db:create")
25
+ expect(importer).to receive(:exec_cmd).with("mysql -u root --database=development_db_replicator < #{DbReplicator.dump_file}")
26
+ expect(importer).to receive(:exec_cmd).with("sequel #{DbReplicator.prod_db_configs['adapter']}://localhost/development_db_replicator?user=root -C sqlite://db/development.sqlite3")
27
+ expect(importer).to receive(:exec_cmd).with("bundle exec rake db:migrate")
28
+ end
29
+ it 'convert the mysql db to sqlite3' do
30
+ importer.import_db!
31
+ end
32
+ end
33
+ context 'env db is already mysql' do
34
+ before do
35
+ DbReplicator.stub(:dump_file) {'dump_file'}
36
+ expect(DbReplicator).to receive(:db_configs).with('development').and_return(Hash['adapter', 'mysql2', 'database', 'development'])
37
+ expect(importer).to receive(:exec_cmd).with("bundle exec rake db:drop db:create")
38
+ expect(importer).to receive(:exec_cmd).with("mysql -u root --database=development < #{DbReplicator.dump_file}")
39
+ expect(importer).to receive(:exec_cmd).with("bundle exec rake db:migrate")
40
+ end
41
+
42
+ it 'will import the prod db into the mysql db' do
43
+ importer.import_db!
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
data/spec/spec_helper.rb CHANGED
@@ -7,4 +7,7 @@ RSpec.configure do |config|
7
7
  config.expect_with :rspec do |c|
8
8
  c.syntax = [:should, :expect]
9
9
  end
10
+ config.mock_with :rspec do |c|
11
+ c.syntax = [:should, :expect]
12
+ end
10
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: db_replicator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Eatherly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-09 00:00:00.000000000 Z
11
+ date: 2014-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '1.6'
20
20
  type: :development
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: '1.7'
26
+ version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -154,6 +154,7 @@ files:
154
154
  - lib/db_replicator.rb
155
155
  - lib/db_replicator/configuration.rb
156
156
  - lib/db_replicator/downloader.rb
157
+ - lib/db_replicator/exec_command.rb
157
158
  - lib/db_replicator/importer.rb
158
159
  - lib/db_replicator/tasks.rb
159
160
  - lib/db_replicator/version.rb
@@ -161,6 +162,7 @@ files:
161
162
  - lib/generators/templates/db_replicator.rb
162
163
  - lib/tasks/dbr.rake
163
164
  - spec/db_replicator/configuration_spec.rb
165
+ - spec/db_replicator/importer_spec.rb
164
166
  - spec/db_replicator_spec.rb
165
167
  - spec/generators/db_replicator/install_generator_spec.rb
166
168
  - spec/generators/tmp/.gitignore
@@ -234,6 +236,7 @@ specification_version: 4
234
236
  summary: ''
235
237
  test_files:
236
238
  - spec/db_replicator/configuration_spec.rb
239
+ - spec/db_replicator/importer_spec.rb
237
240
  - spec/db_replicator_spec.rb
238
241
  - spec/generators/db_replicator/install_generator_spec.rb
239
242
  - spec/generators/tmp/.gitignore