7 Gemas de Ruby on Rails que podrían salvarte el dia

Preview:

Citation preview

GEMAS DE RUBY ON RAILSQUE PUEDEN SALVAR TU DÍA7Francisco Luis Aranda García

@flaranda

Ruby on Rails

Ruby on Rails

devise#1

devise plataformatec / devise

Sistema de autenticación basado en Rack !

Solución ideal para MVC !

“Usa solo lo que necesites”

devise plataformatec / devise

10 módulos principales

Authenticable !

Omniauthable !

Confirmable !

Recoverable !

Registerable

Rememberable !

Trackable !

Timeoutable !

Validatable !

Lockable

devise plataformatec / devise

Preparar devise en una web app

gem install devise123

rails generate devise:install

rails generate devise MODEL_NAME

devise plataformatec / devise

Prueba

cancancan#2

cancancan CanCanCommunity / cancancan

Módulo de autorizaciones para Rails !

Basado en un modelo independiente “Ability” !

Integración con devise para saber quién es “user”

cancancan CanCanCommunity / cancancan

Preparar cancancan en una web app

gem install cancancan12 rails generate cancan:ability

cancancan CanCanCommunity / cancancan

class Ability include CanCan::Ability ! def initialize(user) if user.admin?! can :manage, :all elsif user.client? can :read, :all can :manage, Article do |article| user.articles.include? article end end end end

cancancan CanCanCommunity / cancancan

class ApplicationController < ActionController::Base rescue_from CanCan::AccessDenied do |exception| redirect_to root_url, :alert => exception.message end end

cancancan CanCanCommunity / cancancan

<% if can? :update, @article %> <%= link_to "Edit", edit_article_path(@article) %> <% end %>

acts_as_api#3

acts_as_api fabrik42 / acts_as_api

Interfaz para representaciones de modelos !

Parsear a JSON fácil y rápido !

Plantillas de inclusión de información

acts_as_api fabrik42 / acts_as_api

Preparar acts_as_api en una web app

gem install acts_as_api12 Modificar nuestros modelos al gusto

acts_as_api fabrik42 / acts_as_api

class User < ActiveRecord::Base acts_as_api ! field :first_name field :last_name field :age field :email field :password ! api_accessible :public do |template| template.add :first_name template.add :age end # will render json: { "user": { "first_name": "John", "age": 26 } } end

acts_as_api fabrik42 / acts_as_api

class UsersController < ApiController def index @users = User.all respond_with @users, api_template: :public end end

kaminari#4

kaminari plataformatec / devise

Paginación a nivel backend !

Muchas configuraciones posibles

kaminari plataformatec / devise

Preparar kaminari en una web app

gem install kaminari1

kaminari plataformatec / devise

User.page(7).per(50)

kaminari plataformatec / devise

class UsersController < ApplicationController def index @users = User.all.per(params[:per]).page(params[:page]) respond_with @users end end

GET /users?per=25&page=1

factory_girl_rails#5

factory_girl_rails thoughtbot / factory_girl_rails

Integración para Rails de ‘factory_girl’ !

Factoría de entidades de modelos !

Ideal para tests

factory_girl_rails thoughtbot / factory_girl_rails

Preparar factory_girl_rails en una web app

gem install factory_girl_rails1

factory_girl_rails thoughtbot / factory_girl_rails

FactoryGirl.define do sequence :email do |n| "user#{n}@email.com" end ! sequence :contact_name do |n| "Antonio#{n}" end end

factory_girl_rails thoughtbot / factory_girl_rails

FactoryGirl.define do factory :user do email contact_email password “foobarfoo” end end

FactoryGirl.create_list( :user, 50 )

FactoryGirl.create( :user )

letter_opener#6

Visualización de emails en el explorador !

Los emails aparecen como popups

letter_opener ryanb / letter_opener

letter_opener ryanb / letter_opener

Preparar letter_opener en una web app

gem install letter_opener12 En config/environments/development.rb

config.action_mailer.delivery_method = :letter_opener

letter_opener ryanb / letter_opener

Prueba no disponible!!

:(

delayed_job#7

Ejecución asíncrona de métodos !

Ejecución en segundo plano !

Calendarización de tareas

delayed_job collective idea / delayed_job

delayed_job collective idea / delayed_job

Preparar delayed_job en una web app

gem install delayed_job_active_record123

Si se usa Active Record: rails generate delayed_job:active_record

gem install delayed_job_mongoid

En config/application.rb: config.active_job.queue_adapter = :delayed_job

delayed_job collective idea / delayed_job

@user.activate!(@device) !

@user.delay.activate!(@device)

delayed_job collective idea / delayed_job

def future puts “Future is here!” end !handle_asynchronously :future, run_at: Proc.new { 5.minutes.from_now }

Ruby on Rails

Gracias_ !

:)