1
0
Fork 0
mirror of https://github.com/fog/fog-aws.git synced 2022-11-09 13:50:52 -05:00
fog--fog-aws/lib/fog/aws/requests/lambda/update_event_source_mapping.rb
2015-06-23 09:53:53 -03:00

86 lines
3.7 KiB
Ruby

module Fog
module AWS
class Lambda
class Real
# Change the parameters of the existing mapping without losing your position in the stream.
# http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateEventSourceMapping.html
# ==== Parameters
# * UUID <~String> - event source mapping identifier.
# * BatchSize <~Integer> - maximum number of stream records that can be sent to your Lambda function for a single invocation.
# * Enabled <~Boolean> - specifies whether AWS Lambda should actively poll the stream or not.
# * FunctionName <~String> - Lambda function to which you want the stream records sent.
# ==== Returns
# * response<~Excon::Response>:
# * body<~Hash>:
# * 'BatchSize' <~Integer> - largest number of records that AWS Lambda will retrieve from your event source at the time of invoking your function.
# * 'EventSourceArn' <~String> - Amazon Resource Name (ARN) of the stream that is the source of events.
# * 'FunctionArn' <~String> - Lambda function to invoke when AWS Lambda detects an event on the stream.
# * 'LastModified' <~Time> - UTC time string indicating the last time the event mapping was updated.
# * 'LastProcessingResult' <~String> - result of the last AWS Lambda invocation of your Lambda function.
# * 'State' <~String> - state of the event source mapping.
# * 'StateTransitionReason' <~String> - reason the event source mapping is in its current state.
# * 'UUID' <~String> - AWS Lambda assigned opaque identifier for the mapping.
def update_event_source_mapping(params={})
function_name = params.delete('FunctionName')
mapping_id = params.delete('UUID')
batch_size = params.delete('BatchSize')
enabled = params.delete('Enabled')
update = {}
update.merge!('BatchSize' => batch_size) if batch_size
update.merge!('Enabled' => enabled) if !enabled.nil?
update.merge!('FunctionName' => function_name) if function_name
request({
:method => 'PUT',
:path => "/event-source-mappings/#{mapping_id}",
:expects => 202,
:body => Fog::JSON.encode(update)
}.merge(params))
end
end
class Mock
def update_event_source_mapping(params={})
mapping_id = params.delete('UUID')
mapping = self.data[:event_source_mappings][mapping_id]
unless mapping
message = 'ResourceNotFoundException => '
message << 'The resource you requested does not exist.'
raise Fog::AWS::Lambda::Error, message
end
function_name = params.delete('FunctionName')
function = {}
if function_name
function_opts = { 'FunctionName' => function_name }
function = self.get_function_configuration(function_opts).body
function_arn = function['FunctionArn']
end
batch_size = params.delete('BatchSize')
enabled = params.delete('Enabled')
update = {}
if function_name && !function.empty? && function_arn
update.merge!('FunctionArn' => function_arn)
end
update.merge!('BatchSize' => batch_size) if batch_size
update.merge!('Enabled' => enabled) if !enabled.nil?
mapping.merge!(update)
mapping['State'] = 'Disabling' if enabled.eql?(false)
mapping['State'] = 'Enabling' if enabled.eql?(true)
response = Excon::Response.new
response.status = 202
response.body = mapping
response
end
end
end
end
end