Sha256: 33004a0c9938419232a74c8fc0cf786e55f263f37c032f8cf3ff0b8c874891ba
Contents?: true
Size: 1.51 KB
Versions: 1
Compression:
Stored size: 1.51 KB
Contents
require 'jellyfish' require 'rack/request' module Jellyfish class Sinatra < Controller attr_reader :request, :params def block_call argument, block @request = Rack::Request.new(env) @params = force_encoding(indifferent_params( if argument.kind_of?(MatchData) # merge captured data from matcher into params as sinatra request.params.merge(Hash[argument.names.zip(argument.captures)]) else request.params end)) super end private # stolen from sinatra # Enable string or symbol key access to the nested params hash. def indifferent_params(params) params = indifferent_hash.merge(params) params.each do |key, value| next unless value.is_a?(Hash) params[key] = indifferent_params(value) end end # stolen from sinatra # Creates a Hash with indifferent access. def indifferent_hash Hash.new {|hash,key| hash[key.to_s] if Symbol === key } end # stolen from sinatra # Fixes encoding issues by casting params to Encoding.default_external def force_encoding(data, encoding=Encoding.default_external) return data if data.respond_to?(:rewind) # e.g. Tempfile, File, etc if data.respond_to?(:force_encoding) data.force_encoding(encoding).encode! elsif data.respond_to?(:each_value) data.each_value{ |v| force_encoding(v, encoding) } elsif data.respond_to?(:each) data.each{ |v| force_encoding(v, encoding) } end data end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
jellyfish-0.5.2 | lib/jellyfish/sinatra.rb |