Sha256: e0b13bbd7348a37555566418729b3246355f1873e9b070217d0a318debaba80f

Contents?: true

Size: 1.41 KB

Versions: 14

Compression:

Stored size: 1.41 KB

Contents

require 'base64'

module Aws
  module Json
    class Builder

      include Seahorse::Model::Shapes

      def initialize(rules)
        @rules = rules
      end

      def to_json(params)
        Json.dump(format(@rules, params))
      end
      alias serialize to_json

      private

      def structure(ref, values)
        shape = ref.shape
        values.each_pair.with_object({}) do |(key, value), data|
          if shape.member?(key) && !value.nil?
            member_ref = shape.member(key)
            member_name = member_ref.location_name || key
            data[member_name] = format(member_ref, value)
          end
        end
      end

      def list(ref, values)
        member_ref = ref.shape.member
        values.collect { |value| format(member_ref, value) }
      end

      def map(ref, values)
        value_ref = ref.shape.value
        values.each.with_object({}) do |(key, value), data|
          data[key] = format(value_ref, value)
        end
      end

      def format(ref, value)
        case ref.shape
        when StructureShape then structure(ref, value)
        when ListShape      then list(ref, value)
        when MapShape       then map(ref, value)
        when TimestampShape then value.to_i
        when BlobShape      then encode(value)
        else value
        end
      end

      def encode(blob)
        Base64.strict_encode64(String === blob ? blob : blob.read)
      end

    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
aws-sdk-core-2.1.14 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.13 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.12 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.11 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.10 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.9 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.8 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.7 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.5 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.4 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.3 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.2 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.1 lib/aws-sdk-core/json/builder.rb
aws-sdk-core-2.1.0 lib/aws-sdk-core/json/builder.rb