Module: Angelo::ParamsParser

Included in:
Base
Defined in:
lib/angelo/params_parser.rb

Constant Summary collapse

EMPTY_JSON =
'{}'

Instance Method Summary collapse

Instance Method Details

#content_type?(type) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
59
60
61
62
# File 'lib/angelo/params_parser.rb', line 56

def content_type? type
  if request.headers[CONTENT_TYPE_HEADER_KEY]
    request.headers[CONTENT_TYPE_HEADER_KEY].split(SEMICOLON).include? type
  else
    nil
  end
end

#form_encoded?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/angelo/params_parser.rb', line 48

def form_encoded?
  content_type? FORM_TYPE
end

#json?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/angelo/params_parser.rb', line 52

def json?
  content_type? JSON_TYPE
end

#parse_formencoded(str) ⇒ Object



11
12
13
14
15
16
17
# File 'lib/angelo/params_parser.rb', line 11

def parse_formencoded str
  str.split(AMPERSAND).reduce(SymHash.new) do |p, kv|
    key, value = kv.split(EQUALS).map {|s| CGI.unescape s}
    p[key] = value
    p
  end
end

#parse_post_bodyObject



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/angelo/params_parser.rb', line 23

def parse_post_body
  body = request_body rescue request.body.to_s
  case
  when form_encoded?
    parse_formencoded body
  when json? && !body.empty?
    parsed_body = JSON.parse body
    parsed_body = SymHash.new parsed_body if Hash === parsed_body
    parsed_body
  else
    {}
  end
end

#parse_query_stringObject



19
20
21
# File 'lib/angelo/params_parser.rb', line 19

def parse_query_string
  parse_formencoded(request.query_string || EMPTY_STRING)
end

#parse_query_string_and_post_bodyObject



37
38
39
40
41
42
43
44
45
46
# File 'lib/angelo/params_parser.rb', line 37

def parse_query_string_and_post_body
  parsed_body = parse_post_body
  case parsed_body
  when Hash
    parse_query_string.merge! parse_post_body
  when Array
    self.request_body = parsed_body
    parse_query_string
  end
end