backhoe 0.9.0 → 0.10.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
  SHA256:
3
- metadata.gz: '018ae4becb6f27ba167be3ab17101cdbb2b08f42eed108141b89e5ee634a133d'
4
- data.tar.gz: f760a73b1f983fb050fbf7b4be493c7a944455c8f76e623278840d44b601f2d8
3
+ metadata.gz: 779de972f23a178e054d789eb0f09c70b7200b87468a4c85d14b53de9eddcfb8
4
+ data.tar.gz: 9621e4f611daa56dc8d34abc4285b9e86dbc79d3391b0463b39cdb663b02eee2
5
5
  SHA512:
6
- metadata.gz: a96b4af2ae37f29fc611aa81a8194587b005d182ad5f7b298c84aab0a917a8e77acafea234acbfbc498000656ac3898451adbc7ceb986417c4ad6457c6469962
7
- data.tar.gz: 81dda2749d1d4b53ac8b57d784942f35941c2c9757a5295630f754bc95f9dc816697d2ea9c3572819c4c8215e4c7cde17f27197638343ab136e20e062827cef8
6
+ metadata.gz: f1ee8947074606e2d4e4eca671883cd0c3ceab65de25dfd2228eada96888c316cd756dac556c3dd0a5ee16442dee8163155cb14498917355de67201bc505a8f5
7
+ data.tar.gz: e050249511d82941b33713b915399f51264608f32a40ae9cbf7bd58dd592eafe45a9ee99e22ec6e9c80df372211ee57534b6dcf831ca6ab4c29a3d305e7968e3
@@ -8,7 +8,7 @@ jobs:
8
8
  gemfile: [ activerecord_6.0, activerecord_6.1, activerecord_7.0, activerecord_7.1 ]
9
9
  ruby: [ '3.0', 3.1, 3.2, 3.3 ]
10
10
 
11
- runs-on: ubuntu-20.04
11
+ runs-on: ubuntu-22.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
14
  POSTGRES_HOST_AUTH_METHOD: trust
data/backhoe.gemspec CHANGED
@@ -30,4 +30,5 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency "pg"
31
31
  spec.add_development_dependency "byebug"
32
32
  spec.add_development_dependency "timecop"
33
+ spec.add_development_dependency "webrick"
33
34
  end
data/lib/backhoe/dump.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require "rake"
2
2
 
3
3
  module Backhoe
4
- class Dump < Struct.new(:database, :file_path, :skip_tables, :skip_columns)
4
+ class Dump < Struct.new(:database, :path, :skip_tables, :skip_columns)
5
5
  include Rake::DSL
6
6
 
7
7
  def initialize *args
@@ -16,7 +16,7 @@ module Backhoe
16
16
  end
17
17
  if skip_columns.any?
18
18
  raise NotImplementedError if database.postgresql?
19
- SanitizedDatabase.new(skip_columns, file_path).dump do |tables|
19
+ SanitizedDatabase.new(skip_columns, path).dump do |tables|
20
20
  self.skip_tables += tables
21
21
  dump
22
22
  end
@@ -29,9 +29,9 @@ module Backhoe
29
29
 
30
30
  def dump
31
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}"
32
+ sh "#{mysqldump} --no-create-db --single-transaction --quick -e #{skip_table_options} #{database.to_mysql_options} #{database.name} | #{pipe} #{target}"
33
33
  elsif database.postgresql?
34
- sh "#{pg_dump} --column-inserts #{database.name} | #{pipe} > #{file_path}"
34
+ sh "#{pg_dump} --column-inserts #{database.name} | #{pipe} #{target}"
35
35
  else
36
36
  raise "don't know how to dump #{database.adapter}"
37
37
  end
@@ -39,6 +39,14 @@ module Backhoe
39
39
 
40
40
  private
41
41
 
42
+ def target
43
+ if path =~ /^https?:\/\//
44
+ "| curl -X PUT -H 'Content-Type: application/octet-stream' --data-binary @- '#{path}'"
45
+ else
46
+ "> #{path}"
47
+ end
48
+ end
49
+
42
50
  def mysqldump
43
51
  cmd = `which mysqldump`.strip
44
52
  raise RuntimeError, "Cannot find mysqldump." if cmd.blank?
@@ -52,7 +60,7 @@ module Backhoe
52
60
  end
53
61
 
54
62
  def pipe
55
- file_path =~ /\.gz$/ ? "gzip -9f" : "cat"
63
+ path =~ /\.gz\b/ ? "gzip -9f" : "cat"
56
64
  end
57
65
 
58
66
  def skip_table_options
@@ -61,13 +69,13 @@ module Backhoe
61
69
  end.join(" ")
62
70
  end
63
71
 
64
- class SanitizedDatabase < Struct.new(:config, :file_path)
72
+ class SanitizedDatabase < Struct.new(:config, :path)
65
73
  def dump
66
74
  with_sanitized_tables do
67
75
  yield skip_tables
68
76
  end
69
77
  skip_tables.each do |table|
70
- File.write file_path, "RENAME TABLE `sanitized_#{table}` TO `#{table}`;", mode: "a"
78
+ File.write path, "RENAME TABLE `sanitized_#{table}` TO `#{table}`;", mode: "a"
71
79
  end
72
80
  end
73
81
 
data/lib/backhoe/load.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require "rake"
2
2
 
3
3
  module Backhoe
4
- class Load < Struct.new(:database, :file_path, :drop_and_create)
4
+ class Load < Struct.new(:database, :path, :drop_and_create)
5
5
  include Rake::DSL
6
6
 
7
7
  def call
@@ -18,7 +18,7 @@ module Backhoe
18
18
  private
19
19
 
20
20
  def mysql_command
21
- cmd = "#{cat} #{file_path} | "
21
+ cmd = "#{cat} #{path} | "
22
22
  cmd += if drop_and_create
23
23
  "#{pipe} | #{mysql} #{database.to_mysql_options}"
24
24
  else
@@ -27,7 +27,7 @@ module Backhoe
27
27
  end
28
28
 
29
29
  def psql_command
30
- cmd = "#{cat} #{file_path} | "
30
+ cmd = "#{cat} #{path} | "
31
31
  if drop_and_create
32
32
  cmd = "dropdb -f #{database.name}; createdb #{database.name}; #{cmd}"
33
33
  end
@@ -36,7 +36,7 @@ module Backhoe
36
36
  end
37
37
 
38
38
  def cat
39
- file_path =~ /\.gz$/ ? "zcat" : "cat"
39
+ path =~ /\.gz$/ ? "zcat" : "cat"
40
40
  end
41
41
 
42
42
  def pipe
@@ -1,3 +1,3 @@
1
1
  module Backhoe
2
- VERSION = "0.9.0"
2
+ VERSION = "0.10.0"
3
3
  end
data/lib/backhoe.rb CHANGED
@@ -6,12 +6,12 @@ require "active_record"
6
6
 
7
7
  module Backhoe
8
8
  class << self
9
- def dump file_path, skip_tables: [], skip_columns: {}
10
- Dump.new(Database.new, file_path, skip_tables, skip_columns).call
9
+ def dump path, skip_tables: [], skip_columns: {}
10
+ Dump.new(Database.new, path, skip_tables, skip_columns).call
11
11
  end
12
12
 
13
- def load file_path, drop_and_create: false
14
- Load.new(Database.new, file_path, drop_and_create).call
13
+ def load path, drop_and_create: false
14
+ Load.new(Database.new, path, drop_and_create).call
15
15
  end
16
16
  end
17
17
  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.9.0
4
+ version: 0.10.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: 2024-07-22 00:00:00.000000000 Z
11
+ date: 2024-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: webrick
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: Dump and load current database to and from a file.
126
140
  email:
127
141
  - micah@botandrose.com