def alter(method, value, *context)
      @log.debug("Invoking plugin alter API #{method}")
      plugins.each do |p|
        if p.respond_to? "#{method}_alter"
          @log.debug("Sending message to #{p.class.name}")
          value = p.public_send "#{method}_alter", value, *context
        end
      end
      value
    end
def alter(method, value, *context)
      @log.debug("Invoking plugin alter API #{method}")
      plugins.each do |p|
        if p.respond_to? "#{method}_alter"
          @log.debug("Sending message to #{p.class.name}")
          value = p.public_send "#{method}_alter", value, *context
        end
      end
      value
    end
Call all plugins and allow for altering a value.

 The return value of each hook is passed into the next alter function, hence all implementations must always
 return a value. If the hook doesn't wish to modify data this call then it should return the original value.

 @param [Symbol] method The name of the method to call. This should be namespaced somehow. For example, a plugin
                        called `usmu-s3` could use the method namespace `s3` and have a hook called `:s3_upload`
 @param [Object] value The value to modify.
 @param [Array]  context Optional extra parameters to provide.
 @return [Object] The modified value.