sealink/rails_core_extensions

View on GitHub
lib/rails_core_extensions/activatable.rb

Summary

Maintainability
A
25 mins
Test Coverage
module Activatable

  def self.included(controller)
    controller.extend(ClassMethods)
  end

  module ClassMethods

    def activatable
      include Activatable::InstanceMethods
    end

  end

  module InstanceMethods

    def activate(success_block = nil)
      resource.active = params[:active].presence || false
      action = resource.active ? 'activate' : 'inactivate'

      resource.save!

      success_block ||= -> {
        flash[:success] = "#{resource} #{action}d"
        redirect_to(collection_path)
      }

      success_block.call

    rescue ActiveRecord::ActiveRecordError => e
      resource.errors.add(:base, "Failed to #{action}: " + e.message)
      flash[:error] = resource.errors.full_messages.to_sentence
      redirect_to(collection_path)
    end

  end

end