46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module API
 | 
						|
  module Hooks
 | 
						|
    # It is important that this re-usable module is not a Grape Instance,
 | 
						|
    # since it will be re-mounted.
 | 
						|
    # rubocop: disable API/Base
 | 
						|
    class UrlVariables < ::Grape::API
 | 
						|
      params do
 | 
						|
        requires :hook_id, type: Integer, desc: 'The ID of the hook'
 | 
						|
        requires :key, type: String, desc: 'The key of the variable'
 | 
						|
      end
 | 
						|
      namespace ':hook_id/url_variables' do
 | 
						|
        desc 'Set a url variable'
 | 
						|
        params do
 | 
						|
          requires :value, type: String, desc: 'The value of the variable'
 | 
						|
        end
 | 
						|
        put ":key" do
 | 
						|
          hook = find_hook
 | 
						|
          key = params.delete(:key)
 | 
						|
          value = params.delete(:value)
 | 
						|
          vars = hook.url_variables.merge(key => value)
 | 
						|
 | 
						|
          error!('Illegal key or value', 422) unless hook.update(url_variables: vars)
 | 
						|
 | 
						|
          status :no_content
 | 
						|
        end
 | 
						|
 | 
						|
        desc 'Un-Set a url variable'
 | 
						|
        delete ":key" do
 | 
						|
          hook = find_hook
 | 
						|
          key = params.delete(:key)
 | 
						|
          not_found!('URL variable') unless hook.url_variables.key?(key)
 | 
						|
 | 
						|
          vars = hook.url_variables.reject { _1 == key }
 | 
						|
 | 
						|
          error!('Could not unset variable', 422) unless hook.update(url_variables: vars)
 | 
						|
 | 
						|
          status :no_content
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
    # rubocop: enable API/Base
 | 
						|
  end
 | 
						|
end
 |