Project

resourcify

0.01
Repository is archived
No commit activity in last 3 years
No release in over 3 years
Resourcify rails controllers and models
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

>= 0
~> 4.0
 Project Readme

Resourcify Gem Version

Resourcify is a rails gem that helps to speed up development by giving you json api controllers that inherit all restful actions. It also makes your models easier to filter by adding a "filter_by" method. This gem behaves as an "acts_as" gem by using ActiveSupport Concerns.

Caveat

The resourcify gem currently depends on Pundit

Installation

Rails 4

Include the gem in your Gemfile:

gem 'resourcify', '0.1.4'

Usage

Applies to different parts of Rails:

  • Controllers
  • Models

Controllers

Usage with controllers is very easy. Just add "resourcify" to your controller and your controller will inherit all the RESTful actions with json response.

class PostsController < ApplicationController
  # Include the resourcify module
  resourcify
  
end
class PostsController < ApplicationController
  # Include the resourcify module with preferred actions as an array
  # Valid actions are: :index, :create, :show, :update, :destroy
  resourcify actions: [:index, :show]
  
end

You can check the base.rb file to see the private methods that have been made available.

Strong Parameters

By default, your controller has a permitted_params method for rails strong parameters like this. "_RC" is the resource class or model class.

# Only allow a trusted parameter "white list" through.
def permitted_params
  if self.respond_to? "#{controller_name.singularize}_params", true
    self.send("#{controller_name.singularize}_params")
  else
    param_key        = _RC.name.split('::').last.singularize.underscore.to_sym
    excluded_fields  = ["id", "created_at", "updated_at"]
    permitted_fields = (_RC.column_names - excluded_fields).map { |f| f.to_sym }
    params.fetch(param_key, {}).permit([]).tap do |wl|
      permitted_fields.each { |f| wl[f] = params[param_key][f] if params[param_key].key?(f) }
    end
  end
end

You can override this by defining a custom method called "permitted_params" (or "post_params" for PostsController) in your controller.

Models

Assuming you have the following models (Post, User) in your application.

class Post < ActiveRecord::Base
  attr_accessible :title
  
  belongs_to :user
end

class User < ActiveRecord::Base
  attr_accessible :first_name, last_name, age
end

Then you can add "resourcify" like this

class Post < ActiveRecord::Base
  # Include the resourcify module
  resourcify
  
  attr_accessible :title
  
  belongs_to :user
end

class User < ActiveRecord::Base
  # Include the resourcify module
  resourcify
  
  attr_accessible :first_name, last_name, age
end

This allows you to filter your models like this

# Post with title equal to 'My First Post'
Post.filter_by('title' => 'My First Post')

# Users with first_name like 'Jo'
User.filter_by('first_name.like' => 'Jo')

# The following parameters are allowed:
# [eq(=), ne(!=), like(LIKE), lt(<), gt(>), lte(<=), gte(>=), in(IN [items]), nin(NOT IN [items])]
User.filter_by('first_name.like' => 'Jo', 'last_name.eq' => 'Doe')
User.filter_by('age.gt' => 37)
User.filter_by('age.gte' => 21, 'age.lte' => 35)

# Users with age in [25, 26, 52, 62] 
User.filter_by('age.in' => '25,26,52,62')

Each model with "resourcify" has a "policy_class" method which returns "ApiPolicy" that can be used by a generic api controller when using Pundit. This was added since the gem is currently tied with Pundit but will later be made optional.

License

Resourcify is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.