Sha256: 04caf658f5d5deedb78e2e9d008a10fee7a7ce47175ab2f3dbff9dd4490f44fb

Contents?: true

Size: 1.36 KB

Versions: 12

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

12 entries across 12 versions & 1 rubygems

Version Path
jsonapi-resources-0.4.2 lib/jsonapi/callbacks.rb
jsonapi-resources-0.4.1 lib/jsonapi/callbacks.rb
jsonapi-resources-0.4.0 lib/jsonapi/callbacks.rb
jsonapi-resources-0.3.3 lib/jsonapi/callbacks.rb
jsonapi-resources-0.3.2 lib/jsonapi/callbacks.rb
jsonapi-resources-0.3.1 lib/jsonapi/callbacks.rb
jsonapi-resources-0.3.0 lib/jsonapi/callbacks.rb
jsonapi-resources-0.3.0.pre2 lib/jsonapi/callbacks.rb
jsonapi-resources-0.3.0.pre1 lib/jsonapi/callbacks.rb
jsonapi-resources-0.2.0 lib/jsonapi/callbacks.rb
jsonapi-resources-0.1.1 lib/jsonapi/callbacks.rb
jsonapi-resources-0.1.0 lib/jsonapi/callbacks.rb