mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
f2a91397fd
If uplevel keyword is given, the warning message is prepended with caller file and line information and the string "warning: ". The use of the uplevel keyword makes Kernel#warn format output similar to how rb_warn formats output. This patch modifies net/ftp and net/imap to use Kernel#warn instead of $stderr.puts or $stderr.printf, since they are used for printing warnings. This makes lib/cgi/core and tempfile use $stderr.puts instead of warn for debug logging, since they are used for debug printing and not for warning. This does not modify bundler, rubygems, or rdoc, as those are maintained outside of ruby and probably wish to remain backwards compatible with older ruby versions. rb_warn_m code is originally from nobu, but I've changed it so that it only includes the path and lineno from uplevel (not the method), and also prepends the string "warning: ", to make it more similar to rb_warn. From: Jeremy Evans code@jeremyevans.net Signed-off-by: Urabe Shyouhei shyouhei@ruby-lang.org git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
71 lines
2 KiB
Ruby
71 lines
2 KiB
Ruby
# frozen_string_literal: false
|
|
require "rexml/child"
|
|
require "rexml/source"
|
|
|
|
module REXML
|
|
# Represents an XML Instruction; IE, <? ... ?>
|
|
# TODO: Add parent arg (3rd arg) to constructor
|
|
class Instruction < Child
|
|
START = '<\?'
|
|
STOP = '\?>'
|
|
|
|
# target is the "name" of the Instruction; IE, the "tag" in <?tag ...?>
|
|
# content is everything else.
|
|
attr_accessor :target, :content
|
|
|
|
# Constructs a new Instruction
|
|
# @param target can be one of a number of things. If String, then
|
|
# the target of this instruction is set to this. If an Instruction,
|
|
# then the Instruction is shallowly cloned (target and content are
|
|
# copied). If a Source, then the source is scanned and parsed for
|
|
# an Instruction declaration.
|
|
# @param content Must be either a String, or a Parent. Can only
|
|
# be a Parent if the target argument is a Source. Otherwise, this
|
|
# String is set as the content of this instruction.
|
|
def initialize(target, content=nil)
|
|
if target.kind_of? String
|
|
super()
|
|
@target = target
|
|
@content = content
|
|
elsif target.kind_of? Instruction
|
|
super(content)
|
|
@target = target.target
|
|
@content = target.content
|
|
end
|
|
@content.strip! if @content
|
|
end
|
|
|
|
def clone
|
|
Instruction.new self
|
|
end
|
|
|
|
# == DEPRECATED
|
|
# See the rexml/formatters package
|
|
#
|
|
def write writer, indent=-1, transitive=false, ie_hack=false
|
|
Kernel.warn( "#{self.class.name}.write is deprecated", uplevel: 1)
|
|
indent(writer, indent)
|
|
writer << START.sub(/\\/u, '')
|
|
writer << @target
|
|
writer << ' '
|
|
writer << @content
|
|
writer << STOP.sub(/\\/u, '')
|
|
end
|
|
|
|
# @return true if other is an Instruction, and the content and target
|
|
# of the other matches the target and content of this object.
|
|
def ==( other )
|
|
other.kind_of? Instruction and
|
|
other.target == @target and
|
|
other.content == @content
|
|
end
|
|
|
|
def node_type
|
|
:processing_instruction
|
|
end
|
|
|
|
def inspect
|
|
"<?p-i #{target} ...?>"
|
|
end
|
|
end
|
|
end
|