Module: Supabase::Postgrest::FilterMixin
- Included in:
- FilterRequestBuilder, RPCFilterRequestBuilder
- Defined in:
- lib/supabase/postgrest/request_builder.rb
Overview
Mixin providing PostgREST filter operators (eq, neq, gt, lt, like, in_, contains, …). Methods return self so they’re chainable. Mirrors supabase-py’s BaseFilterRequestBuilder.
Instance Method Summary collapse
- #adj(column, range) ⇒ Object
- #cd(column, values) ⇒ Object
- #contained_by(column, value) ⇒ Object
- #contains(column, value) ⇒ Object
- #cs(column, values) ⇒ Object
- #eq(column, value) ⇒ Object
- #filter(column, operator, criteria) ⇒ Object
- #fts(column, query) ⇒ Object
- #gt(column, value) ⇒ Object
- #gte(column, value) ⇒ Object
- #ilike(column, pattern) ⇒ Object
- #ilike_all_of(column, pattern) ⇒ Object
- #ilike_any_of(column, pattern) ⇒ Object
- #in_(column, values) ⇒ Object
- #is_(column, value) ⇒ Object
- #like(column, pattern) ⇒ Object
- #like_all_of(column, pattern) ⇒ Object
- #like_any_of(column, pattern) ⇒ Object
- #lt(column, value) ⇒ Object
- #lte(column, value) ⇒ Object
- #match(query) ⇒ Object
- #max_affected(value) ⇒ Object
- #neq(column, value) ⇒ Object
- #not_ ⇒ Object
- #nxl(column, range) ⇒ Object
- #nxr(column, range) ⇒ Object
- #or_(filters, reference_table: nil) ⇒ Object
- #ov(column, value) ⇒ Object
- #overlaps(column, values) ⇒ Object
- #phfts(column, query) ⇒ Object
- #plfts(column, query) ⇒ Object
- #range_adjacent(column, range) ⇒ Object
- #range_gt(column, range) ⇒ Object
- #range_gte(column, range) ⇒ Object
- #range_lt(column, range) ⇒ Object
- #range_lte(column, range) ⇒ Object
- #sl(column, range) ⇒ Object
- #sr(column, range) ⇒ Object
- #wfts(column, query) ⇒ Object
Instance Method Details
#adj(column, range) ⇒ Object
304 |
# File 'lib/supabase/postgrest/request_builder.rb', line 304 def adj(column, range); filter(column, Types::Filters::ADJ, "(#{range[0]},#{range[1]})"); end |
#cd(column, values) ⇒ Object
256 257 258 259 |
# File 'lib/supabase/postgrest/request_builder.rb', line 256 def cd(column, values) joined = values.is_a?(Array) ? values.join(",") : values.to_s filter(column, Types::Filters::CD, "{#{joined}}") end |
#contained_by(column, value) ⇒ Object
274 275 276 277 278 279 280 281 282 283 284 285 |
# File 'lib/supabase/postgrest/request_builder.rb', line 274 def contained_by(column, value) case value when String filter(column, Types::Filters::CD, value) when Hash filter(column, Types::Filters::CD, JSON.generate(value)) when Enumerable filter(column, Types::Filters::CD, "{#{value.to_a.join(',')}}") else filter(column, Types::Filters::CD, JSON.generate(value)) end end |
#contains(column, value) ⇒ Object
261 262 263 264 265 266 267 268 269 270 271 272 |
# File 'lib/supabase/postgrest/request_builder.rb', line 261 def contains(column, value) case value when String filter(column, Types::Filters::CS, value) when Hash filter(column, Types::Filters::CS, JSON.generate(value)) when Enumerable filter(column, Types::Filters::CS, "{#{value.to_a.join(',')}}") else filter(column, Types::Filters::CS, JSON.generate(value)) end end |
#cs(column, values) ⇒ Object
251 252 253 254 |
# File 'lib/supabase/postgrest/request_builder.rb', line 251 def cs(column, values) joined = values.is_a?(Array) ? values.join(",") : values.to_s filter(column, Types::Filters::CS, "{#{joined}}") end |
#eq(column, value) ⇒ Object
221 |
# File 'lib/supabase/postgrest/request_builder.rb', line 221 def eq(column, value); filter(column, Types::Filters::EQ, value); end |
#filter(column, operator, criteria) ⇒ Object
210 211 212 213 214 215 216 217 218 219 |
# File 'lib/supabase/postgrest/request_builder.rb', line 210 def filter(column, operator, criteria) if @negate_next @negate_next = false operator = "#{Types::Filters::NOT}.#{operator}" end key = Utils.sanitize_param(column) val = "#{operator}.#{criteria}" @request.params = add_param(@request.params, key, val) self end |
#fts(column, query) ⇒ Object
241 |
# File 'lib/supabase/postgrest/request_builder.rb', line 241 def fts(column, query); filter(column, Types::Filters::FTS, query); end |
#gt(column, value) ⇒ Object
223 |
# File 'lib/supabase/postgrest/request_builder.rb', line 223 def gt(column, value); filter(column, Types::Filters::GT, value); end |
#gte(column, value) ⇒ Object
224 |
# File 'lib/supabase/postgrest/request_builder.rb', line 224 def gte(column, value); filter(column, Types::Filters::GTE, value); end |
#ilike(column, pattern) ⇒ Object
234 |
# File 'lib/supabase/postgrest/request_builder.rb', line 234 def ilike(column, pattern); filter(column, Types::Filters::ILIKE, pattern); end |
#ilike_all_of(column, pattern) ⇒ Object
238 |
# File 'lib/supabase/postgrest/request_builder.rb', line 238 def ilike_all_of(column, pattern); filter(column, Types::Filters::ILIKE_ALL, "{#{pattern}}"); end |
#ilike_any_of(column, pattern) ⇒ Object
239 |
# File 'lib/supabase/postgrest/request_builder.rb', line 239 def ilike_any_of(column, pattern); filter(column, Types::Filters::ILIKE_ANY, "{#{pattern}}"); end |
#in_(column, values) ⇒ Object
246 247 248 249 |
# File 'lib/supabase/postgrest/request_builder.rb', line 246 def in_(column, values) sanitized = values.map { |v| Utils.sanitize_param(v) }.join(",") filter(column, Types::Filters::IN, "(#{sanitized})") end |
#is_(column, value) ⇒ Object
228 229 230 231 |
# File 'lib/supabase/postgrest/request_builder.rb', line 228 def is_(column, value) v = value.nil? ? "null" : value filter(column, Types::Filters::IS, v) end |
#like(column, pattern) ⇒ Object
233 |
# File 'lib/supabase/postgrest/request_builder.rb', line 233 def like(column, pattern); filter(column, Types::Filters::LIKE, pattern); end |
#like_all_of(column, pattern) ⇒ Object
236 |
# File 'lib/supabase/postgrest/request_builder.rb', line 236 def like_all_of(column, pattern); filter(column, Types::Filters::LIKE_ALL, "{#{pattern}}"); end |
#like_any_of(column, pattern) ⇒ Object
237 |
# File 'lib/supabase/postgrest/request_builder.rb', line 237 def like_any_of(column, pattern); filter(column, Types::Filters::LIKE_ANY, "{#{pattern}}"); end |
#lt(column, value) ⇒ Object
225 |
# File 'lib/supabase/postgrest/request_builder.rb', line 225 def lt(column, value); filter(column, Types::Filters::LT, value); end |
#lte(column, value) ⇒ Object
226 |
# File 'lib/supabase/postgrest/request_builder.rb', line 226 def lte(column, value); filter(column, Types::Filters::LTE, value); end |
#match(query) ⇒ Object
313 314 315 316 317 318 319 |
# File 'lib/supabase/postgrest/request_builder.rb', line 313 def match(query) raise ArgumentError, "query must contain at least one key-value pair" if query.nil? || query.empty? result = self query.each { |k, v| result = eq(k, v) } result end |
#max_affected(value) ⇒ Object
327 328 329 330 331 332 333 334 335 336 337 |
# File 'lib/supabase/postgrest/request_builder.rb', line 327 def max_affected(value) existing = @request.headers["Prefer"] || "" prefer = existing.dup unless prefer.empty? prefer += ",handling=strict" unless prefer.include?("handling=strict") end prefer = "handling=strict" if prefer.empty? prefer += ",max-affected=#{value}" @request.headers["Prefer"] = prefer self end |
#neq(column, value) ⇒ Object
222 |
# File 'lib/supabase/postgrest/request_builder.rb', line 222 def neq(column, value); filter(column, Types::Filters::NEQ, value); end |
#not_ ⇒ Object
205 206 207 208 |
# File 'lib/supabase/postgrest/request_builder.rb', line 205 def not_ @negate_next = true self end |
#nxl(column, range) ⇒ Object
302 |
# File 'lib/supabase/postgrest/request_builder.rb', line 302 def nxl(column, range); filter(column, Types::Filters::NXL, "(#{range[0]},#{range[1]})"); end |
#nxr(column, range) ⇒ Object
303 |
# File 'lib/supabase/postgrest/request_builder.rb', line 303 def nxr(column, range); filter(column, Types::Filters::NXR, "(#{range[0]},#{range[1]})"); end |
#or_(filters, reference_table: nil) ⇒ Object
321 322 323 324 325 |
# File 'lib/supabase/postgrest/request_builder.rb', line 321 def or_(filters, reference_table: nil) key = reference_table ? "#{Utils.sanitize_param(reference_table)}.or" : "or" @request.params = add_param(@request.params, key, "(#{filters})") self end |
#ov(column, value) ⇒ Object
287 288 289 290 291 292 293 294 295 296 297 298 |
# File 'lib/supabase/postgrest/request_builder.rb', line 287 def ov(column, value) case value when String filter(column, Types::Filters::OV, value) when Hash filter(column, Types::Filters::OV, JSON.generate(value)) when Enumerable filter(column, Types::Filters::OV, "{#{value.to_a.join(',')}}") else filter(column, Types::Filters::OV, JSON.generate(value)) end end |
#overlaps(column, values) ⇒ Object
311 |
# File 'lib/supabase/postgrest/request_builder.rb', line 311 def overlaps(column, values); ov(column, values); end |
#phfts(column, query) ⇒ Object
243 |
# File 'lib/supabase/postgrest/request_builder.rb', line 243 def phfts(column, query); filter(column, Types::Filters::PHFTS, query); end |
#plfts(column, query) ⇒ Object
242 |
# File 'lib/supabase/postgrest/request_builder.rb', line 242 def plfts(column, query); filter(column, Types::Filters::PLFTS, query); end |
#range_adjacent(column, range) ⇒ Object
310 |
# File 'lib/supabase/postgrest/request_builder.rb', line 310 def range_adjacent(column, range); adj(column, range); end |
#range_gt(column, range) ⇒ Object
307 |
# File 'lib/supabase/postgrest/request_builder.rb', line 307 def range_gt(column, range); sr(column, range); end |
#range_gte(column, range) ⇒ Object
308 |
# File 'lib/supabase/postgrest/request_builder.rb', line 308 def range_gte(column, range); nxl(column, range); end |
#range_lt(column, range) ⇒ Object
306 |
# File 'lib/supabase/postgrest/request_builder.rb', line 306 def range_lt(column, range); sl(column, range); end |
#range_lte(column, range) ⇒ Object
309 |
# File 'lib/supabase/postgrest/request_builder.rb', line 309 def range_lte(column, range); nxr(column, range); end |
#sl(column, range) ⇒ Object
300 |
# File 'lib/supabase/postgrest/request_builder.rb', line 300 def sl(column, range); filter(column, Types::Filters::SL, "(#{range[0]},#{range[1]})"); end |