Class: Timet::S3Supabase

Inherits:
Object
  • Object
show all
Includes:
S3Config
Defined in:
lib/timet/s3_supabase.rb

Overview

S3Supabase provides methods to interact with an S3-compatible storage service.

Defined Under Namespace

Classes: CustomError

Constant Summary

Constants included from S3Config

Timet::S3Config::ENV_FILE_PATH, Timet::S3Config::LOG_FILE_PATH, Timet::S3Config::S3_ACCESS_KEY, Timet::S3Config::S3_ENDPOINT, Timet::S3Config::S3_REGION, Timet::S3Config::S3_SECRET_KEY

Instance Method Summary collapse

Constructor Details

#initializeS3Supabase

Returns a new instance of S3Supabase.



56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/timet/s3_supabase.rb', line 56

def initialize
  validate_env_vars
  @logger = Logger.new(LOG_FILE_PATH)
  @logger.level = Logger::INFO
  @s3_client = Aws::S3::Client.new(
    region: S3_REGION,
    access_key_id: S3_ACCESS_KEY,
    secret_access_key: S3_SECRET_KEY,
    endpoint: S3_ENDPOINT,
    force_path_style: true
  )
end

Instance Method Details

#create_bucket(bucket_name) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/timet/s3_supabase.rb', line 69

def create_bucket(bucket_name)
  @s3_client.create_bucket(bucket: bucket_name)
  log(:info, "Bucket '#{bucket_name}' created successfully!")
  true
rescue Aws::S3::Errors::BucketAlreadyExists
  log(:error, "Error: The bucket '#{bucket_name}' already exists.")
  false
rescue Aws::S3::Errors::BucketAlreadyOwnedByYou
  log(:error, "Error: The bucket '#{bucket_name}' is already owned by you.")
  false
rescue Aws::S3::Errors::ServiceError => e
  log(:error, "Error creating bucket: #{e.message}")
  false
end

#delete_bucket(bucket_name) ⇒ Object



129
130
131
132
133
134
135
136
# File 'lib/timet/s3_supabase.rb', line 129

def delete_bucket(bucket_name)
  delete_all_objects_in_bucket(bucket_name)
  @s3_client.delete_bucket(bucket: bucket_name)
  log(:info, "Bucket '#{bucket_name}' deleted successfully.")
rescue Aws::S3::Errors::ServiceError => e
  log(:error, "Error deleting bucket: #{e.message}")
  raise e
end

#delete_object(bucket_name, object_key) ⇒ Object



121
122
123
124
125
126
127
# File 'lib/timet/s3_supabase.rb', line 121

def delete_object(bucket_name, object_key)
  @s3_client.delete_object(bucket: bucket_name, key: object_key)
  log(:info, "Object '#{object_key}' deleted successfully.")
rescue Aws::S3::Errors::ServiceError => e
  log(:error, "Error deleting object: #{e.message}")
  raise e
end

#download_file(bucket_name, object_key, download_path) ⇒ Object



113
114
115
116
117
118
119
# File 'lib/timet/s3_supabase.rb', line 113

def download_file(bucket_name, object_key, download_path)
  response = @s3_client.get_object(bucket: bucket_name, key: object_key)
  File.binwrite(download_path, response.body.read)
  log(:info, "File '#{object_key}' downloaded successfully.")
rescue Aws::S3::Errors::ServiceError => e
  log(:error, "Error downloading file: #{e.message}")
end

#list_objects(bucket_name) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/timet/s3_supabase.rb', line 84

def list_objects(bucket_name)
  response = @s3_client.list_objects_v2(bucket: bucket_name)
  contents = response.contents

  if contents.empty?
    log(:error, "No objects found in '#{bucket_name}'.")
    return false
  end

  log_object_list(contents, bucket_name)
  contents.map(&:to_h)
rescue Aws::S3::Errors::ServiceError => e
  log(:error, "Error listing objects: #{e.message}")
  nil
end

#upload_file(bucket_name, file_path, object_key) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/timet/s3_supabase.rb', line 100

def upload_file(bucket_name, file_path, object_key)
  File.open(file_path, 'rb') do |file|
    @s3_client.put_object(
      bucket: bucket_name,
      key: object_key,
      body: file
    )
  end
  log(:info, "File '#{object_key}' uploaded successfully.")
rescue Aws::S3::Errors::ServiceError => e
  log(:error, "Error uploading file: #{e.message}")
end