Sha256: 13971572ba58afdb38904cda4843bb0862f8c8f581147a67a39ded465cebb894

Contents?: true

Size: 981 Bytes

Versions: 3

Compression:

Stored size: 981 Bytes

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  = indifferent_params(if argument.kind_of?(MatchData)
      then # 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
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
jellyfish-0.5.1 lib/jellyfish/sinatra.rb
jellyfish-0.5.0 lib/jellyfish/sinatra.rb
jellyfish-0.4.0 lib/jellyfish/sinatra.rb