backhoe 0.6.1 → 0.7.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: 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