# File lib/new_relic/agent/datastores.rb, line 36
      def self.trace(clazz, method_name, product, operation = method_name)
        clazz.class_eval do
          method_name_without_newrelic = "#{method_name}_without_newrelic"

          if NewRelic::Helper.instance_methods_include?(clazz, method_name) &&
             !NewRelic::Helper.instance_methods_include?(clazz, method_name_without_newrelic)

            visibility = NewRelic::Helper.instance_method_visibility(clazz, method_name)

            alias_method method_name_without_newrelic, method_name

            define_method(method_name) do |*args, &blk|
              segment = NewRelic::Agent::Transaction.start_datastore_segment(product, operation)
              begin
                send(method_name_without_newrelic, *args, &blk)
              ensure
                segment.finish
              end
            end

            send visibility, method_name
            send visibility, method_name_without_newrelic
          end
        end
      end