Sha256: 1a2c1c620910d7d55c464a6f0ce9380bdeae49a24284efe8978ff0965c9c4632
Contents?: true
Size: 1.67 KB
Versions: 2
Compression:
Stored size: 1.67 KB
Contents
require 'cgi' module Angelo class FormEncodingError < StandardError; end module ParamsParser EMPTY_JSON = '{}' 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 def parse_query_string parse_formencoded(request.query_string || EMPTY_STRING) end def parse_post_body body = request.body.to_s case when form_encoded? parse_formencoded body when json? && !body.empty? SymHash.new JSON.parse body else {} end end def parse_query_string_and_post_body parse_query_string.merge! parse_post_body end def form_encoded? content_type? FORM_TYPE end def json? content_type? JSON_TYPE end 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 end class SymHash < Hash # Returns a Hash that allows values to be fetched with String or # Symbol keys. def initialize h = nil super(){|hash,key| hash[key.to_s] if Symbol === key} unless h.nil? merge! h # Replace values that are Hashes with SymHashes, recursively. each do |k,v| self[k] = case v when Hash SymHash.new(v) when Array v.map {|e| Hash === e ? SymHash.new(e) : e} else v end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
angelo-0.4.1 | lib/angelo/params_parser.rb |
angelo-0.4.0 | lib/angelo/params_parser.rb |