summaryrefslogtreecommitdiff
path: root/lib/rexml/namespace.rb
blob: 3e8790580b8ddaea91ec04adcd2c617b8acab486 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
require 'rexml/xmltokens'

module REXML
	# Adds named attributes to an object.
	module Namespace
		# The name of the object, valid if set
		attr_reader :name, :expanded_name
		# The expanded name of the object, valid if name is set
		attr_accessor :prefix
		include XMLTokens
		NAMESPLIT = /^(?:(#{NCNAME_STR}):)?(#{NCNAME_STR})/u

		# Sets the name and the expanded name
		def name=( name )
			@expanded_name = name
			name =~ NAMESPLIT
			if $1
				@prefix = $1
			else
				@prefix = ""
				@namespace = ""
			end
			@name = $2
		end

		# Compares names optionally WITH namespaces
		def has_name?( other, ns=nil )
			if ns
				return (namespace() == ns and name() == other)
			elsif other.include? ":"
				return fully_expanded_name == other
			else
				return name == other
			end
		end

		alias :local_name :name

		# Fully expand the name, even if the prefix wasn't specified in the
		# source file.
		def fully_expanded_name
			ns = prefix
			return "#{ns}:#@name" if ns.size > 0 
			return @name
		end
	end
end