Sha256: bf508ff10326102e3ef7fb97a08e9b3ac43f1b62c55e4799d6f7453aaccf12ac

Contents?: true

Size: 1.48 KB

Versions: 1

Compression:

Stored size: 1.48 KB

Contents

require 'cancan'

module Customs

  # Override CanCan::ControllerResource

  class ControllerResource < CanCan::ControllerResource
    def initialize *args
      super
      @controller.resource_name   = instance_name
      @controller.resource_class  = resource_class
    end

    def build_resource
      resource = resource_base.new
      assign_attributes(resource)
    end
  end

  module ControlTraffic

    def self.included base
      base.send :extend, ClassMethods

      base.class_attribute :controller_resource_class, :instance_reader => false
      base.controller_resource_class = ControllerResource

      base.class_attribute :resource_name,  :instance_reader => false
      base.class_attribute :resource_class, :instance_reader => false

      base.define_callbacks :save, :destroy
    end

    module ClassMethods
      def cancan_resource_class
        if ancestors.map(&:to_s).include? "InheritedResources::Actions"
          super
        else
          self.controller_resource_class
        end
      end


      [:before, :after, :around].each do |callback|

        define_method "#{callback}_save" do |*names, &blk|
          _insert_callbacks(names, blk) do |name, options|
            set_callback :save, callback, name, options
          end
        end

        define_method "#{callback}_destroy" do |*names, &blk|
          _insert_callbacks(names, blk) do |name, options|
            set_callback :destroy, callback, name, options
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
customs-1.1.0 lib/customs/control_traffic.rb