module Api::Controllers::Base
def apply_pagination
def apply_pagination collection = instance_variable_get collection_variable @pagy, collection = pagy_cursor collection, after: params[:after], order: {id: :asc} instance_variable_set collection_variable, collection end
def collection_variable
def collection_variable @collection_variable ||= "@#{self.class.name.split("::").last.gsub("Controller", "").underscore}" end
def controller_namespace
def controller_namespace name.split("::").first(2).join("::") end
def current_membership
def current_membership current_user.memberships.where(team: current_team).first end
def current_team
def current_team # Application agents are users but only have one team. current_user&.teams&.first end
def current_user
def current_user @current_user ||= if doorkeeper_token User.find_by(id: doorkeeper_token[:resource_owner_id]) else warden.authenticate(scope: :user) end # TODO Remove this rescue once workspace clusters can write to this column on the identity server. if doorkeeper_token begin doorkeeper_token.update(last_used_at: Time.zone.now) rescue ActiveRecord::StatementInvalid => _ end end raise NotAuthenticatedError unless @current_user @current_user end
def modify_url_params(url, new_params)
def modify_url_params(url, new_params) uri = URI.parse(url) query = Rack::Utils.parse_query(uri.query) new_params.each do |key, value| query[key.to_s] = value end uri.query = Rack::Utils.build_query(query) uri.to_s end
def permitted_arrays
def permitted_arrays {} end
def permitted_fields
def permitted_fields [] end
def process_params(strong_params)
def process_params(strong_params) end
def regex_to_remove_controller_namespace
def regex_to_remove_controller_namespace /^#{controller_namespace + "::"}/ end
def set_default_response_format
def set_default_response_format request.format = :json end
def set_pagination_headers
def set_pagination_headers return unless @pagy if @pagy.has_more? if (collection = instance_variable_get(collection_variable)) next_cursor = collection.last.id link_header = response.headers["Link"] link_value = "<#{modify_url_params(request.url, after: next_cursor)}>; rel=\"next\"" response.headers["Link"] = link_header ? "#{link_header}, #{link_value}" : link_value response.headers["Pagination-Next"] = next_cursor end end end