Module: Jets::Controller::Request::Compat::Params

Extended by:
Memoist
Included in:
Jets::Controller::Request
Defined in:
lib/jets/controller/request/compat/params.rb

Overview

Provides these 3 methods to make it Rails compatible:

request_parameters
query_parameters
path_parameters

Instance Method Summary collapse

Instance Method Details

#GETObject Also known as: query_parameters

Based on ActionDispatch::Request#GET bit.ly/48hvDwe Override Rack’s GET method to support indifferent access.



61
62
63
64
65
66
67
# File 'lib/jets/controller/request/compat/params.rb', line 61

def GET
  fetch_header("action_dispatch.request.query_parameters") do |k|
    params = event["queryStringParameters"] || {}
    set_binary_encoding(params)
    set_header k, normalize_encode_params(params)
  end
end

#get_request_parametersObject



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/jets/controller/request/compat/params.rb', line 85

def get_request_parameters
  body = event['isBase64Encoded'] ? base64_decode(event["body"]) : event["body"]
  return {} if body.nil?

  parsed_json = parse_json(body)
  return parsed_json if parsed_json

  if content_type.to_s.include?("application/x-www-form-urlencoded")
    return ::Rack::Utils.parse_nested_query(body)
  elsif content_type.to_s.include?("multipart/form-data")
    return parse_multipart(body)
  end

  {} # fallback to empty Hash
end

#parameters(include_path_params: true, include_body_params: true) ⇒ Object Also known as: params

Merge all the parameters together for convenience. Users still have access via events.

Precedence:

1. path parameters have highest precdence
2. query string parameters
3. body parameters


28
29
30
31
32
33
34
35
36
# File 'lib/jets/controller/request/compat/params.rb', line 28

def parameters(include_path_params: true, include_body_params: true)
  params = {}
  params = params.deep_merge(request_parameters) if include_body_params
  params = params.deep_merge(unescape_recursively(query_parameters)) # always
  params = params.deep_merge(path_parameters) if include_path_params
  params = set_binary_encoding(params)
  params = normalize_encode_params(params)
  params
end

#path_parametersObject



40
41
42
43
44
# File 'lib/jets/controller/request/compat/params.rb', line 40

def path_parameters
  path_params = event["pathParameters"] || {}
  path_params.merge!(path_parameters_defaults)
  path_params = path_params.map { |k, path| [k, CGI.unescape(path.to_s)] }.to_h
end

#path_parameters_defaultsObject



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/jets/controller/request/compat/params.rb', line 46

def path_parameters_defaults
  route = Jets::Router::Matcher.new.find_by_request(self)
  if route
    controller = route.controller_name.delete_suffix("Controller").underscore
    {
      controller: controller,
      action: route.action_name,
    }.merge(route.resolved_defaults)
  else
    {}
  end
end

#POSTObject Also known as: request_parameters

Based on ActionDispatch::Request#POST bit.ly/48fxh1A Override Rack’s POST method to support indifferent access.



72
73
74
75
76
77
# File 'lib/jets/controller/request/compat/params.rb', line 72

def POST
  fetch_header("action_dispatch.request.request_parameters") do
    params = get_request_parameters
    self.request_parameters = normalize_encode_params(params)
  end
end

#request_method_from_hidden_method_fieldObject

jets specific



103
104
105
# File 'lib/jets/controller/request/compat/params.rb', line 103

def request_method_from_hidden_method_field
  get_request_parameters["_method"].to_s.upcase if get_request_parameters["_method"]
end

#request_parameters=(params) ⇒ Object



80
81
82
83
# File 'lib/jets/controller/request/compat/params.rb', line 80

def request_parameters=(params)
  raise if params.nil?
  set_header("action_dispatch.request.request_parameters", params)
end

#set_binary_encoding(params) ⇒ Object



15
16
17
18
19
# File 'lib/jets/controller/request/compat/params.rb', line 15

def set_binary_encoding(params)
  controller = path_parameters[:controller]
  action = path_parameters[:action]
  ActionDispatch::Request::Utils.set_binary_encoding(self, params, controller, action)
end