capistrano-db_sync 0.0.5 → 0.0.6

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