Sha256: 57cd2cf3a5353ba502b4c0f8f45cd03feeb62200eff7e35e55e99fc1a809bd10

Contents?: true

Size: 1.83 KB

Versions: 10

Compression:

Stored size: 1.83 KB

Contents

module Aws
  module Api
    class BaseTranslator

      include Util

      DEFAULT_OPTIONS = {
        documentation: true,
        errors: true,
        timestamp_format: 'iso8601',
      }

      def initialize(src, options)
        @properties = {}
        @options = options
        DEFAULT_OPTIONS.each do |option, default|
          @options[option] = default unless @options.key?(option)
        end
        src.each_pair do |property, value|
          self.send("set_#{property}", value)
        end
      end

      def set_timestamp_format(format)
        @options = @options.merge(timestamp_format: format.sub(/Timestamp/, ''))
      end

      def set_documentation(docs)
        if docs && @options[:documentation]
          docs = docs.gsub(/<!--.*?-->/m, '')
          docs = docs.gsub(/<a>(.+?)<\/a>/m, '\1')
          docs = docs.gsub(/<examples?>.+?<\/examples?>/m, '')
          docs = docs.gsub(/<\/?note>/m, '')
          docs = docs.gsub(/\{(\S+)\}/, '`{\1}`')
          docs = docs.gsub(/\s+/, ' ').strip
          @properties['documentation'] = docs unless docs.empty?
        end
      end

      def translated
        raise NotImplementedError
      end

      class << self

        def translate(src, options)
          new(src, options).translated if src
        end

        def property(name, options = {})
          method_name = "set_#{options[:from] || name}"
          define_method(method_name) do |value|
            @properties[name.to_s] = value
          end
        end

        def metadata(name, options = {})
          define_method("set_#{name}") do |value|
            @properties['metadata'] ||= {}
            @properties['metadata'][options[:as] || name.to_s] = value
          end
        end

        def ignore(property)
          define_method("set_#{property}") { |value| }
        end

      end

    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
aws-sdk-core-2.0.0.rc10 lib/aws/api/base_translator.rb
aws-sdk-core-2.0.0.rc9 lib/aws/api/base_translator.rb
aws-sdk-core-2.0.0.rc8 lib/aws/api/base_translator.rb
aws-sdk-core-2.0.0.rc7 lib/aws/api/base_translator.rb
aws-sdk-core-2.0.0.rc6 lib/aws/api/base_translator.rb
aws-sdk-core-2.0.0.rc5 lib/aws/api/base_translator.rb
aws-sdk-core-2.0.0.rc4 lib/aws/api/base_translator.rb
aws-sdk-core-2.0.0.rc3 lib/aws/api/base_translator.rb
aws-sdk-core-2.0.0.rc2 lib/aws/api/base_translator.rb
aws-sdk-core-2.0.0.rc1 lib/aws/api/base_translator.rb