Sha256: 69a1b83f4f3ae0d4c5d08d7d21ef2bcbfd67c23daf99279cc5df1b19ab6c87ec

Contents?: true

Size: 1.03 KB

Versions: 17

Compression:

Stored size: 1.03 KB

Contents

require "nokogiri"

module Savon
  class LogMessage

    def initialize(message, filters = [], pretty_print = false)
      @message      = message
      @filters      = filters
      @pretty_print = pretty_print
    end

    def to_s
      message_is_xml = @message =~ /^</
      has_filters    = @filters.any?
      pretty_print   = @pretty_print

      return @message unless message_is_xml
      return @message unless has_filters || pretty_print

      document = Nokogiri.XML(@message)
      document = apply_filter(document) if has_filters
      document.to_xml(nokogiri_options)
    end

    private

    def apply_filter(document)
      return document unless document.errors.empty?

      @filters.each do |filter|
        apply_filter! document, filter
      end

      document
    end

    def apply_filter!(document, filter)
      document.xpath("//*[local-name()='#{filter}']").each do |node|
        node.content = "***FILTERED***"
      end
    end

    def nokogiri_options
      @pretty_print ? { :indent => 2 } : {}
    end

  end
end

Version data entries

17 entries across 17 versions & 3 rubygems

Version Path
savon-2.6.0 lib/savon/log_message.rb
savon-2.5.1 lib/savon/log_message.rb
savon-2.5.0 lib/savon/log_message.rb
savon_with_adapter-2.4.1 lib/savon/log_message.rb
savon-2.4.0 lib/savon/log_message.rb
savon-2.3.3 lib/savon/log_message.rb
savon-2.3.2 lib/savon/log_message.rb
savon-2.3.1 lib/savon/log_message.rb
savon-ng-1.6-2.4.1 lib/savon/log_message.rb
savon-ng-1.6-2.4.0 lib/savon/log_message.rb
savon-2.3.0 lib/savon/log_message.rb
savon-2.2.0 lib/savon/log_message.rb
savon-2.1.0 lib/savon/log_message.rb
savon-2.0.3 lib/savon/log_message.rb
savon-2.0.2 lib/savon/log_message.rb
savon-2.0.1 lib/savon/log_message.rb
savon-2.0.0 lib/savon/log_message.rb