dbmgr 0.1.4 → 0.2.0

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: 6d50678d7d88d2e977fac194da5a297dfff2c611
4
- data.tar.gz: 0f434fb01363d2bce751cda495b5122902b92575
3
+ metadata.gz: 0927632d6c0f93b7da0b7e0f79c0f824a3889a14
4
+ data.tar.gz: b1f9f3e8bf713c6b522584c41dc04ffaf3b22dd7
5
5
  SHA512:
6
- metadata.gz: '088e02444623d19812306acde778136b6f8eb7c0ae40129c81cec93b9fa38d9a356435df2ddfc1cdb0900f083d30e0e76e1dfd88adc7d2be57aa93071eb7f5f5'
7
- data.tar.gz: a6522f4e50ddc9043f2fdfff0637381d693a268228b1e38781ea7278f6c32a876f4d00fde74a8f22f17ae01c1c05a4fa63901c67d4abd615b23e67c79a78ad35
6
+ metadata.gz: c8333470ad7412cd1582facba9c3cc9b4831096bfccac12753b5e29137505c36f7fc0e931ac3be8737f3bbe7431f1be02ec551506b96267b1256873067dd93f0
7
+ data.tar.gz: d46c85141f324e883c015184f90e7d7465d5b67e5faef39790ab3a688243c8fdbceb2937878a43baf33c40c09307b146813b9eb0f258b722633d945c0a29c968
@@ -1,5 +1,10 @@
1
1
  sudo: false
2
2
  language: ruby
3
+ services:
4
+ - mysql
5
+ - postgresql
3
6
  rvm:
4
7
  - 2.3.1
5
8
  before_install: gem install bundler -v 1.13.6
9
+ before_script:
10
+ - psql -c 'create database travis;' -U postgres
data/README.md CHANGED
@@ -2,65 +2,91 @@
2
2
 
3
3
  `dbmgr` is a command line tool for backing up and restoring databases. It's a useful
4
4
  tool for:
5
+ - Backing up and restoring your development databases
5
6
  - Sharing databases between developers
6
- - Provisioning new Vagrant vms and Docker images
7
+ - Provisioning new Vagrant VMs and Docker images
7
8
  - Provisioning new developers with a working database
8
9
 
9
10
  ## Installation
10
11
 
11
12
  ```
12
- $ brew install callahanrts/dbmgr/dbmgr
13
+ $ brew tap callahanrts/dbmgr
14
+ $ brew install dbmgr
13
15
  ```
16
+
14
17
  or
18
+
15
19
  ```
16
20
  $ gem install dbmgr
17
21
  ```
18
22
 
19
23
  ## Usage
20
-
21
- #### Help
22
- ```
23
- $ dbmgr help
24
- ```
25
-
26
- #### Backup
27
24
  ```
28
- $ dmgr mysql backup --options
25
+ dbmgr [dbms] [action] --options-list
29
26
  ```
30
27
 
31
- #### Restore
32
- ```
33
- $ dbmgr mysql restore --options
34
- ```
35
-
36
- ## Examples
37
- #### Back up a MySQL database
38
-
28
+ ### Backup
29
+ #### Back up a database
39
30
  ```bash
40
- # Back up database from local MySQL server
41
- $ dbmgr mysql backup database_name
31
+ # Back up database from local server
32
+ dbmgr [dbms] backup database_name
42
33
 
43
- # Back up database from a remote MySQL server
44
- $ dbmgr mysql backup database_name -P 3307 -h 192.168.33.10 -u root
34
+ # Back up database from a remote server
35
+ dbmgr [dbms] backup database_name -P 3307 -h 192.168.33.10 -u root
45
36
 
46
37
  # Back up database and store in a specific location
47
- $ dbmgr mysql backup database_name -p ~/Downloads
38
+ dbmgr [dbms] backup database_name -p ~/Downloads
48
39
 
49
40
  # Back up database as a named backup
50
- $ dbmgr mysql backup database_name -f my_backup.sql
41
+ dbmgr [dbms] backup database_name -f my_backup.sql
51
42
  ```
52
43
 
44
+ ### Restore
53
45
  #### Restore a MySQL database
54
46
  ```bash
55
47
  # Restore local database from the latest backup in the default location
56
- $ dbmgr mysql restore database_name
48
+ dbmgr [dbms] restore database_name
57
49
 
58
50
  # Restore remote database with the latest backup
59
- $ dbmgr mysql restore database_name -P 3307 -h 192.168.33.10 -u root
51
+ dbmgr [dbms] restore database_name -P 3307 -h 192.168.33.10 -u root
60
52
 
61
53
  # Restore local database from the latest backup in a specific location
62
- $ dbmgr mysql restore database_name -p ~/Downloads
54
+ dbmgr [dbms] restore database_name -p ~/Downloads
63
55
 
64
56
  # Restore database from a named backup
65
- $ dbmgr mysql restore database_name -f my_backup.sql
57
+ dbmgr [dbms] restore database_name -f my_backup.sql
58
+ ```
59
+
60
+ ## Help
61
+ ```
62
+ dbmgr help
63
+ dbmgr help mysql
64
+ dbmgr mysql help backup
65
+ dbmgr psql help backup
66
+ ...
67
+ ```
68
+
69
+ ## Tips
70
+ Add a function in your `~/.bashrc` to back up a specific database so you don't
71
+ have to type out all of the options each time.
72
+ ```bash
73
+ function dbbackup(){
74
+ dbmgr mysql backup mydb_dev -P 3306 -h 192.168.99.100
75
+ }
76
+
77
+ function dbrestore() {
78
+ dbmgr mysql restore mydb_dev -P 3306 -h 192.168.99.100
79
+ }
80
+ ```
81
+
82
+ ## Contributing
83
+
84
+ ### Build the Gem
85
+ ```bash
86
+ gem build dbmgr.gemspec
87
+ ```
88
+
89
+ ### Install the Built Gem
90
+ ```bash
91
+ gem install ./dbmgr-x.x.x.gem
66
92
  ```
@@ -2,4 +2,4 @@
2
2
 
3
3
  require 'dbmgr'
4
4
 
5
- Dbmgr::DbMgr.start( ARGV )
5
+ Dbmgr::CLI.start( ARGV )
@@ -12,7 +12,8 @@ Gem::Specification.new do |spec|
12
12
  spec.required_ruby_version = '< 2.5'
13
13
 
14
14
  spec.summary = %q{Create database backups and restore from previously created backups}
15
- spec.description = %q{Create database backups to share with others across your dev team. Other developers can restore from backups you've created.}
15
+ spec.description = %q{Create database backups to share with others across your dev team.
16
+ Other developers can restore from backups you've created.}
16
17
  spec.homepage = "https://github.com/callahanrts/dbmgr"
17
18
  spec.license = "MIT"
18
19
 
@@ -29,5 +30,6 @@ Gem::Specification.new do |spec|
29
30
  spec.add_development_dependency "rake", "~> 10.0"
30
31
  spec.add_development_dependency "minitest", "~> 5.0"
31
32
  spec.add_development_dependency "mysql2", "~> 0.4.5"
33
+ spec.add_development_dependency "pg", "~> 0.18.2"
32
34
  spec.add_development_dependency "mocha", "~> 1.2"
33
35
  end
@@ -1,3 +1,6 @@
1
+ require "database/mysql"
2
+ require "database/postgresql"
3
+
1
4
  # Database Class
2
5
  class Database
3
6
  def initialize(options = {})
@@ -26,6 +29,7 @@ class Database
26
29
  end
27
30
 
28
31
  # Construct the /file/path/backup.sql string
32
+ # TODO: Allow paths to have a trailing slash in them
29
33
  def filepath db_name
30
34
  "#{@path}/#{filename db_name}"
31
35
  end
@@ -1,6 +1,5 @@
1
1
  require 'fileutils'
2
2
 
3
- # MySQL Module
4
3
  module MySQL
5
4
  def backup(db_name)
6
5
  FileUtils::mkdir_p @path
@@ -0,0 +1,47 @@
1
+ require 'fileutils'
2
+
3
+ module PostgreSQL
4
+ def backup(db_name)
5
+ FileUtils::mkdir_p @path
6
+
7
+ # Create a postgresql backup from the user supplied options
8
+ system backup_db_command(db_name), out: File::NULL
9
+ rescue
10
+ raise 'Unable to back up database'
11
+ end
12
+
13
+ def restore(db_name)
14
+ # Create the database to restore if it doesn't exist already
15
+ system create_db_command(db_name), out: File::NULL
16
+
17
+ # Restore the database from a backup
18
+ system restore_db_command(db_name), out: File::NULL
19
+ rescue
20
+ raise 'Unable to restore database'
21
+ end
22
+
23
+ private
24
+
25
+ def backup_db_command(db_name)
26
+ %( pg_dump -U #{@user} \
27
+ -h #{@host} \
28
+ -p #{@port} #{db_name} > #{filepath db_name})
29
+ end
30
+
31
+ def create_db_command(db_name)
32
+ %( PGOPTIONS='--client-min-messages=warning' \
33
+ psql -U postgres \
34
+ -h #{@host} \
35
+ -p #{@port} \
36
+ -c "DROP DATABASE IF EXISTS #{db_name}" \
37
+ -c "CREATE DATABASE #{db_name}")
38
+ end
39
+
40
+ def restore_db_command(db_name)
41
+ %( psql -d #{db_name} \
42
+ -U #{@user} \
43
+ -h #{@host} \
44
+ -p #{@port} \
45
+ -f #{backup_file db_name})
46
+ end
47
+ end
@@ -1,10 +1,8 @@
1
1
  require 'thor'
2
2
  require "database/database"
3
- require "database/mysql"
4
3
  require "dbmgr/version"
5
- require "dbmgr/databases"
6
- require "dbmgr/backup"
7
- require "dbmgr/restore"
4
+ require 'dbmgr/mysql'
5
+ require 'dbmgr/postgresql'
8
6
 
9
7
  module Dbmgr
10
8
  end
@@ -0,0 +1,11 @@
1
+ require 'dbmgr/mysql/backup'
2
+ require 'dbmgr/mysql/restore'
3
+
4
+ module Dbmgr
5
+ class CLI < Thor
6
+
7
+ desc "mysql [COMMAND]", "Run commands on MySQL Databases"
8
+ subcommand "mysql", Dbmgr::MySQLCLI
9
+
10
+ end
11
+ end
@@ -1,10 +1,6 @@
1
-
2
1
  module Dbmgr
3
- class CLI < Thor
2
+ class MySQLCLI < Thor
4
3
 
5
- #
6
- # Backup
7
- #
8
4
  desc "backup [database_name]", "Create a backup"
9
5
  method_option :filename,
10
6
  aliases: ["f"],
@@ -36,20 +32,13 @@ module Dbmgr
36
32
  method_option :user,
37
33
  aliases: ["u"],
38
34
  type: :string,
39
- default: "root",
35
+ default: 'root',
40
36
  banner: "root",
41
37
  desc: "MySQL database user"
42
38
 
43
- method_option :database,
44
- aliases: "d",
45
- type: :string,
46
- default: "mysql",
47
- banner: "mysql",
48
- desc: "Database type"
49
-
50
39
  def backup db_name
51
40
  Database.new(options)
52
- .extend(DATABASES[options[:database].to_sym])
41
+ .extend(MySQL)
53
42
  .backup db_name
54
43
  end
55
44
 
@@ -1,10 +1,7 @@
1
1
 
2
2
  module Dbmgr
3
- class CLI < Thor
3
+ class MySQLCLI < Thor
4
4
 
5
- #
6
- # Restore
7
- #
8
5
  desc "restore", "Restore from a backup"
9
6
  method_option :backup,
10
7
  aliases: ["b"],
@@ -40,16 +37,9 @@ module Dbmgr
40
37
  banner: "root",
41
38
  desc: "MySQL database user"
42
39
 
43
- method_option :database,
44
- aliases: "d",
45
- type: :string,
46
- default: "mysql",
47
- banner: "mysql",
48
- desc: "Database type"
49
-
50
40
  def restore db_name
51
41
  Database.new(options)
52
- .extend(DATABASES[options[:database].to_sym])
42
+ .extend(MySQL)
53
43
  .restore db_name
54
44
  end
55
45
 
@@ -0,0 +1,11 @@
1
+ require 'dbmgr/postgresql/backup'
2
+ require 'dbmgr/postgresql/restore'
3
+
4
+ module Dbmgr
5
+ class CLI < Thor
6
+
7
+ desc "psql [COMMAND]", "Run commands on MySQL Databases"
8
+ subcommand "psql", Dbmgr::PostgreSQLCLI
9
+
10
+ end
11
+ end
@@ -0,0 +1,46 @@
1
+ module Dbmgr
2
+ class PostgreSQLCLI < Thor
3
+
4
+ desc "backup [database_name]", "Create a backup"
5
+ method_option :filename,
6
+ aliases: ["f"],
7
+ type: :string,
8
+ banner: "my_backup.sql",
9
+ desc: "Name of the backup created"
10
+
11
+ method_option :path,
12
+ aliases: ["p"],
13
+ type: :string,
14
+ default: "#{ENV["HOME"]}/.db_backups",
15
+ banner: "#{ENV["HOME"]}/.db_backups",
16
+ desc: "Directory of database backups"
17
+
18
+ method_option :port,
19
+ aliases: ["P"],
20
+ type: :numeric,
21
+ default: 5432,
22
+ banner: "5432",
23
+ desc: "PostgreSQL database port"
24
+
25
+ method_option :host,
26
+ aliases: ["h"],
27
+ type: :string,
28
+ default: "localhost",
29
+ banner: "localhost",
30
+ desc: "PostgreSQL database host"
31
+
32
+ method_option :user,
33
+ aliases: ["u"],
34
+ type: :string,
35
+ default: 'postgres',
36
+ banner: "postgres",
37
+ desc: "PostgreSQL database user"
38
+
39
+ def backup db_name
40
+ Database.new(options)
41
+ .extend(PostgreSQL)
42
+ .backup db_name
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,48 @@
1
+
2
+ module Dbmgr
3
+ class PostgreSQLCLI < Thor
4
+
5
+ desc "restore", "Restore from a backup"
6
+ method_option :backup,
7
+ aliases: ["b"],
8
+ type: :string,
9
+ banner: "#{ENV["HOME"]}/.db_backups/backup.sql",
10
+ desc: "Path to backup to restore from"
11
+
12
+ method_option :path,
13
+ aliases: ["p"],
14
+ type: :string,
15
+ default: "#{ENV["HOME"]}/.db_backups",
16
+ banner: "#{ENV["HOME"]}/.db_backups",
17
+ desc: "Directory of database backups"
18
+
19
+ method_option :port,
20
+ aliases: ["P"],
21
+ type: :numeric,
22
+ default: 5432,
23
+ banner: "5432",
24
+ desc: "PostgreSQL database port"
25
+
26
+ method_option :host,
27
+ aliases: ["h"],
28
+ type: :string,
29
+ default: "localhost",
30
+ banner: "localhost",
31
+ desc: "PostgreSQL database host"
32
+
33
+ method_option :user,
34
+ aliases: ["u"],
35
+ type: :string,
36
+ default: "postgres",
37
+ banner: "postgres",
38
+ desc: "PostgreSQL database user"
39
+
40
+ def restore db_name
41
+ Database.new(options)
42
+ .extend(PostgreSQL)
43
+ .restore db_name
44
+ end
45
+
46
+ end
47
+ end
48
+
@@ -1,3 +1,3 @@
1
1
  module Dbmgr
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,101 +1,116 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dbmgr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-20 00:00:00.000000000 Z
11
+ date: 2017-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
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
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.13'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.13'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: '5.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '5.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mysql2
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: 0.4.5
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.4.5
83
+ - !ruby/object:Gem::Dependency
84
+ name: pg
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 0.18.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 0.18.2
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: mocha
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - "~>"
101
+ - - ~>
88
102
  - !ruby/object:Gem::Version
89
103
  version: '1.2'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - "~>"
108
+ - - ~>
95
109
  - !ruby/object:Gem::Version
96
110
  version: '1.2'
97
- description: Create database backups to share with others across your dev team. Other
98
- developers can restore from backups you've created.
111
+ description: |-
112
+ Create database backups to share with others across your dev team.
113
+ Other developers can restore from backups you've created.
99
114
  email:
100
115
  - callahanrts@gmail.com
101
116
  executables:
@@ -103,8 +118,8 @@ executables:
103
118
  extensions: []
104
119
  extra_rdoc_files: []
105
120
  files:
106
- - ".gitignore"
107
- - ".travis.yml"
121
+ - .gitignore
122
+ - .travis.yml
108
123
  - CODE_OF_CONDUCT.md
109
124
  - Gemfile
110
125
  - LICENSE.txt
@@ -115,14 +130,16 @@ files:
115
130
  - bin/dbmgr-dev
116
131
  - bin/setup
117
132
  - dbmgr.gemspec
118
- - examples/.dbmgr
119
133
  - lib/database/database.rb
120
134
  - lib/database/mysql.rb
135
+ - lib/database/postgresql.rb
121
136
  - lib/dbmgr.rb
122
- - lib/dbmgr/backup.rb
123
- - lib/dbmgr/cli.rb
124
- - lib/dbmgr/databases.rb
125
- - lib/dbmgr/restore.rb
137
+ - lib/dbmgr/mysql.rb
138
+ - lib/dbmgr/mysql/backup.rb
139
+ - lib/dbmgr/mysql/restore.rb
140
+ - lib/dbmgr/postgresql.rb
141
+ - lib/dbmgr/postgresql/backup.rb
142
+ - lib/dbmgr/postgresql/restore.rb
126
143
  - lib/dbmgr/version.rb
127
144
  homepage: https://github.com/callahanrts/dbmgr
128
145
  licenses:
@@ -134,17 +151,17 @@ require_paths:
134
151
  - lib
135
152
  required_ruby_version: !ruby/object:Gem::Requirement
136
153
  requirements:
137
- - - "<"
154
+ - - <
138
155
  - !ruby/object:Gem::Version
139
156
  version: '2.5'
140
157
  required_rubygems_version: !ruby/object:Gem::Requirement
141
158
  requirements:
142
- - - ">="
159
+ - - '>='
143
160
  - !ruby/object:Gem::Version
144
161
  version: '0'
145
162
  requirements: []
146
163
  rubyforge_project:
147
- rubygems_version: 2.6.11
164
+ rubygems_version: 2.0.14.1
148
165
  signing_key:
149
166
  specification_version: 4
150
167
  summary: Create database backups and restore from previously created backups
@@ -1,8 +0,0 @@
1
- :dbmgr:
2
- :path: "~/Documents/shortstack_apps/db_backups"
3
-
4
- :mysql:
5
- :port: 3307
6
- :host: 'localhost'
7
- :user: "root"
8
-
@@ -1,11 +0,0 @@
1
- require 'thor'
2
- require 'dbmgr/cli/mysql'
3
-
4
- module Dbmgr
5
- class DbMgr < Thor
6
-
7
- desc "mysql [COMMAND]", "Run commands on MySQL Databases"
8
- subcommand "mysql", Dbmgr::CLI::Mysql
9
-
10
- end
11
- end
@@ -1,6 +0,0 @@
1
-
2
- module Dbmgr
3
- DATABASES = {
4
- mysql: MySQL
5
- }
6
- end