Sha256: 73b90fe73191fc28b863886d5fc77c834b6b01595606b0c20d70f1bb146833e1

Contents?: true

Size: 1.7 KB

Versions: 11

Compression:

Stored size: 1.7 KB

Contents

module Aws
  module Plugins

    # The Amazon Route 53 API returns hosted zones and request Ids as strings
    # formatted like:
    #
    #     '/hostedzone/ID'
    #     '/change/ID'
    #
    # However, their API does not accept Ids with the '/hostedzone/' or
    # '/change/' prefixes. This plugin removes those prefixes before
    # serializing their Ids onto the request. This allows a user to
    # use the prefixed Ids returned in {Aws::Route53::Client} responses.
    class Route53IdFix < Seahorse::Client::Plugin

      class Handler < Seahorse::Client::Handler

        def call(context)
          remove_id_prefixes(context.params)
          @handler.call(context)
        end

        private

        def remove_id_prefixes(params)
          # Many operations accept of :id or :hosted_zone_id as a root-level
          # param, pruning prefixes from those.
          [:id, :hosted_zone_id].each do |key|
            params[key] = remove_prefix(params[key]) if params[key]
          end

          # The `#change_resource_record_sets operation` has a deeply nested
          # target with a :hosted_zone_id that needs to be pruned.
          if params[:change_batch]
            params[:change_batch][:changes].each do |batch|
              if target = batch[:resource_record_set][:alias_target]
                target[:hosted_zone_id] = remove_prefix(target[:hosted_zone_id])
              end
            end
          end
        end

        def remove_prefix(str)
          str.sub(/^\/(hostedzone|change)\//, '')
        end

      end

      # Run this handler after params have been validated, but before
      # they are serialized onto the request
      handler(Handler, priority: 99, step: :build)

    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
aws-sdk-core-2.0.6 lib/aws-sdk-core/plugins/route_53_id_fix.rb
aws-sdk-core-2.0.5 lib/aws-sdk-core/plugins/route_53_id_fix.rb
aws-sdk-core-2.0.4 lib/aws-sdk-core/plugins/route_53_id_fix.rb
aws-sdk-core-2.0.3 lib/aws-sdk-core/plugins/route_53_id_fix.rb
aws-sdk-core-2.0.2 lib/aws-sdk-core/plugins/route_53_id_fix.rb
aws-sdk-core-2.0.1 lib/aws-sdk-core/plugins/route_53_id_fix.rb
aws-sdk-core-2.0.0 lib/aws-sdk-core/plugins/route_53_id_fix.rb
aws-sdk-core-2.0.0.rc16 lib/aws/plugins/route_53_id_fix.rb
aws-sdk-core-2.0.0.rc15 lib/aws/plugins/route_53_id_fix.rb
aws-sdk-core-2.0.0.rc14 lib/aws/plugins/route_53_id_fix.rb
aws-sdk-core-2.0.0.rc13 lib/aws/plugins/route_53_id_fix.rb