dbmgr 0.1.4 → 0.2.0

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