Sha256: 79ca744745e769cbc8c51e3270bf796a1fe2eea81c0a2eeecd8cfd59ab0b4025

Contents?: true

Size: 1.36 KB

Versions: 60

Compression:

Stored size: 1.36 KB

Contents

require 'active_support/callbacks'

module JSONAPI
  module Callbacks
    def self.included(base)
      base.class_eval do
        include ActiveSupport::Callbacks
        base.extend ClassMethods
      end
    end

    module ClassMethods
      def define_jsonapi_resources_callbacks(*callbacks)
        options = callbacks.extract_options!
        options = {
          only: [:before, :around, :after]
        }.merge!(options)

        types = Array(options.delete(:only))

        callbacks.each do |callback|
          define_callbacks(callback, options)

          types.each do |type|
            send("_define_#{type}_callback", self, callback)
          end
        end
      end

      private

      def _define_before_callback(klass, callback) #:nodoc:
        klass.define_singleton_method("before_#{callback}") do |*args, &block|
          set_callback(:"#{callback}", :before, *args, &block)
        end
      end

      def _define_around_callback(klass, callback) #:nodoc:
        klass.define_singleton_method("around_#{callback}") do |*args, &block|
          set_callback(:"#{callback}", :around, *args, &block)
        end
      end

      def _define_after_callback(klass, callback) #:nodoc:
        klass.define_singleton_method("after_#{callback}") do |*args, &block|
          set_callback(:"#{callback}", :after, *args, &block)
        end
      end
    end
  end
end

Version data entries

60 entries across 60 versions & 1 rubygems

Version Path
jsonapi-resources-0.9.6 lib/jsonapi/callbacks.rb
jsonapi-resources-0.10.0.beta3 lib/jsonapi/callbacks.rb
jsonapi-resources-0.10.0.beta2.1 lib/jsonapi/callbacks.rb
jsonapi-resources-0.10.0.beta2 lib/jsonapi/callbacks.rb
jsonapi-resources-0.9.5 lib/jsonapi/callbacks.rb
jsonapi-resources-0.10.0.beta1 lib/jsonapi/callbacks.rb
jsonapi-resources-0.9.4 lib/jsonapi/callbacks.rb
jsonapi-resources-0.9.3 lib/jsonapi/callbacks.rb
jsonapi-resources-0.9.2 lib/jsonapi/callbacks.rb
jsonapi-resources-0.9.1.beta2 lib/jsonapi/callbacks.rb
jsonapi-resources-0.9.1.beta1 lib/jsonapi/callbacks.rb
jsonapi-resources-0.9.0 lib/jsonapi/callbacks.rb
jsonapi-resources-0.9.0.beta3 lib/jsonapi/callbacks.rb
jsonapi-resources-0.8.3 lib/jsonapi/callbacks.rb
jsonapi-resources-0.8.2 lib/jsonapi/callbacks.rb
jsonapi-resources-0.9.0.beta2 lib/jsonapi/callbacks.rb
jsonapi-resources-0.9.0.beta1 lib/jsonapi/callbacks.rb
jsonapi-resources-0.8.1 lib/jsonapi/callbacks.rb
jsonapi-resources-0.8.0 lib/jsonapi/callbacks.rb
jsonapi-resources-0.8.0.beta3 lib/jsonapi/callbacks.rb