ayemos/lamma

View on GitHub
lib/lamma/alias.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Lamma
  class Alias
    attr_accessor :description, :version

    def initialize(function, name, version=nil, description=nil)
      @function = function
      @name = name
      @version = version
      @description = description
    end

    def create
      lambda_client.create_alias({
        function_name: @function.name,
        name: name, # 'name' indicates the self
        function_version: @version,
        description: description
      })
    end

    def update
      lambda_client.update_alias({
        function_name: @function.name,
        name: name, # 'name' indicates the self
        function_version: @version,
        description: description
      })
    end

    def create_or_update
      if remote_exist?
        update
      else
        create
      end
    end

    def name
      @name.upcase
    end

    def remote_exist?
      begin
        lambda_client.get_alias({
          function_name: @function.name,
          name: name
        })
      rescue Aws::Lambda::Errors::ResourceNotFoundException
        false
      end
    end

    def remote_version
      begin
        lambda_client.get_alias({
          function_name: @function.name,
          name: name
        }).function_version
      rescue Aws::Lambda::Errors::ResourceNotFoundException
        nil
      end
    end

    private

    def description
      @description ||= "Function alias #{name} managed by lamma"
    end

    def lambda_client
      @lambda_client ||= Aws::Lambda::Client.new(region: @function.region)
    end
  end
end