Sha256: 0b8584f5d140ff266b08241d48e86f7ff03de6f783a807acd4df2741d4c6b811

Contents?: true

Size: 1.34 KB

Versions: 16

Compression:

Stored size: 1.34 KB

Contents

module RiakRecord
  module Callbacks

    CALLBACK_TRIGGERS = [
      :before_create, :after_create,
      :before_save, :after_save,
      :before_update, :after_update
    ]

    def call_callbacks!(trigger)
      callbacks = self.class._callbacks(trigger)
      callbacks.each do |callback|
        if callback.is_a? Symbol
          self.send(callback)
        elsif callback.is_a? Proc
          callback.call(self)
        elsif callback.is_a? String
          eval(callback)
        else
          callback.send(trigger, self)
        end
      end
    end

    CALLBACK_TRIGGERS.each do |trigger|
      define_method("#{trigger}!") do
        call_callbacks!(trigger)
      end
    end

    module ClassMethods
      def _callbacks(trigger)
        @_callbacks ||= {}
        @_callbacks[trigger] ||= []
      end

      CALLBACK_TRIGGERS.each do |trigger|

          ruby = <<-END_OF_RUBY

              def append_#{trigger}(*args)
                _callbacks(:#{trigger}).concat(args)
              end

              def #{trigger}(*args)
                append_#{trigger}(*args)
              end

              def prepend_#{trigger}(*args)
                _callbacks(:#{trigger}).unshift(*args)
              end

          END_OF_RUBY

          class_eval ruby
      end

    end

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

  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
riak-record-0.8.2 lib/riak_record/callbacks.rb
riak-record-0.8.1 lib/riak_record/callbacks.rb
riak-record-0.8.0 lib/riak_record/callbacks.rb
riak-record-0.7.2 lib/riak_record/callbacks.rb
riak-record-0.7.1 lib/riak_record/callbacks.rb
riak-record-0.7.0 lib/riak_record/callbacks.rb
riak-record-0.6.2 lib/riak_record/callbacks.rb
riak-record-0.6.1 lib/riak_record/callbacks.rb
riak-record-0.6.0 lib/riak_record/callbacks.rb
riak-record-0.5.1 lib/riak_record/callbacks.rb
riak-record-0.5.0 lib/riak_record/callbacks.rb
riak-record-0.4.1 lib/riak_record/callbacks.rb
riak-record-0.4.0 lib/riak_record/callbacks.rb
riak-record-0.3.1 lib/riak_record/callbacks.rb
riak-record-0.3.0 lib/riak_record/callbacks.rb
riak-record-0.2.0 lib/riak_record/callbacks.rb