Sha256: 0d775e3f465e30f85ad213d06e51ca4d914f710fe20dea7129c8294cb493dd98
Contents?: true
Size: 1.05 KB
Versions: 1
Compression:
Stored size: 1.05 KB
Contents
# frozen_string_literal: true require "rack" module DerivationEndpoint class Derivation class << self def decode(params) decoded_data = DerivationEndpoint::Serializer.decode(params) path = decoded_data["path"] options = decoded_data["options"].transform_keys(&:to_sym) DerivationEndpoint.config.decoder.call(path, options) end end def call(env) request = Rack::Request.new(env) return handle_request(request) if request.get? || request.head? render_error(405, "Method not allowed") end private def handle_request(request) params = request.path_info.split("/").last return render_success(params) if params render_error(404, "Source not found") rescue ArgumentError render_error(405, "Method not allowed") end def render_success(params) [302, { "Location" => self.class.decode(params) }, []] end def render_error(status, message) [status, { "Content-Type" => "text/plain" }, [message]] end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
derivation_endpoint-0.1.0 | lib/derivation_endpoint/derivation.rb |