backhoe 0.6.1 → 0.7.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: 0da54b2284a8f477b20d0175cdb1023ffd28e03365598000e8cdf7403fb12dc4
4
- data.tar.gz: a298c3b656be2bd65b52731ae749d27317b5bbd26e2401370a4ccbbfc22f73c1
3
+ metadata.gz: f4811e2bbdd26f3ea2c6f34bb5adc581f5016efd801e4e644f552d1fd9b47b60
4
+ data.tar.gz: '072683778ab78bbce132f400afa1444dca8cd7da1bc5c7311b293d271f6b82c9'
5
5
  SHA512:
6
- metadata.gz: 90cf47702daa8c845795bfba48175718016f3f929b34c3924d86ad3d51979ca91e2cfae4973d2839197ec333e8735c92b02347095256674f444998ec951118e8
7
- data.tar.gz: 335c9e882afd7c4f8591f8b449b4cc1dc3205d74d7194a1112a0b2b9492af30223ebddad7c18583db96471ac2663e7b360eb569a40e8b9e91bd5ba6db4af32a2
6
+ metadata.gz: 5300b0689b2c0d508f4df5317c17e4d41db22976a04769452d2939ebf81016808f7ca6bb8bf5c621d781b9f83d759a156a0d3ed74d94f2a6ca1eec7efb401627
7
+ data.tar.gz: 5720d0f905973ae2b12ff04d3e94a895996cb2df8dd47f4f029f022cdbb7e1036886cdaccf5a6c29a3d3f30f601f72131be36a120738341f2d208b3b99b3542d
data/README.md CHANGED
@@ -17,8 +17,7 @@ Backhoe.load "data.sql.gz" # => can also load a gzipped sql file
17
17
  Backhoe.load "data.sql", drop_and_create: true # injects DROP and CREATE statements into the SQL invocation
18
18
 
19
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
20
+ Backhoe.backup "bucket-name/folder", access_key: "abc123", secret_key: "def456" # => must specify AWS creds
22
21
  ```
23
22
 
24
23
  ## Development
@@ -1,16 +1,66 @@
1
+ require "net/http"
2
+ require "openssl"
3
+ require "base64"
4
+
1
5
  module Backhoe
2
6
  class Backup < Struct.new(:s3_path, :access_key, :secret_key)
3
7
  def call
8
+ @time = Time.now
9
+
4
10
  Backhoe.dump path
5
- Kernel.system "#{creds} aws s3 mv #{path} s3://#{s3_path}/#{filename}".strip
11
+
12
+ uri = URI("https://s3-us-west-2.amazonaws.com/#{s3_path}/#{filename}")
13
+
14
+ req = Net::HTTP::Put.new(uri, {
15
+ "Content-Length": File.size(path).to_s,
16
+ "Content-Type": content_type,
17
+ "Date": date,
18
+ "Authorization": "AWS #{access_key}:#{signature}",
19
+ "x-amz-storage-class": "STANDARD",
20
+ "x-amz-acl": "private",
21
+ })
22
+ req.body_stream = File.open(path)
23
+ Net::HTTP.start(uri.hostname) { |http| http.request(req) }
6
24
  end
7
25
 
8
26
  private
9
27
 
10
- def creds
11
- if access_key && secret_key
12
- "AWS_ACCESS_KEY_ID=#{access_key} AWS_SECRET_ACCESS_KEY=#{secret_key}"
13
- end
28
+ def signature
29
+ digester = OpenSSL::Digest::SHA1.new
30
+ digest = OpenSSL::HMAC.digest(digester, secret_key, key)
31
+ Base64.strict_encode64(digest)
32
+ end
33
+
34
+ def key
35
+ [
36
+ "PUT",
37
+ "",
38
+ content_type,
39
+ date,
40
+ acl,
41
+ storage_type,
42
+ full_s3_path,
43
+ ].join("\n")
44
+ end
45
+
46
+ def content_type
47
+ "application/gzip"
48
+ end
49
+
50
+ def date
51
+ @time.rfc2822
52
+ end
53
+
54
+ def acl
55
+ "x-amz-acl:private"
56
+ end
57
+
58
+ def storage_type
59
+ "x-amz-storage-class:STANDARD"
60
+ end
61
+
62
+ def full_s3_path
63
+ "/#{s3_path}/#{filename}"
14
64
  end
15
65
 
16
66
  def path
@@ -18,10 +68,7 @@ module Backhoe
18
68
  end
19
69
 
20
70
  def filename
21
- @filename ||= begin
22
- require "time"
23
- "#{Time.now.utc.iso8601}.sql.gz"
24
- end
71
+ "#{@time.utc.iso8601}.sql.gz"
25
72
  end
26
73
  end
27
74
  end
@@ -1,3 +1,3 @@
1
1
  module Backhoe
2
- VERSION = "0.6.1"
2
+ VERSION = "0.7.0"
3
3
  end
data/lib/backhoe.rb CHANGED
@@ -15,7 +15,7 @@ module Backhoe
15
15
  Load.new(Database.new, file_path, drop_and_create).call
16
16
  end
17
17
 
18
- def backup s3_path, access_key: nil, secret_key: nil
18
+ def backup s3_path, access_key:, secret_key:
19
19
  Backup.new(s3_path, access_key, secret_key).call
20
20
  end
21
21
  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.6.1
4
+ version: 0.7.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-04-09 00:00:00.000000000 Z
11
+ date: 2023-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord