Sha256: 293f533d22ccb442712c468191516ac507f2c76899f447e8d6265c6607a9d231

Contents?: true

Size: 1.99 KB

Versions: 2

Compression:

Stored size: 1.99 KB

Contents

module Awspec::Type
  class InvalidRdsDbParameter < StandardError
    ##
    # Overrides the superclass initialize method to include more information
    # and default error message.
    # Expected parameters:
    # - parameter_name: the name of the parameter.

    def initialize(parameter_name)
      @param_name = parameter_name
      message = "There is no such parameter \"rds.#{parameter_name}\""
      super message
    end
  end

  class RdsDBParameters
    ##
    # Thanks to AWS for creating parameters names like
    # 'rds.accepted_password_auth_method', which would be caught as method 'rds'
    # by method_missing in RdsDbParameterGroup class, this class was created
    # See https://github.com/k1LoW/awspec/issues/527 for more details
    def initialize(params)
      @params = params
    end

    def to_s
      return "RdsDBParameters = #{@params}"
    end

    def method_missing(name)
      param_name = name.to_sym
      return @params[param_name] if @params.include?(param_name)
      raise InvalidRdsDbParameter, name
    end
  end

  class RdsDbParameterGroup < ResourceBase
    def resource_via_client
      return @resource_via_client if @resource_via_client
      @resource_via_client ||= select_all_rds_db_parameters(@display_name)
    end

    def id
      @id ||= @display_name unless resource_via_client.empty?
    end

    def method_missing(name)
      param_name = name.to_s
      return create_rds_params if param_name == 'rds'

      if resource_via_client.include?(param_name)
        resource_via_client[param_name].to_s
      else
        super
      end
    end

    private

    def create_rds_params
      return @rds_params if @rds_params

      rds_params_keys = resource_via_client.keys.select { |key| key.to_s.start_with?('rds.') }
      rds_params = {}

      rds_params_keys.each do |key|
        new_key = key.split('.')[-1]
        rds_params[new_key.to_sym] = resource_via_client[key]
      end

      @rds_params = RdsDBParameters.new(rds_params)
      @rds_params
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
awspec-1.25.1 lib/awspec/type/rds_db_parameter_group.rb
awspec-1.25.0 lib/awspec/type/rds_db_parameter_group.rb