capistrano-db_sync 0.0.5 → 0.0.6

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
2
  SHA1:
3
- metadata.gz: 097af0fe9943edd79ebaf5adf6b0a4b38e93f3a3
4
- data.tar.gz: 1aeaaa0f28c9828512582cf48b3752c6135b65cd
3
+ metadata.gz: 4ef45f2b85cc220b6ffeacdf2aa5d73999798973
4
+ data.tar.gz: 94bd2de62b244170fa0d1890d54b0dfc6584d902
5
5
  SHA512:
6
- metadata.gz: 089b61e05c9e168bd8c16529a01aca55178c61f0e77c6eff263c550f05d426ea7aea1a08503ebe928c397054e2873b2c45e6a75709873895c81bd97edc8a3f43
7
- data.tar.gz: 42b8a807837d3bb8c155c132b960f0b88ba172b0776415961e19130c1231a1aa9d732eccea9ed5060351b01b538274058dfb1ee1362dbd65bac75c123edab130
6
+ metadata.gz: d8593d8accbb23f835447f3f317ffc20da35d46f25d0c2a08f8cd6916ca8ab20172ded4dd34580693edd84bba62b8c08222ecef20b0a4a7ce9dc392c3b887372
7
+ data.tar.gz: 9e75118beffc54c8d195e4d5fe315fa074ff304f95e2d506ad8254cc22c55c382128a65f8640f700413e15e4d2c9c6c08f1edeee529ef1f9d823d89179b08ad3
data/README.md CHANGED
@@ -1,6 +1,4 @@
1
- [![Build Status](https://snap-ci.com/heartbits/capistrano-db_sync/branch/master/build_image)](https://snap-ci.com/heartbits/capistrano-db_sync/branch/master)
2
-
3
- ## Capistrano::DBSync
1
+ ### Capistrano::DBSync [![Build Status](https://snap-ci.com/heartbits/capistrano-db_sync/branch/master/build_image)](https://snap-ci.com/heartbits/capistrano-db_sync/branch/master) [![Code Climate](https://codeclimate.com/github/heartbits/capistrano-db_sync/badges/gpa.svg)](https://codeclimate.com/github/heartbits/capistrano-db_sync)
4
2
 
5
3
  Fast and sophisticated remote database import using the best of **Postgres 9.2.x**
6
4
 
@@ -10,6 +8,7 @@ Fast and sophisticated remote database import using the best of **Postgres 9.2.x
10
8
  * No downtime on restore - it uses a temporary database while restoring
11
9
  * Uses Postgres parallel restore
12
10
  * Uses Postgres custom dump format that is automatically compressed
11
+ * *MySQL will be supported in near future*
13
12
 
14
13
  ### Requirements
15
14
 
@@ -25,6 +24,7 @@ Fast and sophisticated remote database import using the best of **Postgres 9.2.x
25
24
  ```ruby
26
25
  gem 'capistrano-db_sync', require: false
27
26
  ```
27
+ Available in RubyGems: https://rubygems.org/gems/capistrano-db_sync
28
28
 
29
29
  2. Define your custom settings, if needed. We suggest to put this file at `lib/capistrano/tasks/db_sync.rake`.
30
30
  Capistrano 3.x should load all `*.rake` files by default in `Capfile`.
@@ -78,11 +78,18 @@ The following steps describe what happens when executing `cap production db_sync
78
78
 
79
79
  ### Contributors
80
80
 
81
- * Rafael Sales [@rafaelsales](http://github.com/rafaelsales) - help me not stay forever alone here :)
81
+ * Rafael Sales [@rafaelsales](https://github.com/rafaelsales)
82
+ * Jérémy Lecour [@jlecour](https://github.com/jlecour)
83
+
84
+ ### Plans
85
+
86
+ * Increase test coverage
87
+ * Add support to MySQL
88
+ * Validate database versions before applying any changes
82
89
 
83
90
  ### Contributing
84
91
 
85
- 1. Fork it ( https://github.com/rafaelsales/capistrano-db_sync/fork )
92
+ 1. Fork it ( https://github.com/heartbits/capistrano-db_sync/fork )
86
93
  2. Create your feature branch (`git checkout -b my-new-feature`)
87
94
  3. Commit your changes (`git commit -am 'Add some feature'`)
88
95
  4. Push to the branch (`git push origin my-new-feature`)
@@ -18,6 +18,6 @@ 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_runtime_dependency "capistrano", ">= 3.0.0"
22
- spec.add_dependency "activesupport", ">= 3.0.0"
21
+ spec.add_runtime_dependency "capistrano", "~> 3.0.0", ">= 3.0.0"
22
+ spec.add_dependency "activesupport", "~> 3.0.0", ">= 3.0.0"
23
23
  end
@@ -1,3 +1,4 @@
1
+ require 'tmpdir'
1
2
  require 'active_support/core_ext/hash'
2
3
 
3
4
  module Capistrano::DBSync
@@ -21,14 +22,14 @@ module Capistrano::DBSync
21
22
 
22
23
  pg_jobs: 1, # Number of jobs to run in parallel on pg_restore
23
24
 
24
- working_dir: "./tmp",
25
+ working_dir: Dir.tmpdir,
25
26
  env: ENV.fetch('RAILS_ENV', 'development'),
26
27
  },
27
28
 
28
29
  remote: {
29
30
  cleanup: true, # If the remote dump directory should be removed after downloaded
30
31
 
31
- working_dir: "/tmp",
32
+ working_dir: cap.fetch(:tmp_dir, "/tmp"),
32
33
  env: cap.fetch(:stage).to_s,
33
34
  },
34
35
  }
@@ -41,6 +42,7 @@ module Capistrano::DBSync
41
42
 
42
43
  def load_options
43
44
  user_options = cap.fetch(:db_sync_options)
45
+ user_options = user_options.reject { |_, v| v.nil? }
44
46
  DEFAULT_OPTIONS.call(cap).deep_merge(user_options)
45
47
  end
46
48
 
@@ -4,11 +4,13 @@ class Capistrano::DBSync::Postgres::CLI
4
4
  end
5
5
 
6
6
  def dump(to_file, db, options = [])
7
- "#{with_pw} pg_dump #{credentials} #{format_args} -f #{to_file} #{options.join(' ')} #{db}"
7
+ args = to_string_args(options)
8
+ "#{with_pw} pg_dump #{credentials} #{format_args} -f #{to_file} #{args} #{db}".strip
8
9
  end
9
10
 
10
11
  def restore(from_file, db, options = [])
11
- "#{with_pw} pg_restore #{credentials} #{format_args} -d #{db} #{options.join(' ')} #{from_file}"
12
+ args = to_string_args(options)
13
+ "#{with_pw} pg_restore #{credentials} #{format_args} -d #{db} #{args} #{from_file}".strip
12
14
  end
13
15
 
14
16
  def drop_db(db)
@@ -23,13 +25,9 @@ class Capistrano::DBSync::Postgres::CLI
23
25
  psql %Q|ALTER DATABASE "#{old_db}" RENAME TO "#{new_db}";|
24
26
  end
25
27
 
26
- def clone_db(new_db, template_db)
27
- psql %Q|CREATE DATABASE "#{new_db}" WITH TEMPLATE "#{template_db}";|
28
- end
29
-
30
28
  def psql(command, db = "postgres")
31
29
  normalized_command = command.gsub('"', '\"').gsub(/\s\s+|\n/, " ")
32
- %Q|#{with_pw} psql #{credentials} -d #{db} -c "#{normalized_command}"|
30
+ %Q|#{with_pw} psql #{credentials} -d #{db} -c "#{normalized_command}"|.strip
33
31
  end
34
32
 
35
33
  def kill_processes_for_db(db)
@@ -64,7 +62,13 @@ class Capistrano::DBSync::Postgres::CLI
64
62
  end
65
63
 
66
64
  def with_pw
67
- "PGPASSWORD='#{config['password']}'" unless config.fetch('password', '').empty?
65
+ if config['password']
66
+ "PGPASSWORD='#{config['password']}'"
67
+ end
68
+ end
69
+
70
+ def to_string_args(options)
71
+ options.nil? ? "" : options.join(" ")
68
72
  end
69
73
 
70
74
  attr_reader :config, :session_id
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module DBSync
3
- VERSION = "0.0.5"
3
+ VERSION = "0.0.6"
4
4
  end
5
5
  end
@@ -1,30 +1,101 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Capistrano::DBSync::Postgres::CLI do
4
- let(:config) do
5
- {
6
- "database" => "staging",
7
- "username" => "user",
8
- "password" => "pw",
9
- "adapter" => "postgresql",
10
- "host" => "127.0.0.1",
11
- "port" => "5432",
12
- }
13
- end
3
+ describe "Using a config with a password" do
4
+
5
+ describe Capistrano::DBSync::Postgres::CLI do
6
+ let(:config) do
7
+ {
8
+ "database" => "staging",
9
+ "username" => "user",
10
+ "password" => "pw",
11
+ "adapter" => "postgresql",
12
+ "host" => "127.0.0.1",
13
+ "port" => "5432",
14
+ }
15
+ end
14
16
 
15
- let(:cli) { Capistrano::DBSync::Postgres::CLI.new(config) }
17
+ let(:cli) { Capistrano::DBSync::Postgres::CLI.new(config) }
16
18
 
17
- describe "#dump" do
18
- it "generates pg_dump command" do
19
- command = cli.dump("/tmp/staging.dump", "staging", ["--section=pre-data"])
20
- command.must_equal "PGPASSWORD='pw' pg_dump -U user -h 127.0.0.1 -p 5432 --no-acl --no-owner --format=custom -f /tmp/staging.dump --section=pre-data staging"
19
+ describe "#dump" do
20
+ it "generates pg_dump command" do
21
+ command = cli.dump("/tmp/staging.dump", "staging", ["--section=pre-data"])
22
+ command.must_equal "PGPASSWORD='pw' pg_dump -U user -h 127.0.0.1 -p 5432 --no-acl --no-owner --format=custom -f /tmp/staging.dump --section=pre-data staging"
23
+ end
24
+ end
25
+
26
+ describe "#restore" do
27
+ it "generates pg_dump command" do
28
+ command = cli.restore("/db/production.dump", "staging", ["--jobs=3"])
29
+ command.must_equal "PGPASSWORD='pw' pg_restore -U user -h 127.0.0.1 -p 5432 --no-acl --no-owner --format=custom -d staging --jobs=3 /db/production.dump"
30
+ end
31
+ end
32
+
33
+ describe "#psql" do
34
+ it "generates a command to drop a database" do
35
+ command = cli.psql("fake command")
36
+ command.must_equal %Q{PGPASSWORD='pw' psql -U user -h 127.0.0.1 -p 5432 -d postgres -c "fake command"}
37
+ end
38
+ end
39
+
40
+ describe "#drop_db" do
41
+ it "generates a command to drop a database" do
42
+ command = cli.drop_db("staging")
43
+ command.must_match /psql .* -c "DROP DATABASE IF EXISTS \\"staging\\";"/
44
+ end
45
+ end
46
+
47
+ describe "#create_db" do
48
+ it "generates a database creation command" do
49
+ command = cli.create_db("staging")
50
+ command.must_match /psql .* -c "CREATE DATABASE \\"staging\\";"/
51
+ end
21
52
  end
22
- end
23
53
 
24
- describe "#restore" do
25
- it "generates pg_dump command" do
26
- command = cli.restore("/db/production.dump", "staging", ["--jobs=3"])
27
- command.must_equal "PGPASSWORD='pw' pg_restore -U user -h 127.0.0.1 -p 5432 --no-acl --no-owner --format=custom -d staging --jobs=3 /db/production.dump"
54
+ describe "#rename_db" do
55
+ it "generates a database creation command" do
56
+ command = cli.rename_db("staging_old", "staging_new")
57
+ command.must_match /psql .* -c "ALTER DATABASE \\"staging_old\\" RENAME TO \\"staging_new\\";"/
58
+ end
28
59
  end
29
60
  end
30
61
  end
62
+
63
+ describe "Using a config without password" do
64
+
65
+ describe Capistrano::DBSync::Postgres::CLI do
66
+ let(:config) do
67
+ {
68
+ "database" => "staging",
69
+ "username" => "user",
70
+ "adapter" => "postgresql",
71
+ "host" => "127.0.0.1",
72
+ "port" => "5432",
73
+ }
74
+ end
75
+
76
+ let(:cli) { Capistrano::DBSync::Postgres::CLI.new(config) }
77
+
78
+ describe "#dump" do
79
+ it "generates pg_dump command" do
80
+ command = cli.dump("/tmp/staging.dump", "staging", ["--section=pre-data"])
81
+ command.must_equal "pg_dump -U user -h 127.0.0.1 -p 5432 --no-acl --no-owner --format=custom -f /tmp/staging.dump --section=pre-data staging"
82
+ end
83
+ end
84
+
85
+ describe "#restore" do
86
+ it "generates pg_dump command" do
87
+ command = cli.restore("/db/production.dump", "staging", ["--jobs=3"])
88
+ command.must_equal "pg_restore -U user -h 127.0.0.1 -p 5432 --no-acl --no-owner --format=custom -d staging --jobs=3 /db/production.dump"
89
+ end
90
+ end
91
+
92
+ describe "#psql" do
93
+ it "generates a command to drop a database" do
94
+ command = cli.psql("fake command")
95
+ command.must_equal %Q{psql -U user -h 127.0.0.1 -p 5432 -d postgres -c "fake command"}
96
+ end
97
+ end
98
+
99
+ end
100
+
101
+ end
metadata CHANGED
@@ -1,19 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-db_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafael Sales
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-17 00:00:00.000000000 Z
11
+ date: 2015-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.0
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
22
  version: 3.0.0
@@ -21,6 +24,9 @@ dependencies:
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.0
24
30
  - - ">="
25
31
  - !ruby/object:Gem::Version
26
32
  version: 3.0.0
@@ -28,6 +34,9 @@ dependencies:
28
34
  name: activesupport
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 3.0.0
31
40
  - - ">="
32
41
  - !ruby/object:Gem::Version
33
42
  version: 3.0.0
@@ -35,6 +44,9 @@ dependencies:
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 3.0.0
38
50
  - - ">="
39
51
  - !ruby/object:Gem::Version
40
52
  version: 3.0.0