Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Abstract common routing resource concerns to cut down on duplication.

branch: master
README.md

Routing Concerns

Abstract common routing resource concerns to cut down on duplication.

Code before:

BCX::Application.routes.draw do
  resources :calendar_events do
    get :past, on: :collection
    resources :comments
  end

  resources :messages  { resources :comments }
  resources :forwards  { resources :comments }
  resources :uploads   { resources :comments }
  resources :documents { resources :comments }
  resources :todos     { resources :comments }

  resources :projects, defaults: { bucket_type: 'project' } do
    post :trash, :restore, on: :member

    resources :messages, except: [ :new ] do
      post :trash, :restore, on: :member
      resources :image_attachments, only: :index
    end

    resources :forwards do
      member do
        get  :content
        post :trash, :restore
      end

      resources :image_attachments, only: :index
    end

    resources :uploads do
      post :trash, :restore, on: :member
      resources :image_attachments, only: :index
    end

    resources :todolists do
      get :more, :completed, on: :collection
      post :trash, :restore, on: :member
    end

    resources :todos do
      post :toggle, :trash, :restore, on: :member
    end

    resources :comments do
      post :trash, on: :member
      resources :image_attachments, only: :index
    end
  end
end

Code after:

BCX::Application.routes.draw do
  concern :commentable do
    resources :comments
  end

  concern :trashable do
    post :trash, :restore, on: :member
  end

  concern :image_attachable do
    resources :image_attachments, only: :index
  end

  resources :calendar_events, concerns: :commentable do
    get :past, on: :collection
  end

  resources :messages, :forwards, :uploads, :documents, :todos, concerns: :commentable

  resources :projects, concerns: :trashable, defaults: { bucket_type: 'project' } do
    resources :messages, :uploads, :comments, concerns: [:trashable, :image_attachable]

    resources :forwards, concerns: [:trashable, :image_attachable] do
      get :content, on: :member
    end

    resources :todolists, concerns: :trashable do
      get :more, :completed, on: :collection
    end

    resources :todos, concerns: :trashable do
      post :toggle, on: :member
    end
  end
end

Compatibility

This plugin was designed as a proof-of-concept for a feature that's destined for Rails 4. It has only been tested on Rails 3.2+, but may work on earlier versions as well.

Something went wrong with that request. Please try again.