Sha256: de58b41afaa542fcf62f1d51bdec70bbe885add592e364804bfa0c20059fe96b

Contents?: true

Size: 1.22 KB

Versions: 20

Compression:

Stored size: 1.22 KB

Contents

require 'set'

module Aws
  module Waiters
    # @api private
    class Provider

      def initialize(definitions)
        @waiter_names = Set.new
        @definitions = definitions['waiters'].each.with_object({}) do |(k,v),h|
          if k.match(/^__/)
            h[k] = v
          else
            underscore(k).to_sym.tap do |name|
              @waiter_names << name
              h[name] = v
            end
          end
        end
      end

      # @return [Array<Symbol>]
      def waiter_names
        @waiter_names.to_a
      end

      # @param [Symbol] waiter_name
      # @return [Waiter]
      # @raise [ArgumentError]
      def waiter(waiter_name)
        if @waiter_names.include?(waiter_name)
          Waiter.new(resolve('extends' => waiter_name))
        else
          raise Errors::NoSuchWaiter.new(waiter_name, waiter_names)
        end
      end

      private

      def resolve(definition)
        if extends = definition.delete('extends')
          resolve(@definitions[extends].merge(definition))
        else
          (@definitions['__default__'] || {}).merge(definition)
        end
      end

      def underscore(str)
        str.gsub(/\w+/) { |part| Seahorse::Util.underscore(part) }
      end

    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
aws-sdk-core-2.0.18 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.17 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.16 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.15 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.14 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.13 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.12 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.11 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.10 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.9 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.8 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.7 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.6 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.5 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.4 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.3 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.2 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.1 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.0 lib/aws-sdk-core/waiters/provider.rb
aws-sdk-core-2.0.0.rc16 lib/aws/waiters/provider.rb