0435db30ba
* Add JSON response format to webhooks Support JSON responses for all webhook endpoints: index, show, create, update, destroy, and activation. Adds jbuilder views, updates controllers to use respond_to, and documents the API in docs/API.md. * Address PR review feedback - Use distinct board ID in API docs webhook example - Use render "webhooks/show" in activations controller for consistency * Address PR review feedback from flavorjones - Include webhook.board in cache key to avoid stale board data - Use _url instead of _path for location header consistency * Fix webhook create test to match Location header format Use board_webhook_url instead of board_webhook_path since the controller returns a full URL in the Location header. * Fix board ID in Location header example in API docs Use distinct board ID in the Location URL to match the JSON body example.
71 lines
1.6 KiB
Ruby
71 lines
1.6 KiB
Ruby
class WebhooksController < ApplicationController
|
|
include BoardScoped
|
|
|
|
before_action :ensure_admin
|
|
before_action :set_webhook, except: %i[ index new create ]
|
|
|
|
def index
|
|
set_page_and_extract_portion_from @board.webhooks.ordered
|
|
end
|
|
|
|
def show
|
|
end
|
|
|
|
def new
|
|
@webhook = @board.webhooks.new
|
|
end
|
|
|
|
def create
|
|
@webhook = @board.webhooks.new(webhook_params)
|
|
|
|
if @webhook.save
|
|
respond_to do |format|
|
|
format.html { redirect_to @webhook }
|
|
format.json { render :show, status: :created, location: board_webhook_url(@webhook.board, @webhook, format: :json) }
|
|
end
|
|
else
|
|
respond_to do |format|
|
|
format.html { render :new, status: :unprocessable_entity }
|
|
format.json { render json: @webhook.errors, status: :unprocessable_entity }
|
|
end
|
|
end
|
|
end
|
|
|
|
def edit
|
|
end
|
|
|
|
def update
|
|
if @webhook.update(webhook_params.except(:url))
|
|
respond_to do |format|
|
|
format.html { redirect_to @webhook }
|
|
format.json { render :show }
|
|
end
|
|
else
|
|
respond_to do |format|
|
|
format.html { render :edit, status: :unprocessable_entity }
|
|
format.json { render json: @webhook.errors, status: :unprocessable_entity }
|
|
end
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@webhook.destroy!
|
|
|
|
respond_to do |format|
|
|
format.html { redirect_to board_webhooks_path }
|
|
format.json { head :no_content }
|
|
end
|
|
end
|
|
|
|
private
|
|
def set_webhook
|
|
@webhook = @board.webhooks.find(params[:id])
|
|
end
|
|
|
|
def webhook_params
|
|
params
|
|
.expect(webhook: [ :name, :url, subscribed_actions: [] ])
|
|
.merge(board_id: @board.id)
|
|
end
|
|
end
|