Class: Supabase::Storage::AnalyticsClient
- Inherits:
-
Object
- Object
- Supabase::Storage::AnalyticsClient
- Includes:
- Request
- Defined in:
- lib/supabase/storage/analytics.rb
Overview
Analytics (iceberg) bucket management. Mirrors storage3’s ‘SyncStorageAnalyticsClient` — talks to `storage_url/iceberg/bucket`.
client.analytics.create("my-iceberg")
client.analytics.list(limit: 50, sort_column: "name", sort_order: "asc")
client.analytics.delete("my-iceberg")
Instance Method Summary collapse
-
#catalog(catalog_name, access_key_id:, secret_access_key:) ⇒ Object
Python returns a ‘pyiceberg.RestCatalog`.
- #create(bucket_name) ⇒ Object
- #delete(bucket_name) ⇒ Object
-
#initialize(session, base_url, headers) ⇒ AnalyticsClient
constructor
A new instance of AnalyticsClient.
-
#list(limit: nil, offset: nil, sort_column: nil, sort_order: nil, search: nil) ⇒ Object
Mirrors py’s optional sort/search/pagination params.
Constructor Details
#initialize(session, base_url, headers) ⇒ AnalyticsClient
Returns a new instance of AnalyticsClient.
20 21 22 23 24 25 |
# File 'lib/supabase/storage/analytics.rb', line 20 def initialize(session, base_url, headers) @session = session normalized = base_url.end_with?("/") ? base_url : "#{base_url}/" @base_url = "#{normalized}iceberg/" @headers = headers end |
Instance Method Details
#catalog(catalog_name, access_key_id:, secret_access_key:) ⇒ Object
Python returns a ‘pyiceberg.RestCatalog`. There is no equivalent Iceberg client in the Ruby ecosystem, so we return the catalog configuration as a plain Hash that a downstream iceberg-ruby (when one exists) can consume. Keeping the public method present mirrors the API surface.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/supabase/storage/analytics.rb', line 51 def catalog(catalog_name, access_key_id:, secret_access_key:) service_key = @headers["apiKey"] raise Errors::StorageApiError.new("apiKey must be passed in the headers.") if service_key.to_s.empty? s3_endpoint = @base_url.sub(%r{iceberg/?\z}, "s3") { "name" => catalog_name, "warehouse" => catalog_name, "uri" => @base_url, "token" => service_key, "s3.endpoint" => s3_endpoint, "s3.access-key-id" => access_key_id, "s3.secret-access-key" => secret_access_key, "s3.force-virtual-addressing" => "False" } end |
#create(bucket_name) ⇒ Object
27 28 29 30 |
# File 'lib/supabase/storage/analytics.rb', line 27 def create(bucket_name) body = _request(:post, ["bucket"], json: { "name" => bucket_name }) Types::AnalyticsBucket.from_hash(body) end |
#delete(bucket_name) ⇒ Object
42 43 44 45 |
# File 'lib/supabase/storage/analytics.rb', line 42 def delete(bucket_name) body = _request(:delete, ["bucket", bucket_name]) Types::AnalyticsBucketDeleteResponse.from_hash(body) end |
#list(limit: nil, offset: nil, sort_column: nil, sort_order: nil, search: nil) ⇒ Object
Mirrors py’s optional sort/search/pagination params. Nil values are dropped server-side; we also drop them client-side so the URL stays clean.
34 35 36 37 38 39 40 |
# File 'lib/supabase/storage/analytics.rb', line 34 def list(limit: nil, offset: nil, sort_column: nil, sort_order: nil, search: nil) params = { "limit" => limit, "offset" => offset, "sort_column" => sort_column, "sort_order" => sort_order, "search" => search }.compact body = _request(:get, ["bucket"], query: params.empty? ? nil : params) Array(body).map { |b| Types::AnalyticsBucket.from_hash(b) } end |