Sha256: 651253d710ed4023ef50cc29774fd5a2bb9cefc437217161d3205970c2d38377

Contents?: true

Size: 1.58 KB

Versions: 12

Compression:

Stored size: 1.58 KB

Contents

require 'json'

# Hack AwsLambda Ruby Runtime to fix .to_json issue collision with ActiveSupport.
# To reproduce:
#   Create a shared resource from the docs and call sns.publish
#
# Causes an infinite loop when calling sns.publish somehow.
# Overriding with JSON.dump and follow up with AWS ticket.
module AwsLambda
  class Marshaller
    class << self
      # By default, just runs #to_json on the method's response value.
      # This can be overwritten by users who know what they are doing.
      # The response is an array of response, content-type.
      # If returned without a content-type, it is assumed to be application/json
      # Finally, StringIO/IO is used to signal a response that shouldn't be
      # formatted as JSON, and should get a different content-type header.
      def marshall_response(method_response)
        case method_response
        when StringIO, IO
          [method_response, 'application/unknown']
        else
          # Orignal method calls .to_json but this collides with ActiveSupport's to_json
          # method_response.to_json # application/json is assumed
          # https://stackoverflow.com/questions/18067203/ruby-to-json-issue-with-error-illegal-malformed-utf-8
          if method_response.is_a?(Hash)
            method_response.deep_transform_values! do |v|
              if v.respond_to?(:force_encoding) && !v.frozen?
                v.force_encoding("ISO-8859-1").encode("UTF-8")
              else
                v # IE: Integer
              end
            end
          end
          JSON.dump(method_response)
        end
      end

    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
jets-5.0.10 lib/jets/overrides/lambda/marshaller.rb
jets-5.0.9 lib/jets/overrides/lambda/marshaller.rb
jets-5.0.8 lib/jets/overrides/lambda/marshaller.rb
jets-5.0.7 lib/jets/overrides/lambda/marshaller.rb
jets-5.0.6 lib/jets/overrides/lambda/marshaller.rb
jets-5.0.5 lib/jets/overrides/lambda/marshaller.rb
jets-5.0.4 lib/jets/overrides/lambda/marshaller.rb
jets-5.0.3 lib/jets/overrides/lambda/marshaller.rb
jets-5.0.2 lib/jets/overrides/lambda/marshaller.rb
jets-5.0.1 lib/jets/overrides/lambda/marshaller.rb
jets-5.0.0 lib/jets/overrides/lambda/marshaller.rb
jets-5.0.0.beta1 lib/jets/overrides/lambda/marshaller.rb