Skip to content

Instantly share code, notes, and snippets.

@j-mcnally
Created October 24, 2014 22:27
Show Gist options
  • Save j-mcnally/95ddd278c5d51a33867c to your computer and use it in GitHub Desktop.
Save j-mcnally/95ddd278c5d51a33867c to your computer and use it in GitHub Desktop.
Is this batshit crazy?
defmodule Exq.RouterPlug do
require Logger
import Plug.Conn
use Plug.Router
plug :match
plug :dispatch
def init(options), do: options
def call(conn, opts) do
namespace = opts[:namespace] || "exq"
if (length(conn.path_info) > 0) do
if hd(conn.path_info) == namespace do
conn = %{conn | path_info: tl(conn.path_info)}
conn = super(conn, opts)
end
end
conn
end
get "/api/queues" do
Logger.debug "YOLO"
conn |> halt
end
match _ do
Logger.debug "HALP"
conn |> halt
end
end
@chrismccord
Copy link

defmodule Exq.RouterPlug do
  require Logger
  alias Exq.RouterPlug.Router

  def init(options), do: options

  def call(conn, opts) do
    namespace(conn, opts, opts[:namespace] || "exq")
  end

  def namespace(%Plug.Conn{path_info: [ns | path]} = conn, opts, ns) do
    Router.call(%Plug.Conn{conn | path_info: path}, Router.init(opts))
  end
  def namespace(conn, _opts, _ns), do: conn

  defmodule Router do
    import Plug.Conn
    use Plug.Router

    plug :match
    plug :dispatch

    get "/api/queues" do
      Logger.debug "YOLO"
      conn |> halt
    end

    match _ do
      Logger.debug "HALP"
      conn |> halt
    end
  end
end

@j-mcnally
Copy link
Author

18:16:41.315 [error] Ranch listener ExqUi.Router.HTTP had connection process started with :cowboy_protocol:start_link/4 at #PID<0.340.0> exit with reason: {[reason: :undef, mfa: {Plug.Adapters.Cowboy.Handler, :init, 3}, stacktrace: [{Router, :init, [[namespace: "exq"]], []}, {Exq.RouterPlug, :namespace, 3, [file: 'web/router.ex', line: 12]}, {ExqUi.Router, :before, 2, [file: 'web/router.ex', line: 5]}, {ExqUi.Router, :call, 2, [file: 'lib/phoenix/router.ex', line: 2]}, {Plug.Adapters.Cowboy.Handler, :init, 3, [file: 'lib/plug/adapters/cowboy/handler.ex', line: 7]}, {:cowboy_handler, :handler_init, 4, [file: 'src/cowboy_handler.erl', line: 64]}, {:cowboy_protocol, :execute, 4, [file: 'src/cowboy_protocol.erl', line: 435]}], req: [socket: #Port<0.7871>, transport: :ranch_tcp, connection: :keepalive, pid: #PID<0.340.0>, method: "GET", version: :"HTTP/1.1", peer: {{127, 0, 0, 1}, 60071}, host: "localhost", host_info: :undefined, port: 4000, path: "/exq", path_info: :undefined, qs: "", qs_vals: :undefined, bindings: [], headers: [{"host", "localhost:4000"}, {"connection", "keep-alive"}, {"accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"}, {"user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36"}, {"accept-encoding", "gzip,deflate,sdch"}, {"accept-language", "en-US,en;q=0.8"}, {"cookie", "_lp_tc=eGSQrSuXFdcy-9zKb_ya7FKhE6z4HQ3QVm_neivcX3UncdBiXQTszv1D_FRgNrJBoP1MFzHzYKcPtJ5WXyvnC6WS1mCzQXj3qXX84zpdjdh2x9pQfBeUL4Qi; guest_token=IkIwaklwLTZkMDdtRmZuWl9oWnl3WUEi--0a4446436d0edf9472f2b0a69b0e47e8eb4e2e9c; _trend5_session=bnA2LzlwWEtzUDc4a0loN2pvcUdkSTRKZm1wbHZLMy9weEdEeXJvY3hBeWpyUkdXL1lzYVlMaHBTY1ZQTXRuaFQ5bWM3NG9idVdoSjFMTHF3ZTMvanJSRVJmVEJheUxMZ0ZMUkxIZHpOTnlINjZpcDRyeVViek96RHY1VTlUUFJyU2YwRHIzcUtVNllQcTlsMlhoWFRKZWl5YzNMc3YzK0VVMWdZN3IwRE5UY2ZJVkszMy9BNnpsVlBBcjVuZ1lKTisrZ1RFYzdGNXE4STgrelpyVDZpQTE2SVp0eGVnV09TSEpuMTlBSVZLQT0tLTBEc2dwMHJCdDZod3NLSlNsZ3RUUXc9PQ%3D%3D--63b63db799a7c13d0299ac673b13143c6780259b; _dewey_session=WU42OUJsVlFzTS9NZWRXWXVqeWNReWRtdUJQSlQvdUR5eUhNeEw4WDRFdVorRkViOXRHRjlycTdzaTUrWGFVblN1WnZiTVQvVVZiOFV2N2llaGpjZ01UYzBXUVltUWowQlFQWHFoUXNTeVpkYlBSOWtNRUQ3Z2xzcXR6TVRyOUxYRko1S01GSExlaVZtZWdDS1RwUmdRMGt3M1pUV3lRODdtWXcrc2xvdDBKaEg0cmtmNldMS3lRN0NuOVJGZnBYem9LTWM3RFpibkNYWGl5SUtYQ1M2Qy9qdTZaQ0xONFVyN2hISDZvbldqM1F0Z0YxcDBHOG5pdW9PekR3RnkrN3piNXdkWUZJUkswdzR1aXBwYUROa1FncWd1dExNUjFlSWxkUVBTdER0N1BhRlZwcnRCTDEwYytyczBIWTFsb1VDY3E2bnFHUW1OdENXNitkTGp1WkhBPT0tLXJrcWVDaE8yS2I0ZVdzV1FodjhvVEE9PQ%3D%3D--70a6690a79c5fe22bcd8b111109ca58790db9579; _ipad-builder-rails_session=clZPbGh3bUJoRmt5Zm9oMGFTUDlocG10cmMxb1AwSTVvckhoR0ZXSHRBTjFGa1VxL0N1WXByQUxzR0FqQ2kvZVF3d2xJN0IwcnZMS1R2bnAxdy9CeEdCcGxERGV2S3A2ZXJKUXpGdW9VWk02TmxpNHJGUzZZR1JuVDZwNU9xaHc1N0JJQVBEdjdWM01ad2JUcFBJcWhqY21XcHhLQ3ZwT0xQU3lwQlZXSDR4MFZtbjFJdjNsWmZLVUZvZXA1bC96LS1hZ3pkd21sUGcxY3lkUDhKbHIrMjR3PT0%3D--37c39ca1d8e0290abef47063d391023de0d09df4; _winix_session=dDRENnNVbE51YkVCRURiUkRFazg3WjkzL25wdFl4a29IdGw0Q0cyb1g3KzY1SERCRXFxM1BLM2JReXhIQmtzcFpJQmJ5TStLYnVNbTJjYU95Yk83Q1JxVi9wQi9XT2hzMTM2aU91cUtFbC9DMzMvMzlFQ2FFZTJ1cTZXSEZmenVjaWltVkxqbWxBNXhiQ2tQOTRFZUVNRG5TU3lEQ1RvUHNzSS9BTzEzSkRyd2pXRnRaNldrZmRTcGlEKzZITmphMU4rbm1Pd3hTeEdCTG9vbktXVGkrMnVPVG9WMlpLQkhnQi9aSnZKV3JNM1pxTHlDSm43VHVVMzg5aDdQQVZRY2dONzNqdmFnSUJmUzJaSzVwTGRzZkNNZ2t2TUtRSUt6eVZVMGthL21Hd1p2a3IyQ2dCdnlqZzIxVFFxTmdmUmZuaTB1L1BsZFBrakhOVVU5T3pZeEg1UVM3ZHhnQmVndzQ4dHpVMUtlVlFSbDg0cEJHaVUrQkR1ZGo5dzBCK3NkU2wvQk5XMk5vS0VsKzRvSjJIRHRweWM3bG45SUJ6blhBN1ZNMUZwSjZEbFNoMjcreDl6eFROM2JmOER5Y2tOd044QytBUllkWWZoRFdOTk5VS3Jtb3BVbzBEdThnYWNnQVNVNklhbE1BaTRWRnZkZU8rN29jbTB4dWdsU3IvQXMtLXdub05RYnl1VnhBbTRCL0xkNkhUNnc9PQ%3D%3D--e58565a2133afb7678e65c5e20c08d64f2d4839c; _struct_key=g3QAAAABZAAQcGhvZW5peF9tZXNzYWdlc3QAAAAA--xtnNo8S6C4TBnIHZ75Dpgp/WdrM=; _ga=GA1.1.1682883242.1410157156; _exq_ui_key=Zmh0WnFkQ1RlbHRsem9CY1M0SWNZSCs4V0ZFbUlDZFp2OXNJbXE5anRDdz0tLUpGQytEWXBqZjVwelFEZnNQWldZQUE9PQ==--D/XenXJ0AI1mFRnUfPpCSNXyv9k="}], p_headers: [{"connection", ["keep-alive"]}], cookies: :undefined, meta: [], body_state: :waiting, buffer: "", multipart: :undefined, resp_compress: false, resp_state: :waiting, resp_headers: [], resp_body: "", onresponse: :undefined], opts: {ExqUi.Router, []}], [{:cowboy_protocol, :execute, 4, [file: 'src/cowboy_protocol.erl', line: 435]}]}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment