supabase-rb 2.0.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 +7 -0
- data/lib/supabase/README.md +90 -0
- data/lib/supabase/auth/README.md +172 -0
- data/lib/supabase/auth/admin_api.rb +218 -0
- data/lib/supabase/auth/admin_oauth_api.rb +51 -0
- data/lib/supabase/auth/api.rb +125 -0
- data/lib/supabase/auth/async/admin_api.rb +36 -0
- data/lib/supabase/auth/async/admin_oauth_api.rb +15 -0
- data/lib/supabase/auth/async/api.rb +32 -0
- data/lib/supabase/auth/async/client.rb +33 -0
- data/lib/supabase/auth/async.rb +14 -0
- data/lib/supabase/auth/client.rb +1217 -0
- data/lib/supabase/auth/constants.rb +32 -0
- data/lib/supabase/auth/errors.rb +207 -0
- data/lib/supabase/auth/helpers.rb +222 -0
- data/lib/supabase/auth/memory_storage.rb +25 -0
- data/lib/supabase/auth/storage.rb +19 -0
- data/lib/supabase/auth/timer.rb +40 -0
- data/lib/supabase/auth/types.rb +517 -0
- data/lib/supabase/auth/version.rb +7 -0
- data/lib/supabase/auth.rb +19 -0
- data/lib/supabase/client.rb +200 -0
- data/lib/supabase/client_options.rb +82 -0
- data/lib/supabase/functions/README.md +71 -0
- data/lib/supabase/functions/async/client.rb +45 -0
- data/lib/supabase/functions/async.rb +8 -0
- data/lib/supabase/functions/client.rb +174 -0
- data/lib/supabase/functions/errors.rb +38 -0
- data/lib/supabase/functions/types.rb +37 -0
- data/lib/supabase/functions/version.rb +7 -0
- data/lib/supabase/functions.rb +11 -0
- data/lib/supabase/postgrest/README.md +84 -0
- data/lib/supabase/postgrest/async/client.rb +50 -0
- data/lib/supabase/postgrest/async.rb +8 -0
- data/lib/supabase/postgrest/client.rb +136 -0
- data/lib/supabase/postgrest/errors.rb +49 -0
- data/lib/supabase/postgrest/request_builder.rb +657 -0
- data/lib/supabase/postgrest/types.rb +60 -0
- data/lib/supabase/postgrest/utils.rb +24 -0
- data/lib/supabase/postgrest/version.rb +7 -0
- data/lib/supabase/postgrest.rb +13 -0
- data/lib/supabase/realtime/README.md +90 -0
- data/lib/supabase/realtime/channel.rb +274 -0
- data/lib/supabase/realtime/client.rb +182 -0
- data/lib/supabase/realtime/errors.rb +19 -0
- data/lib/supabase/realtime/message.rb +38 -0
- data/lib/supabase/realtime/presence.rb +136 -0
- data/lib/supabase/realtime/push.rb +48 -0
- data/lib/supabase/realtime/socket.rb +40 -0
- data/lib/supabase/realtime/sockets/async_websocket.rb +175 -0
- data/lib/supabase/realtime/sockets/websocket_client_simple.rb +94 -0
- data/lib/supabase/realtime/test_socket.rb +65 -0
- data/lib/supabase/realtime/transformers.rb +26 -0
- data/lib/supabase/realtime/types.rb +70 -0
- data/lib/supabase/realtime/version.rb +7 -0
- data/lib/supabase/realtime.rb +18 -0
- data/lib/supabase/storage/README.md +108 -0
- data/lib/supabase/storage/analytics.rb +69 -0
- data/lib/supabase/storage/async/client.rb +52 -0
- data/lib/supabase/storage/async.rb +8 -0
- data/lib/supabase/storage/bucket_api.rb +65 -0
- data/lib/supabase/storage/client.rb +80 -0
- data/lib/supabase/storage/errors.rb +32 -0
- data/lib/supabase/storage/file_api.rb +281 -0
- data/lib/supabase/storage/request.rb +63 -0
- data/lib/supabase/storage/types.rb +236 -0
- data/lib/supabase/storage/utils.rb +35 -0
- data/lib/supabase/storage/vectors.rb +189 -0
- data/lib/supabase/storage/version.rb +7 -0
- data/lib/supabase/storage.rb +17 -0
- data/lib/supabase/version.rb +5 -0
- data/lib/supabase-auth.rb +3 -0
- data/lib/supabase.rb +63 -0
- metadata +272 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "request"
|
|
4
|
+
require_relative "types"
|
|
5
|
+
require_relative "errors"
|
|
6
|
+
|
|
7
|
+
module Supabase
|
|
8
|
+
module Storage
|
|
9
|
+
# Vector bucket / index / record management. Mirrors storage3's
|
|
10
|
+
# `SyncStorageVectorsClient`. All endpoints are POSTs to actions under
|
|
11
|
+
# `{storage_url}/vector/...`.
|
|
12
|
+
#
|
|
13
|
+
# vectors = client.vectors
|
|
14
|
+
# vectors.create_bucket("docs")
|
|
15
|
+
# vectors.from("docs").create_index("paragraphs", 1536, "cosine", "float32")
|
|
16
|
+
# vectors.from("docs").index("paragraphs").put([{ key: "p1", data: { float32: [...] } }])
|
|
17
|
+
class VectorsClient
|
|
18
|
+
include Request
|
|
19
|
+
|
|
20
|
+
def initialize(session, base_url, headers)
|
|
21
|
+
@session = session
|
|
22
|
+
normalized = base_url.end_with?("/") ? base_url : "#{base_url}/"
|
|
23
|
+
@base_url = "#{normalized}vector/"
|
|
24
|
+
@headers = headers
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Scope subsequent index/record operations to a particular vector bucket.
|
|
28
|
+
def from(bucket_name)
|
|
29
|
+
VectorBucketScope.new(self, bucket_name)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
alias from_ from
|
|
33
|
+
|
|
34
|
+
def create_bucket(bucket_name)
|
|
35
|
+
_request(:post, ["CreateVectorBucket"], json: { "vectorBucketName" => bucket_name })
|
|
36
|
+
nil
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Returns nil if the bucket doesn't exist (matches py's swallow of
|
|
40
|
+
# StorageApiError). Any other API failure still surfaces.
|
|
41
|
+
def get_bucket(bucket_name)
|
|
42
|
+
body = _request(:post, ["GetVectorBucket"], json: { "vectorBucketName" => bucket_name })
|
|
43
|
+
Types::GetVectorBucketResponse.from_hash(body)
|
|
44
|
+
rescue Errors::StorageApiError
|
|
45
|
+
nil
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def list_buckets(prefix: nil, max_results: nil, next_token: nil)
|
|
49
|
+
json = { "prefix" => prefix, "maxResults" => max_results, "nextToken" => next_token }.compact
|
|
50
|
+
body = _request(:post, ["ListVectorBuckets"], json: json)
|
|
51
|
+
Types::ListVectorBucketsResponse.from_hash(body)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def delete_bucket(bucket_name)
|
|
55
|
+
_request(:post, ["DeleteVectorBucket"], json: { "vectorBucketName" => bucket_name })
|
|
56
|
+
nil
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Exposed so the scope classes can reuse our wired-up session/headers
|
|
60
|
+
# without re-implementing `_request`. Not part of the public API.
|
|
61
|
+
def send_action(path:, json: nil) # :nodoc:
|
|
62
|
+
_request(:post, [path], json: json)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# A bucket-scoped facade. Mirrors storage3's `SyncVectorBucketScope`.
|
|
67
|
+
class VectorBucketScope
|
|
68
|
+
def initialize(vectors_client, bucket_name)
|
|
69
|
+
@client = vectors_client
|
|
70
|
+
@bucket_name = bucket_name
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def create_index(index_name, dimension, distance_metric, data_type, metadata: nil)
|
|
74
|
+
json = with_metadata(
|
|
75
|
+
"indexName" => index_name,
|
|
76
|
+
"dimension" => dimension,
|
|
77
|
+
"distanceMetric" => distance_metric,
|
|
78
|
+
"dataType" => data_type,
|
|
79
|
+
"metadataConfiguration" => metadata
|
|
80
|
+
)
|
|
81
|
+
@client.send_action(path: "CreateIndex", json: json)
|
|
82
|
+
nil
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def get_index(index_name)
|
|
86
|
+
body = @client.send_action(path: "GetIndex", json: with_metadata("indexName" => index_name))
|
|
87
|
+
Types::GetVectorIndexResponse.from_hash(body)
|
|
88
|
+
rescue Errors::StorageApiError
|
|
89
|
+
nil
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def list_indexes(next_token: nil, max_results: nil, prefix: nil)
|
|
93
|
+
json = with_metadata("next_token" => next_token, "max_results" => max_results, "prefix" => prefix)
|
|
94
|
+
body = @client.send_action(path: "ListIndexes", json: json)
|
|
95
|
+
Types::ListVectorIndexesResponse.from_hash(body)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def delete_index(index_name)
|
|
99
|
+
@client.send_action(path: "DeleteIndex", json: with_metadata("indexName" => index_name))
|
|
100
|
+
nil
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def index(index_name)
|
|
104
|
+
VectorIndexScope.new(@client, @bucket_name, index_name)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
private
|
|
108
|
+
|
|
109
|
+
# Drops nil values and stamps the vector bucket name onto every request,
|
|
110
|
+
# matching the py helper of the same name.
|
|
111
|
+
def with_metadata(extra = {})
|
|
112
|
+
{ "vectorBucketName" => @bucket_name }.merge(extra).reject { |_, v| v.nil? }
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# A bucket+index-scoped facade for record-level operations. Mirrors
|
|
117
|
+
# storage3's `SyncVectorIndexScope`.
|
|
118
|
+
class VectorIndexScope
|
|
119
|
+
VECTOR_BATCH_MIN = 1
|
|
120
|
+
VECTOR_BATCH_MAX = 500
|
|
121
|
+
|
|
122
|
+
def initialize(vectors_client, bucket_name, index_name)
|
|
123
|
+
@client = vectors_client
|
|
124
|
+
@bucket_name = bucket_name
|
|
125
|
+
@index_name = index_name
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def put(vectors)
|
|
129
|
+
# Accept either Hashes or VectorMatch-like Structs; serialize hashes
|
|
130
|
+
# directly so callers can pass plain `{ key:, data:, metadata: }`.
|
|
131
|
+
serialized = Array(vectors).map { |v| v.respond_to?(:to_h) ? v.to_h : v }
|
|
132
|
+
.map { |h| h.reject { |_, val| val.nil? } }
|
|
133
|
+
@client.send_action(path: "PutVectors", json: with_metadata("vectors" => serialized))
|
|
134
|
+
nil
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def get(*keys, return_data: true, return_metadata: true)
|
|
138
|
+
json = with_metadata("keys" => keys, "returnData" => return_data, "returnMetadata" => return_metadata)
|
|
139
|
+
body = @client.send_action(path: "GetVectors", json: json)
|
|
140
|
+
Types::GetVectorsResponse.from_hash(body)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def list(max_results: nil, next_token: nil, return_data: true, return_metadata: true,
|
|
144
|
+
segment_count: nil, segment_index: nil)
|
|
145
|
+
json = with_metadata(
|
|
146
|
+
"maxResults" => max_results,
|
|
147
|
+
"nextToken" => next_token,
|
|
148
|
+
"returnData" => return_data,
|
|
149
|
+
"returnMetadata" => return_metadata,
|
|
150
|
+
"segmentCount" => segment_count,
|
|
151
|
+
"segmentIndex" => segment_index
|
|
152
|
+
)
|
|
153
|
+
body = @client.send_action(path: "ListVectors", json: json)
|
|
154
|
+
Types::ListVectorsResponse.from_hash(body)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def query(query_vector, top_k: nil, filter: nil, return_distance: true, return_metadata: true)
|
|
158
|
+
json = with_metadata(
|
|
159
|
+
"queryVector" => query_vector,
|
|
160
|
+
"topK" => top_k,
|
|
161
|
+
"filter" => filter,
|
|
162
|
+
"returnDistance" => return_distance,
|
|
163
|
+
"returnMetadata" => return_metadata
|
|
164
|
+
)
|
|
165
|
+
body = @client.send_action(path: "QueryVectors", json: json)
|
|
166
|
+
Types::QueryVectorsResponse.from_hash(body)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def delete(keys)
|
|
170
|
+
keys = Array(keys)
|
|
171
|
+
if keys.size < VECTOR_BATCH_MIN || keys.size > VECTOR_BATCH_MAX
|
|
172
|
+
raise Errors::VectorBucketException, "Keys batch size must be between #{VECTOR_BATCH_MIN} and #{VECTOR_BATCH_MAX}."
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
@client.send_action(path: "DeleteVectors", json: with_metadata("keys" => keys))
|
|
176
|
+
nil
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
private
|
|
180
|
+
|
|
181
|
+
def with_metadata(extra = {})
|
|
182
|
+
{
|
|
183
|
+
"vectorBucketName" => @bucket_name,
|
|
184
|
+
"indexName" => @index_name
|
|
185
|
+
}.merge(extra).reject { |_, v| v.nil? }
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "storage/version"
|
|
4
|
+
require_relative "storage/errors"
|
|
5
|
+
require_relative "storage/types"
|
|
6
|
+
require_relative "storage/utils"
|
|
7
|
+
require_relative "storage/request"
|
|
8
|
+
require_relative "storage/bucket_api"
|
|
9
|
+
require_relative "storage/file_api"
|
|
10
|
+
require_relative "storage/analytics"
|
|
11
|
+
require_relative "storage/vectors"
|
|
12
|
+
require_relative "storage/client"
|
|
13
|
+
|
|
14
|
+
module Supabase
|
|
15
|
+
module Storage
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/supabase.rb
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "supabase/version"
|
|
4
|
+
require_relative "supabase/client_options"
|
|
5
|
+
require_relative "supabase/client"
|
|
6
|
+
|
|
7
|
+
module Supabase
|
|
8
|
+
# Re-exports of error types from each sub-library, so callers can rescue with
|
|
9
|
+
# the umbrella names that mirror supabase-py's top-level `__init__.py`:
|
|
10
|
+
#
|
|
11
|
+
# rescue Supabase::PostgrestAPIError => e # postgrest
|
|
12
|
+
# rescue Supabase::StorageException => e # storage
|
|
13
|
+
# rescue Supabase::AuthApiError => e # auth
|
|
14
|
+
# rescue Supabase::FunctionsHttpError => e # functions
|
|
15
|
+
# rescue Supabase::AuthorizationError => e # realtime
|
|
16
|
+
#
|
|
17
|
+
# The actual classes live in their sub-namespaces; these are aliases.
|
|
18
|
+
|
|
19
|
+
# Postgrest
|
|
20
|
+
PostgrestAPIError = Postgrest::Errors::APIError if defined?(Postgrest::Errors::APIError)
|
|
21
|
+
PostgrestAPIResponse = Postgrest::APIResponse if defined?(Postgrest::APIResponse)
|
|
22
|
+
|
|
23
|
+
# Storage
|
|
24
|
+
StorageException = Storage::Errors::StorageError if defined?(Storage::Errors::StorageError)
|
|
25
|
+
StorageApiError = Storage::Errors::StorageApiError if defined?(Storage::Errors::StorageApiError)
|
|
26
|
+
|
|
27
|
+
# Auth (supabase_auth.errors.*)
|
|
28
|
+
if defined?(Auth::Errors)
|
|
29
|
+
AuthError = Auth::Errors::AuthError if defined?(Auth::Errors::AuthError)
|
|
30
|
+
AuthApiError = Auth::Errors::AuthApiError if defined?(Auth::Errors::AuthApiError)
|
|
31
|
+
AuthImplicitGrantRedirectError = Auth::Errors::AuthImplicitGrantRedirectError if defined?(Auth::Errors::AuthImplicitGrantRedirectError)
|
|
32
|
+
AuthInvalidCredentialsError = Auth::Errors::AuthInvalidCredentialsError if defined?(Auth::Errors::AuthInvalidCredentialsError)
|
|
33
|
+
AuthRetryableError = Auth::Errors::AuthRetryableError if defined?(Auth::Errors::AuthRetryableError)
|
|
34
|
+
AuthSessionMissingError = Auth::Errors::AuthSessionMissingError if defined?(Auth::Errors::AuthSessionMissingError)
|
|
35
|
+
AuthUnknownError = Auth::Errors::AuthUnknownError if defined?(Auth::Errors::AuthUnknownError)
|
|
36
|
+
AuthWeakPasswordError = Auth::Errors::AuthWeakPasswordError if defined?(Auth::Errors::AuthWeakPasswordError)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Functions
|
|
40
|
+
if defined?(Functions::Errors)
|
|
41
|
+
FunctionsError = Functions::Errors::FunctionsError if defined?(Functions::Errors::FunctionsError)
|
|
42
|
+
FunctionsHttpError = Functions::Errors::FunctionsHttpError if defined?(Functions::Errors::FunctionsHttpError)
|
|
43
|
+
FunctionsRelayError = Functions::Errors::FunctionsRelayError if defined?(Functions::Errors::FunctionsRelayError)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Realtime
|
|
47
|
+
if defined?(Realtime::Errors)
|
|
48
|
+
AuthorizationError = Realtime::Errors::AuthorizationError if defined?(Realtime::Errors::AuthorizationError)
|
|
49
|
+
NotConnectedError = Realtime::Errors::NotConnectedError if defined?(Realtime::Errors::NotConnectedError)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Raised by {Supabase.create_client} on a missing url/key. Mirrors py's
|
|
53
|
+
# `SupabaseException`. We don't inherit from a sub-library error because the
|
|
54
|
+
# umbrella factory predates choosing any of them.
|
|
55
|
+
class SupabaseException < StandardError; end
|
|
56
|
+
|
|
57
|
+
# Alias mirroring supabase-py's `acreate_client` / `create_async_client`.
|
|
58
|
+
# Equivalent to `create_client(..., async: true)`.
|
|
59
|
+
def self.acreate_client(supabase_url:, supabase_key:, options: {})
|
|
60
|
+
create_client(supabase_url: supabase_url, supabase_key: supabase_key, options: options, async: true)
|
|
61
|
+
end
|
|
62
|
+
singleton_class.send(:alias_method, :create_async_client, :acreate_client)
|
|
63
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: supabase-rb
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Supabase
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: faraday
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '2.0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '2.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: faraday-multipart
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '1.0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '1.0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: jwt
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '2.8'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '2.8'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: rspec
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '3.12'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '3.12'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: simplecov
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0.22'
|
|
75
|
+
type: :development
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0.22'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: webmock
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '3.19'
|
|
89
|
+
type: :development
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '3.19'
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: faker
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - "~>"
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '3.2'
|
|
103
|
+
type: :development
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - "~>"
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '3.2'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: async
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - "~>"
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '2.0'
|
|
117
|
+
type: :development
|
|
118
|
+
prerelease: false
|
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - "~>"
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '2.0'
|
|
124
|
+
- !ruby/object:Gem::Dependency
|
|
125
|
+
name: async-http-faraday
|
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - "~>"
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '0.20'
|
|
131
|
+
type: :development
|
|
132
|
+
prerelease: false
|
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - "~>"
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '0.20'
|
|
138
|
+
- !ruby/object:Gem::Dependency
|
|
139
|
+
name: websocket-client-simple
|
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
|
141
|
+
requirements:
|
|
142
|
+
- - "~>"
|
|
143
|
+
- !ruby/object:Gem::Version
|
|
144
|
+
version: '0.9'
|
|
145
|
+
type: :development
|
|
146
|
+
prerelease: false
|
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
148
|
+
requirements:
|
|
149
|
+
- - "~>"
|
|
150
|
+
- !ruby/object:Gem::Version
|
|
151
|
+
version: '0.9'
|
|
152
|
+
- !ruby/object:Gem::Dependency
|
|
153
|
+
name: async-websocket
|
|
154
|
+
requirement: !ruby/object:Gem::Requirement
|
|
155
|
+
requirements:
|
|
156
|
+
- - "~>"
|
|
157
|
+
- !ruby/object:Gem::Version
|
|
158
|
+
version: '0.30'
|
|
159
|
+
type: :development
|
|
160
|
+
prerelease: false
|
|
161
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
162
|
+
requirements:
|
|
163
|
+
- - "~>"
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: '0.30'
|
|
166
|
+
description: 'Ruby client for Supabase: Auth, PostgREST, Storage, Edge Functions,
|
|
167
|
+
and Realtime exposed through a single Supabase.create_client(supabase_url:, supabase_key:)
|
|
168
|
+
factory, mirroring supabase-py''s create_client().'
|
|
169
|
+
email:
|
|
170
|
+
- support@supabase.io
|
|
171
|
+
executables: []
|
|
172
|
+
extensions: []
|
|
173
|
+
extra_rdoc_files: []
|
|
174
|
+
files:
|
|
175
|
+
- lib/supabase-auth.rb
|
|
176
|
+
- lib/supabase.rb
|
|
177
|
+
- lib/supabase/README.md
|
|
178
|
+
- lib/supabase/auth.rb
|
|
179
|
+
- lib/supabase/auth/README.md
|
|
180
|
+
- lib/supabase/auth/admin_api.rb
|
|
181
|
+
- lib/supabase/auth/admin_oauth_api.rb
|
|
182
|
+
- lib/supabase/auth/api.rb
|
|
183
|
+
- lib/supabase/auth/async.rb
|
|
184
|
+
- lib/supabase/auth/async/admin_api.rb
|
|
185
|
+
- lib/supabase/auth/async/admin_oauth_api.rb
|
|
186
|
+
- lib/supabase/auth/async/api.rb
|
|
187
|
+
- lib/supabase/auth/async/client.rb
|
|
188
|
+
- lib/supabase/auth/client.rb
|
|
189
|
+
- lib/supabase/auth/constants.rb
|
|
190
|
+
- lib/supabase/auth/errors.rb
|
|
191
|
+
- lib/supabase/auth/helpers.rb
|
|
192
|
+
- lib/supabase/auth/memory_storage.rb
|
|
193
|
+
- lib/supabase/auth/storage.rb
|
|
194
|
+
- lib/supabase/auth/timer.rb
|
|
195
|
+
- lib/supabase/auth/types.rb
|
|
196
|
+
- lib/supabase/auth/version.rb
|
|
197
|
+
- lib/supabase/client.rb
|
|
198
|
+
- lib/supabase/client_options.rb
|
|
199
|
+
- lib/supabase/functions.rb
|
|
200
|
+
- lib/supabase/functions/README.md
|
|
201
|
+
- lib/supabase/functions/async.rb
|
|
202
|
+
- lib/supabase/functions/async/client.rb
|
|
203
|
+
- lib/supabase/functions/client.rb
|
|
204
|
+
- lib/supabase/functions/errors.rb
|
|
205
|
+
- lib/supabase/functions/types.rb
|
|
206
|
+
- lib/supabase/functions/version.rb
|
|
207
|
+
- lib/supabase/postgrest.rb
|
|
208
|
+
- lib/supabase/postgrest/README.md
|
|
209
|
+
- lib/supabase/postgrest/async.rb
|
|
210
|
+
- lib/supabase/postgrest/async/client.rb
|
|
211
|
+
- lib/supabase/postgrest/client.rb
|
|
212
|
+
- lib/supabase/postgrest/errors.rb
|
|
213
|
+
- lib/supabase/postgrest/request_builder.rb
|
|
214
|
+
- lib/supabase/postgrest/types.rb
|
|
215
|
+
- lib/supabase/postgrest/utils.rb
|
|
216
|
+
- lib/supabase/postgrest/version.rb
|
|
217
|
+
- lib/supabase/realtime.rb
|
|
218
|
+
- lib/supabase/realtime/README.md
|
|
219
|
+
- lib/supabase/realtime/channel.rb
|
|
220
|
+
- lib/supabase/realtime/client.rb
|
|
221
|
+
- lib/supabase/realtime/errors.rb
|
|
222
|
+
- lib/supabase/realtime/message.rb
|
|
223
|
+
- lib/supabase/realtime/presence.rb
|
|
224
|
+
- lib/supabase/realtime/push.rb
|
|
225
|
+
- lib/supabase/realtime/socket.rb
|
|
226
|
+
- lib/supabase/realtime/sockets/async_websocket.rb
|
|
227
|
+
- lib/supabase/realtime/sockets/websocket_client_simple.rb
|
|
228
|
+
- lib/supabase/realtime/test_socket.rb
|
|
229
|
+
- lib/supabase/realtime/transformers.rb
|
|
230
|
+
- lib/supabase/realtime/types.rb
|
|
231
|
+
- lib/supabase/realtime/version.rb
|
|
232
|
+
- lib/supabase/storage.rb
|
|
233
|
+
- lib/supabase/storage/README.md
|
|
234
|
+
- lib/supabase/storage/analytics.rb
|
|
235
|
+
- lib/supabase/storage/async.rb
|
|
236
|
+
- lib/supabase/storage/async/client.rb
|
|
237
|
+
- lib/supabase/storage/bucket_api.rb
|
|
238
|
+
- lib/supabase/storage/client.rb
|
|
239
|
+
- lib/supabase/storage/errors.rb
|
|
240
|
+
- lib/supabase/storage/file_api.rb
|
|
241
|
+
- lib/supabase/storage/request.rb
|
|
242
|
+
- lib/supabase/storage/types.rb
|
|
243
|
+
- lib/supabase/storage/utils.rb
|
|
244
|
+
- lib/supabase/storage/vectors.rb
|
|
245
|
+
- lib/supabase/storage/version.rb
|
|
246
|
+
- lib/supabase/version.rb
|
|
247
|
+
homepage: https://github.com/supabase-ruby/supabase-rb
|
|
248
|
+
licenses:
|
|
249
|
+
- MIT
|
|
250
|
+
metadata:
|
|
251
|
+
homepage_uri: https://github.com/supabase-ruby/supabase-rb
|
|
252
|
+
source_code_uri: https://github.com/supabase-ruby/supabase-rb
|
|
253
|
+
documentation_uri: https://github.com/supabase-ruby/supabase-rb/blob/master/lib/supabase/README.md
|
|
254
|
+
changelog_uri: https://github.com/supabase-ruby/supabase-rb/blob/master/CHANGELOG.md
|
|
255
|
+
rdoc_options: []
|
|
256
|
+
require_paths:
|
|
257
|
+
- lib
|
|
258
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
259
|
+
requirements:
|
|
260
|
+
- - ">="
|
|
261
|
+
- !ruby/object:Gem::Version
|
|
262
|
+
version: 3.0.0
|
|
263
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
264
|
+
requirements:
|
|
265
|
+
- - ">="
|
|
266
|
+
- !ruby/object:Gem::Version
|
|
267
|
+
version: '0'
|
|
268
|
+
requirements: []
|
|
269
|
+
rubygems_version: 4.0.11
|
|
270
|
+
specification_version: 4
|
|
271
|
+
summary: Ruby client for Supabase
|
|
272
|
+
test_files: []
|