Sha256: 0b0729d757863924a2b87b79a4fa83029405fce4e9b36f38695075fb6d21baf5

Contents?: true

Size: 683 Bytes

Versions: 5

Compression:

Stored size: 683 Bytes

Contents

# frozen_string_literal: true

module Authsignal
  module Middleware
    class JsonRequest < Faraday::Middleware
      def on_request(env)
        return if env.body.nil?

        parsed_body = JSON.parse(env.body)
        if parsed_body.is_a?(Hash)
          env.body = camelcase_keys(parsed_body).to_json
        end
      rescue JSON::ParserError
        # noop
      end

      private

      def camelcase_keys(hash)
        hash.transform_keys { |key| snake_to_camel(key.to_s).to_sym }
      end

      def snake_to_camel(str)
        str.split('_').inject([]) do |buffer, e|
          buffer.push(buffer.empty? ? e : e.capitalize)
        end.join
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
authsignal-ruby-5.0.0 lib/authsignal/middleware/json_request.rb
authsignal-ruby-4.1.0 lib/authsignal/middleware/json_request.rb
authsignal-ruby-4.0.0 lib/authsignal/middleware/json_request.rb
authsignal-ruby-3.0.1 lib/authsignal/middleware/json_request.rb
authsignal-ruby-3.0.0 lib/authsignal/middleware/json_request.rb