module Saml::Notification::ClassMethods

Public Instance Methods

method_added(name) click to toggle source
# File lib/saml/notification.rb, line 52
def method_added(name)
  wrap_with_notification(name, true) if should_wrap?(name)
end
notify(method, result) click to toggle source
# File lib/saml/notification.rb, line 27
def notify(method, result)
  class_name = self.name.demodulize.underscore
  ActiveSupport::Notifications.instrument "#{method}.#{class_name}.saml", result
  result
end
notify_on(*options) click to toggle source
# File lib/saml/notification.rb, line 33
def notify_on(*options)
  options.present? ? @notify_on = options : @notify_on
end
should_wrap?(name) click to toggle source
# File lib/saml/notification.rb, line 37
def should_wrap?(name)
  @notify_on ||= []
  @exclude   ||= []

  return false if @notify_on.exclude?(name) || @exclude.include?(name.to_s)
  @exclude << "#{name}_with_notification"
  @exclude << "#{name}_without_notification"
  @exclude << "#{name}"
  true
end
singleton_method_added(name) click to toggle source
# File lib/saml/notification.rb, line 48
def singleton_method_added(name)
  wrap_with_notification(name, false) if should_wrap?(name)
end
wrap_with_notification(method, instance_method) click to toggle source
# File lib/saml/notification.rb, line 10
      def wrap_with_notification(method, instance_method)
        wrapper = <<-RUBY
          define_method "#{method}_with_notification" do |*args|
            notify "#{method}", send("#{method}_without_notification", *args)
          end

          alias_method "#{method}_without_notification", :#{method}
          alias_method :#{method}, "#{method}_with_notification"
        RUBY

        if instance_method
          class_eval wrapper
        else
          class_eval "class << self; #{wrapper}; end"
        end
      end