Sha256: fea03a9eea4e7093351d1fa3c88f312a206f2f1ae693e68f5b858a986c56c517

Contents?: true

Size: 1.08 KB

Versions: 20

Compression:

Stored size: 1.08 KB

Contents

module Dragonfly
  class RoutedEndpoint

    class NoRoutingParams < RuntimeError; end

    def initialize(app, &block)
      @app = app
      @block = block
    end

    def call(env)
      params = symbolize_keys_of Rack::Request.new(env).params
      job = @block.call(params.merge(routing_params(env)), @app)
      Response.new(job, env).to_response
    rescue Job::NoSHAGiven => e
      [400, {"Content-Type" => 'text/plain'}, ["You need to give a SHA parameter"]]
    rescue Job::IncorrectSHA => e
      [400, {"Content-Type" => 'text/plain'}, ["The SHA parameter you gave (#{e}) is incorrect"]]
    end

    private

    def routing_params(env)
      env['rack.routing_args'] ||
        env['action_dispatch.request.path_parameters'] ||
        env['router.params'] ||
        env['usher.params'] ||
        env['dragonfly.params'] ||
        raise(NoRoutingParams, "couldn't find any routing parameters in env #{env.inspect}")
    end

    def symbolize_keys_of(hash)
      hash.inject({}) do |h, (key, value)|
        h[(key.to_sym rescue key) || key] = value
        h
      end
    end

  end
end

Version data entries

20 entries across 20 versions & 3 rubygems

Version Path
dragonfly-0.8.6 lib/dragonfly/routed_endpoint.rb
dragonfly-0.9.10 lib/dragonfly/routed_endpoint.rb
dragonfly-0.9.9 lib/dragonfly/routed_endpoint.rb
dragonfly-0.9.8 lib/dragonfly/routed_endpoint.rb
dragonfly-0.9.5 lib/dragonfly/routed_endpoint.rb
dragonfly-0.9.4 lib/dragonfly/routed_endpoint.rb
dragonfly-0.9.3 lib/dragonfly/routed_endpoint.rb
dragonfly-0.9.2 lib/dragonfly/routed_endpoint.rb
dragonfly-0.8.5 lib/dragonfly/routed_endpoint.rb
dragonfly-0.9.1 lib/dragonfly/routed_endpoint.rb
dragonfly-0.9.0 lib/dragonfly/routed_endpoint.rb
dragonfly-0.8.4 lib/dragonfly/routed_endpoint.rb
oahu-dragonfly-0.8.2 lib/dragonfly/routed_endpoint.rb
fog-dragonfly-0.8.2 lib/dragonfly/routed_endpoint.rb
dragonfly-0.8.2 lib/dragonfly/routed_endpoint.rb
fog-dragonfly-0.8.1 lib/dragonfly/routed_endpoint.rb
dragonfly-0.8.1 lib/dragonfly/routed_endpoint.rb
dragonfly-0.8.0 lib/dragonfly/routed_endpoint.rb
dragonfly-0.7.7 lib/dragonfly/routed_endpoint.rb
dragonfly-0.7.6 lib/dragonfly/routed_endpoint.rb