backhoe 0.5.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +8 -16
- data/.gitignore +2 -0
- data/Appraisals +0 -8
- data/README.md +15 -19
- data/backhoe.gemspec +2 -1
- data/lib/backhoe/backup.rb +28 -0
- data/lib/backhoe/database.rb +42 -0
- data/lib/backhoe/{mysql.rb → dump.rb} +34 -37
- data/lib/backhoe/load.rb +45 -0
- data/lib/backhoe/version.rb +1 -1
- data/lib/backhoe.rb +10 -29
- metadata +25 -18
- data/gemfiles/activerecord_5.1.gemfile +0 -7
- data/gemfiles/activerecord_5.1.gemfile.lock +0 -65
- data/gemfiles/activerecord_5.2.gemfile +0 -7
- data/gemfiles/activerecord_5.2.gemfile.lock +0 -65
- data/gemfiles/activerecord_6.0.gemfile.lock +0 -65
- data/gemfiles/activerecord_6.1.gemfile.lock +0 -64
- data/gemfiles/activerecord_7.0.gemfile.lock +0 -62
- data/lib/backhoe/base.rb +0 -14
- data/lib/backhoe/postgresql.rb +0 -18
- data/lib/backhoe/sqlite.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0da54b2284a8f477b20d0175cdb1023ffd28e03365598000e8cdf7403fb12dc4
|
4
|
+
data.tar.gz: a298c3b656be2bd65b52731ae749d27317b5bbd26e2401370a4ccbbfc22f73c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90cf47702daa8c845795bfba48175718016f3f929b34c3924d86ad3d51979ca91e2cfae4973d2839197ec333e8735c92b02347095256674f444998ec951118e8
|
7
|
+
data.tar.gz: 335c9e882afd7c4f8591f8b449b4cc1dc3205d74d7194a1112a0b2b9492af30223ebddad7c18583db96471ac2663e7b360eb569a40e8b9e91bd5ba6db4af32a2
|
data/.github/workflows/ci.yml
CHANGED
@@ -5,26 +5,18 @@ jobs:
|
|
5
5
|
strategy:
|
6
6
|
fail-fast: false
|
7
7
|
matrix:
|
8
|
-
gemfile: [
|
9
|
-
ruby: [
|
10
|
-
exclude:
|
11
|
-
- gemfile: activerecord_5.1
|
12
|
-
ruby: 3.0
|
13
|
-
- gemfile: activerecord_5.2
|
14
|
-
ruby: 3.0
|
15
|
-
- gemfile: activerecord_7.0
|
16
|
-
ruby: 2.6
|
8
|
+
gemfile: [ activerecord_6.0, activerecord_6.1, activerecord_7.0 ]
|
9
|
+
ruby: [ '3.0', 3.1, 3.2 ]
|
17
10
|
|
18
|
-
runs-on: ubuntu-
|
11
|
+
runs-on: ubuntu-20.04
|
19
12
|
env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
|
20
13
|
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
|
21
14
|
steps:
|
22
|
-
-
|
23
|
-
|
24
|
-
|
25
|
-
mysql-
|
26
|
-
|
27
|
-
socket=/tmp/mysql.sock
|
15
|
+
- name: Set up MySQL
|
16
|
+
run: |
|
17
|
+
sudo /etc/init.d/mysql start
|
18
|
+
sudo mysql -uroot -proot -e"ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '';"
|
19
|
+
- uses: actions/checkout@v3
|
28
20
|
- uses: ruby/setup-ruby@v1
|
29
21
|
with:
|
30
22
|
ruby-version: ${{ matrix.ruby }}
|
data/.gitignore
CHANGED
data/Appraisals
CHANGED
data/README.md
CHANGED
@@ -3,31 +3,27 @@
|
|
3
3
|
|
4
4
|
Dump and load current ActiveRecord database to and from a file.
|
5
5
|
|
6
|
-
##
|
7
|
-
|
8
|
-
Add this line to your application's Gemfile:
|
6
|
+
## Usage
|
9
7
|
|
10
8
|
```ruby
|
11
|
-
|
9
|
+
# Dump
|
10
|
+
Backhoe.dump "data.sql" # dumps db to db/data.sql
|
11
|
+
Backhoe.dump "data.sql.gz" # => can also dump a gzipped sql file
|
12
|
+
Backhoe.dump "data.sql", skip_tables: [:comments], skip_columns: { users: [:password] } # can skip whole tables or just specific columns
|
13
|
+
|
14
|
+
# Load
|
15
|
+
Backhoe.load "data.sql" # loads db from db/data.sql
|
16
|
+
Backhoe.load "data.sql.gz" # => can also load a gzipped sql file
|
17
|
+
Backhoe.load "data.sql", drop_and_create: true # injects DROP and CREATE statements into the SQL invocation
|
18
|
+
|
19
|
+
# Backup db to S3
|
20
|
+
Backhoe.backup "bucket-name/folder" # => dumps db to e.g. s3://bucket-name/folder/2023-04-09T16:41:26Z.sql.gz via AWS CLI, assuming that credentials are already configured.
|
21
|
+
Backhoe.backup "bucket-name/folder", access_key: "abc123", secret_key: "def456" # => manually specify AWS creds
|
12
22
|
```
|
13
23
|
|
14
|
-
And then execute:
|
15
|
-
|
16
|
-
$ bundle
|
17
|
-
|
18
|
-
Or install it yourself as:
|
19
|
-
|
20
|
-
$ gem install backhoe
|
21
|
-
|
22
|
-
## Usage
|
23
|
-
|
24
|
-
TODO: Write usage instructions here
|
25
|
-
|
26
24
|
## Development
|
27
25
|
|
28
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake
|
29
|
-
|
30
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
26
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
31
27
|
|
32
28
|
## Contributing
|
33
29
|
|
data/backhoe.gemspec
CHANGED
@@ -23,9 +23,10 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_dependency "activerecord"
|
25
25
|
|
26
|
-
spec.add_development_dependency "rake"
|
26
|
+
spec.add_development_dependency "rake"
|
27
27
|
spec.add_development_dependency "rspec", "~> 3.0"
|
28
28
|
spec.add_development_dependency "appraisal"
|
29
29
|
spec.add_development_dependency "mysql2"
|
30
30
|
spec.add_development_dependency "byebug"
|
31
|
+
spec.add_development_dependency "timecop"
|
31
32
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Backhoe
|
2
|
+
class Backup < Struct.new(:s3_path, :access_key, :secret_key)
|
3
|
+
def call
|
4
|
+
Backhoe.dump path
|
5
|
+
Kernel.system "#{creds} aws s3 mv #{path} s3://#{s3_path}/#{filename}".strip
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def creds
|
11
|
+
if access_key && secret_key
|
12
|
+
"AWS_ACCESS_KEY_ID=#{access_key} AWS_SECRET_ACCESS_KEY=#{secret_key}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def path
|
17
|
+
"/tmp/#{filename}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def filename
|
21
|
+
@filename ||= begin
|
22
|
+
require "time"
|
23
|
+
"#{Time.now.utc.iso8601}.sql.gz"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Backhoe
|
2
|
+
class Database
|
3
|
+
def initialize config=load_config
|
4
|
+
@config = config
|
5
|
+
end
|
6
|
+
|
7
|
+
attr_reader :config
|
8
|
+
|
9
|
+
def current_environment_name
|
10
|
+
[
|
11
|
+
defined?(Rails) && Rails.env,
|
12
|
+
ENV["RAILS_ENV"],
|
13
|
+
"development",
|
14
|
+
].find(&:itself)
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_mysql_options
|
18
|
+
options = " -u #{config["username"]}"
|
19
|
+
options += " -p'#{config["password"]}'" if config["password"]
|
20
|
+
options += " -h #{config["host"]}" if config["host"]
|
21
|
+
options += " -S #{config["socket"]}" if config["socket"]
|
22
|
+
options
|
23
|
+
end
|
24
|
+
|
25
|
+
def name
|
26
|
+
config["database"]
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def load_config
|
32
|
+
configs = ActiveRecord::Base.configurations
|
33
|
+
config = configs.configs_for(env_name: current_environment_name).first
|
34
|
+
hash = if config.respond_to?(:configuration_hash)
|
35
|
+
config.configuration_hash # rails 7
|
36
|
+
else
|
37
|
+
config.config # rails 6
|
38
|
+
end
|
39
|
+
HashWithIndifferentAccess.new(hash)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,50 +1,49 @@
|
|
1
|
-
require "
|
1
|
+
require "rake"
|
2
2
|
|
3
3
|
module Backhoe
|
4
|
-
class
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
class Dump < Struct.new(:database, :file_path, :skip_tables, :skip_columns)
|
5
|
+
include Rake::DSL
|
6
|
+
|
7
|
+
def initialize *args
|
8
|
+
super
|
9
|
+
self.skip_tables ||= []
|
10
|
+
self.skip_columns ||= {}
|
9
11
|
end
|
10
12
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
def call
|
14
|
+
if skip_columns.any?
|
15
|
+
SanitizedDatabase.new(skip_columns, file_path).dump do |tables|
|
16
|
+
self.skip_tables += tables
|
17
|
+
dump
|
18
|
+
end
|
19
|
+
else
|
20
|
+
dump
|
21
|
+
end
|
15
22
|
end
|
16
23
|
|
17
24
|
private
|
18
25
|
|
19
|
-
def
|
20
|
-
|
21
|
-
"--ignore-table=#{config["database"]}.#{table}"
|
22
|
-
end.join(" ")
|
26
|
+
def dump
|
27
|
+
sh "#{mysqldump} --no-create-db --single-transaction --quick -e #{skip_table_options} #{database.to_mysql_options} #{database.name} | #{pipe} > #{file_path}"
|
23
28
|
end
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def mysqldump
|
33
|
+
cmd = `which mysqldump`.strip
|
34
|
+
raise RuntimeError, "Cannot find mysqldump." if cmd.blank?
|
35
|
+
cmd
|
31
36
|
end
|
32
|
-
end
|
33
37
|
|
34
|
-
|
35
|
-
|
36
|
-
if skip_columns = options.delete(:skip_columns)
|
37
|
-
SanitizedDatabase.new(skip_columns, file_path).dump do |skip_tables|
|
38
|
-
options[:skip_tables] ||= []
|
39
|
-
options[:skip_tables] += skip_tables
|
40
|
-
super **options
|
41
|
-
end
|
42
|
-
else
|
43
|
-
super
|
44
|
-
end
|
38
|
+
def pipe
|
39
|
+
file_path =~ /\.gz$/ ? "gzip -9f" : "cat"
|
45
40
|
end
|
46
41
|
|
47
|
-
|
42
|
+
def skip_table_options
|
43
|
+
skip_tables.map do |table|
|
44
|
+
"--ignore-table=#{database.name}.#{table}"
|
45
|
+
end.join(" ")
|
46
|
+
end
|
48
47
|
|
49
48
|
class SanitizedDatabase < Struct.new(:config, :file_path)
|
50
49
|
def dump
|
@@ -89,8 +88,6 @@ module Backhoe
|
|
89
88
|
end
|
90
89
|
end
|
91
90
|
end
|
92
|
-
Mysql.prepend MysqlSkipColumns
|
93
|
-
|
94
|
-
Mysql2 = Mysql
|
95
91
|
end
|
96
92
|
|
93
|
+
|
data/lib/backhoe/load.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require "rake"
|
2
|
+
|
3
|
+
module Backhoe
|
4
|
+
class Load < Struct.new(:database, :file_path, :drop_and_create)
|
5
|
+
include Rake::DSL
|
6
|
+
|
7
|
+
def call
|
8
|
+
sh command
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def command
|
14
|
+
cmd = "#{cat} #{file_path} | "
|
15
|
+
cmd += if drop_and_create
|
16
|
+
"#{pipe} | #{mysql} #{database.to_mysql_options}"
|
17
|
+
else
|
18
|
+
"#{mysql} #{database.to_mysql_options} #{database.name}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def cat
|
23
|
+
file_path =~ /\.gz$/ ? "zcat" : "cat"
|
24
|
+
end
|
25
|
+
|
26
|
+
def pipe
|
27
|
+
if drop_and_create
|
28
|
+
"(echo -n '#{<<~SQL}' && cat)"
|
29
|
+
DROP DATABASE IF EXISTS #{database.name};
|
30
|
+
CREATE DATABASE #{database.name};
|
31
|
+
USE #{database.name};
|
32
|
+
SQL
|
33
|
+
else
|
34
|
+
"cat"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def mysql
|
39
|
+
cmd = `which mysql`.strip
|
40
|
+
raise RuntimeError, "Cannot find mysql." if cmd.blank?
|
41
|
+
cmd
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
data/lib/backhoe/version.rb
CHANGED
data/lib/backhoe.rb
CHANGED
@@ -1,41 +1,22 @@
|
|
1
1
|
require "backhoe/version"
|
2
|
-
require "backhoe/
|
3
|
-
require "backhoe/
|
4
|
-
require "backhoe/
|
2
|
+
require "backhoe/dump"
|
3
|
+
require "backhoe/load"
|
4
|
+
require "backhoe/backup"
|
5
|
+
require "backhoe/database"
|
5
6
|
require "active_record"
|
6
7
|
|
7
8
|
module Backhoe
|
8
|
-
mattr_accessor(:file_path) { "db/data.sql" }
|
9
|
-
|
10
9
|
class << self
|
11
|
-
def dump file_path:
|
12
|
-
|
10
|
+
def dump file_path, skip_tables: [], skip_columns: {}
|
11
|
+
Dump.new(Database.new, file_path, skip_tables, skip_columns).call
|
13
12
|
end
|
14
13
|
|
15
|
-
def load file_path:
|
16
|
-
|
14
|
+
def load file_path, drop_and_create: false
|
15
|
+
Load.new(Database.new, file_path, drop_and_create).call
|
17
16
|
end
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
def autodetect_adapter
|
22
|
-
const_get(database_config["adapter"].camelize)
|
23
|
-
end
|
24
|
-
|
25
|
-
def database_config
|
26
|
-
env = Rails.env || "development"
|
27
|
-
configs = ActiveRecord::Base.configurations
|
28
|
-
hash = if configs.respond_to?(:configs_for)
|
29
|
-
config = configs.configs_for(env_name: env).first
|
30
|
-
if config.respond_to?(:configuration_hash)
|
31
|
-
config.configuration_hash # rails 7
|
32
|
-
else
|
33
|
-
config.config # rails 6
|
34
|
-
end
|
35
|
-
else
|
36
|
-
configs[env] # rails 5
|
37
|
-
end
|
38
|
-
HashWithIndifferentAccess.new(hash)
|
18
|
+
def backup s3_path, access_key: nil, secret_key: nil
|
19
|
+
Backup.new(s3_path, access_key, secret_key).call
|
39
20
|
end
|
40
21
|
end
|
41
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backhoe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micah Geisel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
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
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: timecop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
description: Dump and load current database to and from a file.
|
98
112
|
email:
|
99
113
|
- micah@botandrose.com
|
@@ -113,21 +127,14 @@ files:
|
|
113
127
|
- bin/console
|
114
128
|
- bin/setup
|
115
129
|
- gemfiles/.bundle/config
|
116
|
-
- gemfiles/activerecord_5.1.gemfile
|
117
|
-
- gemfiles/activerecord_5.1.gemfile.lock
|
118
|
-
- gemfiles/activerecord_5.2.gemfile
|
119
|
-
- gemfiles/activerecord_5.2.gemfile.lock
|
120
130
|
- gemfiles/activerecord_6.0.gemfile
|
121
|
-
- gemfiles/activerecord_6.0.gemfile.lock
|
122
131
|
- gemfiles/activerecord_6.1.gemfile
|
123
|
-
- gemfiles/activerecord_6.1.gemfile.lock
|
124
132
|
- gemfiles/activerecord_7.0.gemfile
|
125
|
-
- gemfiles/activerecord_7.0.gemfile.lock
|
126
133
|
- lib/backhoe.rb
|
127
|
-
- lib/backhoe/
|
128
|
-
- lib/backhoe/
|
129
|
-
- lib/backhoe/
|
130
|
-
- lib/backhoe/
|
134
|
+
- lib/backhoe/backup.rb
|
135
|
+
- lib/backhoe/database.rb
|
136
|
+
- lib/backhoe/dump.rb
|
137
|
+
- lib/backhoe/load.rb
|
131
138
|
- lib/backhoe/version.rb
|
132
139
|
homepage: https://github.com/botandrose/backhoe
|
133
140
|
licenses:
|
@@ -148,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
155
|
- !ruby/object:Gem::Version
|
149
156
|
version: '0'
|
150
157
|
requirements: []
|
151
|
-
rubygems_version: 3.
|
158
|
+
rubygems_version: 3.3.26
|
152
159
|
signing_key:
|
153
160
|
specification_version: 4
|
154
161
|
summary: Dump and load current database to and from a file.
|
@@ -1,65 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ..
|
3
|
-
specs:
|
4
|
-
backhoe (0.4.1)
|
5
|
-
activerecord
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activemodel (5.1.7)
|
11
|
-
activesupport (= 5.1.7)
|
12
|
-
activerecord (5.1.7)
|
13
|
-
activemodel (= 5.1.7)
|
14
|
-
activesupport (= 5.1.7)
|
15
|
-
arel (~> 8.0)
|
16
|
-
activesupport (5.1.7)
|
17
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
-
i18n (>= 0.7, < 2)
|
19
|
-
minitest (~> 5.1)
|
20
|
-
tzinfo (~> 1.1)
|
21
|
-
appraisal (2.3.0)
|
22
|
-
bundler
|
23
|
-
rake
|
24
|
-
thor (>= 0.14.0)
|
25
|
-
arel (8.0.0)
|
26
|
-
byebug (11.1.3)
|
27
|
-
concurrent-ruby (1.1.8)
|
28
|
-
diff-lcs (1.4.4)
|
29
|
-
i18n (1.8.7)
|
30
|
-
concurrent-ruby (~> 1.0)
|
31
|
-
minitest (5.14.3)
|
32
|
-
mysql2 (0.5.3)
|
33
|
-
rake (10.5.0)
|
34
|
-
rspec (3.10.0)
|
35
|
-
rspec-core (~> 3.10.0)
|
36
|
-
rspec-expectations (~> 3.10.0)
|
37
|
-
rspec-mocks (~> 3.10.0)
|
38
|
-
rspec-core (3.10.1)
|
39
|
-
rspec-support (~> 3.10.0)
|
40
|
-
rspec-expectations (3.10.1)
|
41
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
42
|
-
rspec-support (~> 3.10.0)
|
43
|
-
rspec-mocks (3.10.2)
|
44
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
45
|
-
rspec-support (~> 3.10.0)
|
46
|
-
rspec-support (3.10.2)
|
47
|
-
thor (1.1.0)
|
48
|
-
thread_safe (0.3.6)
|
49
|
-
tzinfo (1.2.9)
|
50
|
-
thread_safe (~> 0.1)
|
51
|
-
|
52
|
-
PLATFORMS
|
53
|
-
ruby
|
54
|
-
|
55
|
-
DEPENDENCIES
|
56
|
-
activerecord (~> 5.1.0)
|
57
|
-
appraisal
|
58
|
-
backhoe!
|
59
|
-
byebug
|
60
|
-
mysql2
|
61
|
-
rake (~> 10.0)
|
62
|
-
rspec (~> 3.0)
|
63
|
-
|
64
|
-
BUNDLED WITH
|
65
|
-
2.2.32
|
@@ -1,65 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ..
|
3
|
-
specs:
|
4
|
-
backhoe (0.4.1)
|
5
|
-
activerecord
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activemodel (5.2.4.4)
|
11
|
-
activesupport (= 5.2.4.4)
|
12
|
-
activerecord (5.2.4.4)
|
13
|
-
activemodel (= 5.2.4.4)
|
14
|
-
activesupport (= 5.2.4.4)
|
15
|
-
arel (>= 9.0)
|
16
|
-
activesupport (5.2.4.4)
|
17
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
-
i18n (>= 0.7, < 2)
|
19
|
-
minitest (~> 5.1)
|
20
|
-
tzinfo (~> 1.1)
|
21
|
-
appraisal (2.3.0)
|
22
|
-
bundler
|
23
|
-
rake
|
24
|
-
thor (>= 0.14.0)
|
25
|
-
arel (9.0.0)
|
26
|
-
byebug (11.1.3)
|
27
|
-
concurrent-ruby (1.1.8)
|
28
|
-
diff-lcs (1.4.4)
|
29
|
-
i18n (1.8.7)
|
30
|
-
concurrent-ruby (~> 1.0)
|
31
|
-
minitest (5.14.3)
|
32
|
-
mysql2 (0.5.3)
|
33
|
-
rake (10.5.0)
|
34
|
-
rspec (3.10.0)
|
35
|
-
rspec-core (~> 3.10.0)
|
36
|
-
rspec-expectations (~> 3.10.0)
|
37
|
-
rspec-mocks (~> 3.10.0)
|
38
|
-
rspec-core (3.10.1)
|
39
|
-
rspec-support (~> 3.10.0)
|
40
|
-
rspec-expectations (3.10.1)
|
41
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
42
|
-
rspec-support (~> 3.10.0)
|
43
|
-
rspec-mocks (3.10.2)
|
44
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
45
|
-
rspec-support (~> 3.10.0)
|
46
|
-
rspec-support (3.10.2)
|
47
|
-
thor (1.1.0)
|
48
|
-
thread_safe (0.3.6)
|
49
|
-
tzinfo (1.2.9)
|
50
|
-
thread_safe (~> 0.1)
|
51
|
-
|
52
|
-
PLATFORMS
|
53
|
-
ruby
|
54
|
-
|
55
|
-
DEPENDENCIES
|
56
|
-
activerecord (~> 5.2.0)
|
57
|
-
appraisal
|
58
|
-
backhoe!
|
59
|
-
byebug
|
60
|
-
mysql2
|
61
|
-
rake (~> 10.0)
|
62
|
-
rspec (~> 3.0)
|
63
|
-
|
64
|
-
BUNDLED WITH
|
65
|
-
2.2.32
|
@@ -1,65 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ..
|
3
|
-
specs:
|
4
|
-
backhoe (0.4.1)
|
5
|
-
activerecord
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activemodel (6.0.3.4)
|
11
|
-
activesupport (= 6.0.3.4)
|
12
|
-
activerecord (6.0.3.4)
|
13
|
-
activemodel (= 6.0.3.4)
|
14
|
-
activesupport (= 6.0.3.4)
|
15
|
-
activesupport (6.0.3.4)
|
16
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
-
i18n (>= 0.7, < 2)
|
18
|
-
minitest (~> 5.1)
|
19
|
-
tzinfo (~> 1.1)
|
20
|
-
zeitwerk (~> 2.2, >= 2.2.2)
|
21
|
-
appraisal (2.3.0)
|
22
|
-
bundler
|
23
|
-
rake
|
24
|
-
thor (>= 0.14.0)
|
25
|
-
byebug (11.1.3)
|
26
|
-
concurrent-ruby (1.1.8)
|
27
|
-
diff-lcs (1.4.4)
|
28
|
-
i18n (1.8.7)
|
29
|
-
concurrent-ruby (~> 1.0)
|
30
|
-
minitest (5.14.3)
|
31
|
-
mysql2 (0.5.3)
|
32
|
-
rake (10.5.0)
|
33
|
-
rspec (3.10.0)
|
34
|
-
rspec-core (~> 3.10.0)
|
35
|
-
rspec-expectations (~> 3.10.0)
|
36
|
-
rspec-mocks (~> 3.10.0)
|
37
|
-
rspec-core (3.10.1)
|
38
|
-
rspec-support (~> 3.10.0)
|
39
|
-
rspec-expectations (3.10.1)
|
40
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
41
|
-
rspec-support (~> 3.10.0)
|
42
|
-
rspec-mocks (3.10.2)
|
43
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
-
rspec-support (~> 3.10.0)
|
45
|
-
rspec-support (3.10.2)
|
46
|
-
thor (1.1.0)
|
47
|
-
thread_safe (0.3.6)
|
48
|
-
tzinfo (1.2.9)
|
49
|
-
thread_safe (~> 0.1)
|
50
|
-
zeitwerk (2.4.2)
|
51
|
-
|
52
|
-
PLATFORMS
|
53
|
-
ruby
|
54
|
-
|
55
|
-
DEPENDENCIES
|
56
|
-
activerecord (~> 6.0.0)
|
57
|
-
appraisal
|
58
|
-
backhoe!
|
59
|
-
byebug
|
60
|
-
mysql2
|
61
|
-
rake (~> 10.0)
|
62
|
-
rspec (~> 3.0)
|
63
|
-
|
64
|
-
BUNDLED WITH
|
65
|
-
2.2.32
|
@@ -1,64 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ..
|
3
|
-
specs:
|
4
|
-
backhoe (0.4.1)
|
5
|
-
activerecord
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activemodel (6.1.1)
|
11
|
-
activesupport (= 6.1.1)
|
12
|
-
activerecord (6.1.1)
|
13
|
-
activemodel (= 6.1.1)
|
14
|
-
activesupport (= 6.1.1)
|
15
|
-
activesupport (6.1.1)
|
16
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
-
i18n (>= 1.6, < 2)
|
18
|
-
minitest (>= 5.1)
|
19
|
-
tzinfo (~> 2.0)
|
20
|
-
zeitwerk (~> 2.3)
|
21
|
-
appraisal (2.3.0)
|
22
|
-
bundler
|
23
|
-
rake
|
24
|
-
thor (>= 0.14.0)
|
25
|
-
byebug (11.1.3)
|
26
|
-
concurrent-ruby (1.1.8)
|
27
|
-
diff-lcs (1.4.4)
|
28
|
-
i18n (1.8.7)
|
29
|
-
concurrent-ruby (~> 1.0)
|
30
|
-
minitest (5.14.3)
|
31
|
-
mysql2 (0.5.3)
|
32
|
-
rake (10.5.0)
|
33
|
-
rspec (3.10.0)
|
34
|
-
rspec-core (~> 3.10.0)
|
35
|
-
rspec-expectations (~> 3.10.0)
|
36
|
-
rspec-mocks (~> 3.10.0)
|
37
|
-
rspec-core (3.10.1)
|
38
|
-
rspec-support (~> 3.10.0)
|
39
|
-
rspec-expectations (3.10.1)
|
40
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
41
|
-
rspec-support (~> 3.10.0)
|
42
|
-
rspec-mocks (3.10.2)
|
43
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
-
rspec-support (~> 3.10.0)
|
45
|
-
rspec-support (3.10.2)
|
46
|
-
thor (1.1.0)
|
47
|
-
tzinfo (2.0.4)
|
48
|
-
concurrent-ruby (~> 1.0)
|
49
|
-
zeitwerk (2.4.2)
|
50
|
-
|
51
|
-
PLATFORMS
|
52
|
-
ruby
|
53
|
-
|
54
|
-
DEPENDENCIES
|
55
|
-
activerecord (~> 6.1.0)
|
56
|
-
appraisal
|
57
|
-
backhoe!
|
58
|
-
byebug
|
59
|
-
mysql2
|
60
|
-
rake (~> 10.0)
|
61
|
-
rspec (~> 3.0)
|
62
|
-
|
63
|
-
BUNDLED WITH
|
64
|
-
2.2.32
|
@@ -1,62 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ..
|
3
|
-
specs:
|
4
|
-
backhoe (0.4.1)
|
5
|
-
activerecord
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activemodel (7.0.1)
|
11
|
-
activesupport (= 7.0.1)
|
12
|
-
activerecord (7.0.1)
|
13
|
-
activemodel (= 7.0.1)
|
14
|
-
activesupport (= 7.0.1)
|
15
|
-
activesupport (7.0.1)
|
16
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
-
i18n (>= 1.6, < 2)
|
18
|
-
minitest (>= 5.1)
|
19
|
-
tzinfo (~> 2.0)
|
20
|
-
appraisal (2.4.1)
|
21
|
-
bundler
|
22
|
-
rake
|
23
|
-
thor (>= 0.14.0)
|
24
|
-
byebug (11.1.3)
|
25
|
-
concurrent-ruby (1.1.9)
|
26
|
-
diff-lcs (1.5.0)
|
27
|
-
i18n (1.8.11)
|
28
|
-
concurrent-ruby (~> 1.0)
|
29
|
-
minitest (5.15.0)
|
30
|
-
mysql2 (0.5.3)
|
31
|
-
rake (10.5.0)
|
32
|
-
rspec (3.10.0)
|
33
|
-
rspec-core (~> 3.10.0)
|
34
|
-
rspec-expectations (~> 3.10.0)
|
35
|
-
rspec-mocks (~> 3.10.0)
|
36
|
-
rspec-core (3.10.1)
|
37
|
-
rspec-support (~> 3.10.0)
|
38
|
-
rspec-expectations (3.10.2)
|
39
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
40
|
-
rspec-support (~> 3.10.0)
|
41
|
-
rspec-mocks (3.10.2)
|
42
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
-
rspec-support (~> 3.10.0)
|
44
|
-
rspec-support (3.10.3)
|
45
|
-
thor (1.2.1)
|
46
|
-
tzinfo (2.0.4)
|
47
|
-
concurrent-ruby (~> 1.0)
|
48
|
-
|
49
|
-
PLATFORMS
|
50
|
-
x86_64-linux
|
51
|
-
|
52
|
-
DEPENDENCIES
|
53
|
-
activerecord (~> 7.0.0)
|
54
|
-
appraisal
|
55
|
-
backhoe!
|
56
|
-
byebug
|
57
|
-
mysql2
|
58
|
-
rake (~> 10.0)
|
59
|
-
rspec (~> 3.0)
|
60
|
-
|
61
|
-
BUNDLED WITH
|
62
|
-
2.2.32
|
data/lib/backhoe/base.rb
DELETED
data/lib/backhoe/postgresql.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require "backhoe/base"
|
2
|
-
|
3
|
-
module Backhoe
|
4
|
-
class Postgresql < Base
|
5
|
-
def dump **_
|
6
|
-
pg_dump = `which pg_dump`.strip
|
7
|
-
raise RuntimeError, "Cannot find pg_dump." if pg_dump.blank?
|
8
|
-
sh "#{pg_dump} -c -f#{file_path} #{database}"
|
9
|
-
end
|
10
|
-
|
11
|
-
def load
|
12
|
-
psql = `which psql`.strip
|
13
|
-
raise RuntimeError, "Cannot find psql." if psql.blank?
|
14
|
-
sh "#{psql} -P pager=off -q -d#{database} -f#{file_path}"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
data/lib/backhoe/sqlite.rb
DELETED