Module: Supabase::Postgrest::RequestPrep
- Defined in:
- lib/supabase/postgrest/request_builder.rb
Overview
Internal: prepares default headers + params + method for the four CRUD verbs.
Class Method Summary collapse
- .cleaned_columns(columns) ⇒ Object
- .pre_delete(count:, returning:) ⇒ Object
- .pre_insert(json, count:, returning:, upsert:, default_to_null: true) ⇒ Object
- .pre_select(*columns, count: nil, head: nil) ⇒ Object
- .pre_update(json, count:, returning:) ⇒ Object
- .pre_upsert(json, count:, returning:, ignore_duplicates:, on_conflict: "", default_to_null: true) ⇒ Object
- .unique_columns(rows) ⇒ Object
Class Method Details
.cleaned_columns(columns) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/supabase/postgrest/request_builder.rb', line 59 def cleaned_columns(columns) quoted = false columns.map do |column| column.to_s.each_char.each_with_object(+"") do |char, out| if char =~ /\s/ && !quoted next end quoted = !quoted if char == '"' out << char end end.join(",") end |
.pre_delete(count:, returning:) ⇒ Object
112 113 114 115 116 |
# File 'lib/supabase/postgrest/request_builder.rb', line 112 def pre_delete(count:, returning:) prefer = ["return=#{returning}"] prefer << "count=#{count}" if count [Types::RequestMethod::DELETE, {}, { "Prefer" => prefer.join(",") }, {}] end |
.pre_insert(json, count:, returning:, upsert:, default_to_null: true) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/supabase/postgrest/request_builder.rb', line 80 def pre_insert(json, count:, returning:, upsert:, default_to_null: true) prefer = ["return=#{returning}"] prefer << "count=#{count}" if count prefer << "resolution=merge-duplicates" if upsert prefer << "missing=default" unless default_to_null headers = { "Prefer" => prefer.join(",") } params = {} params["columns"] = unique_columns(json) if json.is_a?(Array) && !json.empty? [Types::RequestMethod::POST, params, headers, json] end |
.pre_select(*columns, count: nil, head: nil) ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/supabase/postgrest/request_builder.rb', line 72 def pre_select(*columns, count: nil, head: nil) method = head ? Types::RequestMethod::HEAD : Types::RequestMethod::GET cleaned = cleaned_columns(columns.empty? ? %w[*] : columns) params = { "select" => cleaned } headers = count ? { "Prefer" => "count=#{count}" } : {} [method, params, headers, {}] end |
.pre_update(json, count:, returning:) ⇒ Object
106 107 108 109 110 |
# File 'lib/supabase/postgrest/request_builder.rb', line 106 def pre_update(json, count:, returning:) prefer = ["return=#{returning}"] prefer << "count=#{count}" if count [Types::RequestMethod::PATCH, {}, { "Prefer" => prefer.join(",") }, json] end |
.pre_upsert(json, count:, returning:, ignore_duplicates:, on_conflict: "", default_to_null: true) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/supabase/postgrest/request_builder.rb', line 92 def pre_upsert(json, count:, returning:, ignore_duplicates:, on_conflict: "", default_to_null: true) prefer = ["return=#{returning}"] prefer << "count=#{count}" if count resolution = ignore_duplicates ? "ignore" : "merge" prefer << "resolution=#{resolution}-duplicates" prefer << "missing=default" unless default_to_null headers = { "Prefer" => prefer.join(",") } params = {} params["on_conflict"] = on_conflict if on_conflict && !on_conflict.empty? params["columns"] = unique_columns(json) if json.is_a?(Array) && !json.empty? [Types::RequestMethod::POST, params, headers, json] end |
.unique_columns(rows) ⇒ Object
52 53 54 55 56 57 |
# File 'lib/supabase/postgrest/request_builder.rb', line 52 def unique_columns(rows) keys = rows.each_with_object([]) do |row, acc| row.each_key { |k| acc << k unless acc.include?(k) } end keys.map { |k| %("#{k}") }.join(",") end |