Class: Prebake::Backends::S3
Instance Method Summary collapse
- #delete(cache_key) ⇒ Object
- #exists?(cache_key) ⇒ Boolean
- #fetch(cache_key) ⇒ Object
- #fetch_checksum(cache_key) ⇒ Object
-
#initialize(bucket:, region: "us-east-1", prefix: "prebake") ⇒ S3
constructor
A new instance of S3.
- #push(gem_path, cache_key, checksum) ⇒ Object
Methods inherited from Base
Constructor Details
#initialize(bucket:, region: "us-east-1", prefix: "prebake") ⇒ S3
Returns a new instance of S3.
11 12 13 14 15 16 17 18 19 |
# File 'lib/prebake/backends/s3.rb', line 11 def initialize(bucket:, region: "us-east-1", prefix: "prebake") @bucket = bucket @region = region @prefix = prefix require "aws-sdk-s3" rescue LoadError raise Prebake::Error, "aws-sdk-s3 gem is required for S3 backend" end |
Instance Method Details
#delete(cache_key) ⇒ Object
67 68 69 70 71 72 73 74 75 |
# File 'lib/prebake/backends/s3.rb', line 67 def delete(cache_key) client.delete_object(bucket: @bucket, key: object_key(cache_key)) client.delete_object(bucket: @bucket, key: checksum_key(cache_key)) Logger.info "Deleted #{cache_key} from S3" true rescue StandardError => e Logger.debug "S3 delete failed for #{cache_key}: #{e.}" false end |
#exists?(cache_key) ⇒ Boolean
60 61 62 63 64 65 |
# File 'lib/prebake/backends/s3.rb', line 60 def exists?(cache_key) client.head_object(bucket: @bucket, key: object_key(cache_key)) true rescue StandardError false end |
#fetch(cache_key) ⇒ Object
21 22 23 24 25 26 27 28 29 |
# File 'lib/prebake/backends/s3.rb', line 21 def fetch(cache_key) response = client.get_object(bucket: @bucket, key: object_key(cache_key)) path = File.join(Dir.tmpdir, "prebake-#{SecureRandom.hex(16)}.gem") File.binwrite(path, response.body.read) path rescue StandardError => e Logger.debug "S3 fetch failed for #{cache_key}: #{e.}" nil end |
#fetch_checksum(cache_key) ⇒ Object
31 32 33 34 35 36 37 |
# File 'lib/prebake/backends/s3.rb', line 31 def fetch_checksum(cache_key) response = client.get_object(bucket: @bucket, key: checksum_key(cache_key)) response.body.read.strip rescue StandardError => e Logger.debug "S3 checksum fetch failed for #{cache_key}: #{e.}" nil end |
#push(gem_path, cache_key, checksum) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/prebake/backends/s3.rb', line 39 def push(gem_path, cache_key, checksum) gem_key = object_key(cache_key) File.open(gem_path, "rb") do |file| client.put_object(bucket: @bucket, key: gem_key, body: file) end begin client.put_object(bucket: @bucket, key: checksum_key(cache_key), body: checksum) rescue StandardError => e Logger.warn "S3 checksum push failed for #{cache_key}: #{e.}, removing gem" client.delete_object(bucket: @bucket, key: gem_key) return false end Logger.info "Pushed #{cache_key} to S3" true rescue StandardError => e Logger.warn "S3 push failed for #{cache_key}: #{e.}" false end |