backhoe 0.7.0 → 0.8.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
  SHA256:
3
- metadata.gz: f4811e2bbdd26f3ea2c6f34bb5adc581f5016efd801e4e644f552d1fd9b47b60
4
- data.tar.gz: '072683778ab78bbce132f400afa1444dca8cd7da1bc5c7311b293d271f6b82c9'
3
+ metadata.gz: 100b63cead65cdff8255681cc6ea2e228efa706f48662dc08e0b594de8415dcc
4
+ data.tar.gz: d1abde4f85cbb93f40d94d7485184772d18d35669aa748fb27a529da43d2651f
5
5
  SHA512:
6
- metadata.gz: 5300b0689b2c0d508f4df5317c17e4d41db22976a04769452d2939ebf81016808f7ca6bb8bf5c621d781b9f83d759a156a0d3ed74d94f2a6ca1eec7efb401627
7
- data.tar.gz: 5720d0f905973ae2b12ff04d3e94a895996cb2df8dd47f4f029f022cdbb7e1036886cdaccf5a6c29a3d3f30f601f72131be36a120738341f2d208b3b99b3542d
6
+ metadata.gz: 3cb9ede3f8a8704611184842add89dd94755e53c2781c1aa8a0b529cb439bd2268bac4139beeac49fd6d10a7bae964e9496d44204de8de97ced4fd61b8d706b3
7
+ data.tar.gz: d8208ae606c0790f84adc8c501630ffc9bdf2be0775a6ec580a8c7dd788a06ebc4b6fa13fb043a5be71d32bbd7ed7bbb9dd68184d323c0af35b0431537d15160
@@ -5,17 +5,24 @@ jobs:
5
5
  strategy:
6
6
  fail-fast: false
7
7
  matrix:
8
- gemfile: [ activerecord_6.0, activerecord_6.1, activerecord_7.0 ]
9
- ruby: [ '3.0', 3.1, 3.2 ]
8
+ gemfile: [ activerecord_6.0, activerecord_6.1, activerecord_7.0, activerecord_7.1 ]
9
+ ruby: [ '3.0', 3.1, 3.2, 3.3 ]
10
10
 
11
11
  runs-on: ubuntu-20.04
12
12
  env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
13
13
  BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
14
+ POSTGRES_HOST_AUTH_METHOD: trust
15
+
14
16
  steps:
15
17
  - name: Set up MySQL
16
18
  run: |
17
- sudo /etc/init.d/mysql start
19
+ sudo service mysql start
18
20
  sudo mysql -uroot -proot -e"ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '';"
21
+ - name: Set up PostgreSQL
22
+ run: |
23
+ sudo service postgresql start
24
+ sudo -u postgres createuser --superuser runner
25
+ createdb runner
19
26
  - uses: actions/checkout@v3
20
27
  - uses: ruby/setup-ruby@v1
21
28
  with:
data/Appraisals CHANGED
@@ -10,3 +10,7 @@ appraise "activerecord-7.0" do
10
10
  gem "activerecord", "~>7.0.0"
11
11
  end
12
12
 
13
+ appraise "activerecord-7.1" do
14
+ gem "activerecord", "~>7.1.0"
15
+ end
16
+
data/backhoe.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "rspec", "~> 3.0"
28
28
  spec.add_development_dependency "appraisal"
29
29
  spec.add_development_dependency "mysql2"
30
+ spec.add_development_dependency "pg"
30
31
  spec.add_development_dependency "byebug"
31
32
  spec.add_development_dependency "timecop"
32
33
  end
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~>7.1.0"
6
+
7
+ gemspec path: "../"
@@ -26,6 +26,18 @@ module Backhoe
26
26
  config["database"]
27
27
  end
28
28
 
29
+ def adapter
30
+ config["adapter"]
31
+ end
32
+
33
+ def postgresql?
34
+ config["adapter"] == "postgresql"
35
+ end
36
+
37
+ def mysql?
38
+ %w[mysql2 trilogy].include?(config["adapter"])
39
+ end
40
+
29
41
  private
30
42
 
31
43
  def load_config
data/lib/backhoe/dump.rb CHANGED
@@ -11,7 +11,11 @@ module Backhoe
11
11
  end
12
12
 
13
13
  def call
14
+ if skip_tables.any?
15
+ raise NotImplementedError if database.postgresql?
16
+ end
14
17
  if skip_columns.any?
18
+ raise NotImplementedError if database.postgresql?
15
19
  SanitizedDatabase.new(skip_columns, file_path).dump do |tables|
16
20
  self.skip_tables += tables
17
21
  dump
@@ -24,7 +28,13 @@ module Backhoe
24
28
  private
25
29
 
26
30
  def dump
27
- sh "#{mysqldump} --no-create-db --single-transaction --quick -e #{skip_table_options} #{database.to_mysql_options} #{database.name} | #{pipe} > #{file_path}"
31
+ if database.mysql?
32
+ sh "#{mysqldump} --no-create-db --single-transaction --quick -e #{skip_table_options} #{database.to_mysql_options} #{database.name} | #{pipe} > #{file_path}"
33
+ elsif database.postgresql?
34
+ sh "#{pg_dump} --column-inserts #{database.name} | #{pipe} > #{file_path}"
35
+ else
36
+ raise "don't know how to dump #{database.adapter}"
37
+ end
28
38
  end
29
39
 
30
40
  private
@@ -35,6 +45,12 @@ module Backhoe
35
45
  cmd
36
46
  end
37
47
 
48
+ def pg_dump
49
+ cmd = `which pg_dump`.strip
50
+ raise RuntimeError, "Cannot find pg_dump." if cmd.blank?
51
+ cmd
52
+ end
53
+
38
54
  def pipe
39
55
  file_path =~ /\.gz$/ ? "gzip -9f" : "cat"
40
56
  end
data/lib/backhoe/load.rb CHANGED
@@ -5,12 +5,19 @@ module Backhoe
5
5
  include Rake::DSL
6
6
 
7
7
  def call
8
- sh command
8
+ case database.adapter
9
+ when "mysql2"
10
+ sh mysql_command
11
+ when "postgresql"
12
+ sh psql_command
13
+ else
14
+ raise "don't know how to load #{database.adapter}"
15
+ end
9
16
  end
10
17
 
11
18
  private
12
19
 
13
- def command
20
+ def mysql_command
14
21
  cmd = "#{cat} #{file_path} | "
15
22
  cmd += if drop_and_create
16
23
  "#{pipe} | #{mysql} #{database.to_mysql_options}"
@@ -19,6 +26,15 @@ module Backhoe
19
26
  end
20
27
  end
21
28
 
29
+ def psql_command
30
+ cmd = "#{cat} #{file_path} | "
31
+ if drop_and_create
32
+ cmd = "dropdb -f #{database.name}; createdb #{database.name}; #{cmd}"
33
+ end
34
+ cmd += "#{psql} -P pager=off -q -d#{database.name}"
35
+ cmd
36
+ end
37
+
22
38
  def cat
23
39
  file_path =~ /\.gz$/ ? "zcat" : "cat"
24
40
  end
@@ -40,6 +56,12 @@ module Backhoe
40
56
  raise RuntimeError, "Cannot find mysql." if cmd.blank?
41
57
  cmd
42
58
  end
59
+
60
+ def psql
61
+ cmd = `which psql`.strip
62
+ raise RuntimeError, "Cannot find psql." if cmd.blank?
63
+ cmd
64
+ end
43
65
  end
44
66
  end
45
67
 
@@ -1,3 +1,3 @@
1
1
  module Backhoe
2
- VERSION = "0.7.0"
2
+ VERSION = "0.8.0"
3
3
  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.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Geisel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-07 00:00:00.000000000 Z
11
+ date: 2024-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
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'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: byebug
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -130,6 +144,7 @@ files:
130
144
  - gemfiles/activerecord_6.0.gemfile
131
145
  - gemfiles/activerecord_6.1.gemfile
132
146
  - gemfiles/activerecord_7.0.gemfile
147
+ - gemfiles/activerecord_7.1.gemfile
133
148
  - lib/backhoe.rb
134
149
  - lib/backhoe/backup.rb
135
150
  - lib/backhoe/database.rb
@@ -155,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
170
  - !ruby/object:Gem::Version
156
171
  version: '0'
157
172
  requirements: []
158
- rubygems_version: 3.3.26
173
+ rubygems_version: 3.5.1
159
174
  signing_key:
160
175
  specification_version: 4
161
176
  summary: Dump and load current database to and from a file.