module Orion::DSL::Resources

Overview

A common way in Orion to route is to do so against a known resource. This method will create a series of routes targeted at a specific controller.

The following is an example controller definition and the matching resources definition.

class PostsController
  include Orion::ControllerHelper
  include ResponseHelpers

  def index
    @posts = Post.all
    render :index
  end

  def new
    @post = Post.new
    render :new
  end

  def create
    post = Post.create(request)
    redirect to: post_path post_id: post.id
  end

  def show
    @post = Post.find(request.path_params["post_id"])
  end

  def edit
    @post = Post.find(request.path_params["post_id"])
    render :edit
  end

  def update
    post = Post.find(request.path_params["post_id"])
    HTTP::FormData.parse(request) do |part|
      post.attributes[part.name] = part.body.gets_to_end
    end
    redirect to: post_path post_id: post.id
  end

  def delete
    post = Post.find(request.path_params["post_id"])
    post.delete
    redirect to: posts_path
  end
end

resources :posts

Including/Excluding Actions

By default, the actions index, new, create, show, edit, update, delete are included. You may include or exclude explicitly by using the only and except params.

NOTE The index action is not added for singular resources.

resources :posts, except: [:edit, :update]
resources :users, only: [:new, :create, :show]

Nested Resources and Routes

You can add nested resources and member routes by providing a block to the resources definition.

resources :posts do
  post "feature", action: feature
  resources :likes
  resources :comments
end

Singular Resources

In addition to using the collection of resources method, You can also add singular resources which do not provide a id_param or index action.

resource :profile

Customizing ID

You can customize the ID path parameter by passing the id_param parameter.

resources :posts, id_param: :article_id

Constraining the ID

You can set constraints on the ID parameter by passing the id_constraint parameter.

See Orion::DSL::Constraints for more details on constraints.

resources :posts, id_constraint: /^\d{4}$/

Defined in:

orion/dsl/resources.cr

Macro Summary

Macro Detail

macro resource(name, *, controller = nil, only = nil, except = nil, format = nil, accept = nil, content_type = nil, type = nil) #

[View source]
macro resources(name, *, controller = nil, only = nil, except = nil, id_constraint = nil, format = nil, accept = nil, id_param = nil, content_type = nil, type = nil) #

[View source]