class Apiphobic::Requests::TransformJsonApi

Attributes

request[RW]

Public Class Methods

new(request) click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 15
def initialize(request)
  self.request = request
end

Public Instance Methods

transform() click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 19
def transform
  request['QUERY_STRING'] = query_string_with_underscored_parameters

  if has_content? && json?
    request['rack.input']     = request_body_with_underscored_json_keys
    request['CONTENT_LENGTH'] = content_length.to_s
  end

  request
end

Private Instance Methods

content_length() click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 40
def content_length
  underscored_request_json.bytesize
end
has_content?() click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 32
def has_content?
  request['CONTENT_LENGTH'].to_i.positive?
end
json?() click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 36
def json?
  request['CONTENT_TYPE'] =~ /json/
end
query_string() click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 79
def query_string
  request['QUERY_STRING']
end
query_string_with_underscored_parameters() click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 48
def query_string_with_underscored_parameters
  @query_string_with_underscored_parameters ||= begin
    return query_string unless query_string.respond_to?(:gsub)

    query_string.gsub(/(?<=\A|&|\?)[^=&]+/) do |parameter_name|
      unescaped_parameter_name   = CGI.unescape(parameter_name)
      underscored_parameter_name = unescaped_parameter_name.underscore

      CGI.escape(underscored_parameter_name)
    end
  end
end
request_body() click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 73
def request_body
  request['rack.input']&.read.to_s
ensure
  request['rack.input']&.rewind
end
request_body_with_underscored_json_keys() click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 44
def request_body_with_underscored_json_keys
  @request_body_with_underscored_json_keys ||= StringIO.new(underscored_request_json)
end
request_hash() click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 69
def request_hash
  JSON.parse(request_body)
end
underscored_request_hash() click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 65
def underscored_request_hash
  request_hash.deep_underscore_keys
end
underscored_request_json() click to toggle source
# File lib/apiphobic/requests/transform_json_api.rb, line 61
def underscored_request_json
  @underscored_request_json ||= JSON.dump(underscored_request_hash)
end