module Rodauth::OAuth
Constants
- VERSION
Public Class Methods
ExtendDatabase(db)
click to toggle source
rubocop:disable Naming/MethodName
# File lib/rodauth/oauth/database_extensions.rb, line 6 def self.ExtendDatabase(db) Module.new do dataset = db.dataset if dataset.supports_returning?(:insert) def __insert_and_return__(dataset, _pkey, params) dataset.returning.insert(params).first end else def __insert_and_return__(dataset, pkey, params) id = dataset.insert(params) dataset.where(pkey => id).first end end if dataset.supports_returning?(:update) def __update_and_return__(dataset, params) dataset.returning.update(params).first end else def __update_and_return__(dataset, params) dataset.update(params) dataset.first end end if dataset.respond_to?(:supports_insert_conflict?) && dataset.supports_insert_conflict? def __insert_or_update_and_return__(dataset, pkey, unique_columns, params, conds = nil, exclude_on_update = nil) to_update = params.keys - unique_columns to_update -= exclude_on_update if exclude_on_update dataset = dataset.insert_conflict( target: unique_columns, update: Hash[ to_update.map { |attribute| [attribute, Sequel[:excluded][attribute]] } ], update_where: conds ) __insert_and_return__(dataset, pkey, params) end def __insert_or_do_nothing_and_return__(dataset, pkey, unique_columns, params) __insert_and_return__( dataset.insert_conflict(target: unique_columns), pkey, params ) || dataset.where(params).first end else def __insert_or_update_and_return__(dataset, pkey, unique_columns, params, conds = nil, exclude_on_update = nil) find_params, update_params = params.partition { |key, _| unique_columns.include?(key) }.map { |h| Hash[h] } dataset_where = dataset.where(find_params) record = if conds dataset_where_conds = dataset_where.where(conds) # this means that there's still a valid entry there, so return early return if dataset_where.count != dataset_where_conds.count dataset_where_conds.first else dataset_where.first end if record update_params.reject! { |k, _v| exclude_on_update.include?(k) } if exclude_on_update __update_and_return__(dataset_where, update_params) else __insert_and_return__(dataset, pkey, params) end end def __insert_or_do_nothing_and_return__(dataset, pkey, unique_columns, params) find_params = params.select { |key, _| unique_columns.include?(key) } dataset.where(find_params).first || __insert_and_return__(dataset, pkey, params) end end end end
Public Instance Methods
__insert_and_return__(dataset, _pkey, params)
click to toggle source
# File lib/rodauth/oauth/database_extensions.rb, line 11 def __insert_and_return__(dataset, _pkey, params) dataset.returning.insert(params).first end
__insert_or_do_nothing_and_return__(dataset, pkey, unique_columns, params)
click to toggle source
# File lib/rodauth/oauth/database_extensions.rb, line 46 def __insert_or_do_nothing_and_return__(dataset, pkey, unique_columns, params) __insert_and_return__( dataset.insert_conflict(target: unique_columns), pkey, params ) || dataset.where(params).first end
__insert_or_update_and_return__(dataset, pkey, unique_columns, params, conds = nil, exclude_on_update = nil)
click to toggle source
# File lib/rodauth/oauth/database_extensions.rb, line 33 def __insert_or_update_and_return__(dataset, pkey, unique_columns, params, conds = nil, exclude_on_update = nil) to_update = params.keys - unique_columns to_update -= exclude_on_update if exclude_on_update dataset = dataset.insert_conflict( target: unique_columns, update: Hash[ to_update.map { |attribute| [attribute, Sequel[:excluded][attribute]] } ], update_where: conds ) __insert_and_return__(dataset, pkey, params) end
__update_and_return__(dataset, params)
click to toggle source
# File lib/rodauth/oauth/database_extensions.rb, line 22 def __update_and_return__(dataset, params) dataset.returning.update(params).first end