1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/rackspace/models/auto_scale/webhook.rb

118 lines
3.6 KiB
Ruby
Raw Normal View History

require 'fog/core/model'
module Fog
module Rackspace
class AutoScale
class Webhook < Fog::Model
# @!attribute [r] id
# @return [String] The webhook id
identity :id
# @!attribute [r] group
# @return [String] The associated group
attribute :group
# @!attribute [r] policy
# @return [String] The associated policy
attribute :policy
# @!attribute [r] name
# @return [String] The webhook name
attribute :name
# @!attribute [r] metadata
# @return [Hash] The metadata
attribute :metadata
# @!attribute [r] links
# @return [Array] The webhook links
attribute :links
# Create webhook
# * requires attribute: :name
#
# @return [Boolean] returns true if webhook is being created
#
# @raise [Fog::Rackspace::AutoScale:::NotFound] - HTTP 404
# @raise [Fog::Rackspace::AutoScale:::BadRequest] - HTTP 400
# @raise [Fog::Rackspace::AutoScale:::InternalServerError] - HTTP 500
# @raise [Fog::Rackspace::AutoScale:::ServiceError]
#
# @see Webhooks#create
# @see
def create
requires :name
options = {}
2013-09-26 09:54:43 -04:00
options['name'] = name if name
options['metadata'] = metadata if metadata
data = service.create_webhook(group.id, policy.id, options)
merge_attributes(data.body['webhooks'][0])
true
end
# Updates the webhook
#
# @return [Boolean] returns true if webhook has started updating
#
# @raise [Fog::Rackspace::AutoScale:::NotFound] - HTTP 404
# @raise [Fog::Rackspace::AutoScale:::BadRequest] - HTTP 400
# @raise [Fog::Rackspace::AutoScale:::InternalServerError] - HTTP 500
# @raise [Fog::Rackspace::AutoScale:::ServiceError]
#
# @see http://docs.rackspace.com/cas/api/v1.0/autoscale-devguide/content/PUT_putWebhook_v1.0__tenantId__groups__groupId__policies__policyId__webhooks__webhookId__Webhooks.html
def update
requires :identity
options = {
'name' => name,
'metadata' => metadata
}
data = service.update_webhook(group.id, policy.id, identity, options)
merge_attributes(data.body)
true
end
# Saves the webhook
# Creates hook if it is new, otherwise it will update it
# @return [Boolean] true if policy has saved
def save
if persisted?
update
else
create
end
true
end
# Destroy the webhook
#
# @return [Boolean] returns true if webhook has started deleting
#
# @raise [Fog::Rackspace::AutoScale:::NotFound] - HTTP 404
# @raise [Fog::Rackspace::AutoScale:::BadRequest] - HTTP 400
# @raise [Fog::Rackspace::AutoScale:::InternalServerError] - HTTP 500
# @raise [Fog::Rackspace::AutoScale:::ServiceError]
#
# @see http://docs.rackspace.com/cas/api/v1.0/autoscale-devguide/content/DELETE_deleteWebhook_v1.0__tenantId__groups__groupId__policies__policyId__webhooks__webhookId__Webhooks.html
def destroy
requires :identity
service.delete_webhook(group.id, policy.id, identity)
true
end
# Retrieves the URL for anonymously executing the policy webhook
# @return [String] the URL
def execution_url
requires :links
link = links.find { |l| l['rel'] == 'capability' }
link['href'] rescue nil
end
end
end
end
end