Default attribute namespaces.
When an attribute is prefixed with "xml" the default namespace should be used automatically. This namespace is not registered on element level by default as this namespace isn't registered manually, instead it's a "magic" namespace. This also ensures we match the behaviour of libxml more closely, hopefully reducing confusion.
This commit is contained in:
		
							parent
							
								
									d2f991538d
								
							
						
					
					
						commit
						7c41fa814f
					
				| 
						 | 
					@ -25,8 +25,8 @@ require_relative 'oga/xml/cdata'
 | 
				
			||||||
require_relative 'oga/xml/xml_declaration'
 | 
					require_relative 'oga/xml/xml_declaration'
 | 
				
			||||||
require_relative 'oga/xml/processing_instruction'
 | 
					require_relative 'oga/xml/processing_instruction'
 | 
				
			||||||
require_relative 'oga/xml/doctype'
 | 
					require_relative 'oga/xml/doctype'
 | 
				
			||||||
require_relative 'oga/xml/attribute'
 | 
					 | 
				
			||||||
require_relative 'oga/xml/namespace'
 | 
					require_relative 'oga/xml/namespace'
 | 
				
			||||||
 | 
					require_relative 'oga/xml/attribute'
 | 
				
			||||||
require_relative 'oga/xml/element'
 | 
					require_relative 'oga/xml/element'
 | 
				
			||||||
require_relative 'oga/xml/node_set'
 | 
					require_relative 'oga/xml/node_set'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,17 @@ module Oga
 | 
				
			||||||
    class Attribute
 | 
					    class Attribute
 | 
				
			||||||
      attr_accessor :name, :namespace_name, :element, :value
 | 
					      attr_accessor :name, :namespace_name, :element, :value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      ##
 | 
				
			||||||
 | 
					      # The default namespace available to all attributes. This namespace can
 | 
				
			||||||
 | 
					      # not be modified.
 | 
				
			||||||
 | 
					      #
 | 
				
			||||||
 | 
					      # @return [Oga::XML::Namespace]
 | 
				
			||||||
 | 
					      #
 | 
				
			||||||
 | 
					      DEFAULT_NAMESPACE = Namespace.new(
 | 
				
			||||||
 | 
					        :name => 'xml',
 | 
				
			||||||
 | 
					        :uri  => 'http://www.w3.org/XML/1998/namespace'
 | 
				
			||||||
 | 
					      ).freeze
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      ##
 | 
					      ##
 | 
				
			||||||
      # @param [Hash] options
 | 
					      # @param [Hash] options
 | 
				
			||||||
      #
 | 
					      #
 | 
				
			||||||
| 
						 | 
					@ -44,7 +55,15 @@ module Oga
 | 
				
			||||||
      # @return [Oga::XML::Namespace]
 | 
					      # @return [Oga::XML::Namespace]
 | 
				
			||||||
      #
 | 
					      #
 | 
				
			||||||
      def namespace
 | 
					      def namespace
 | 
				
			||||||
        return @namespace ||= element.available_namespaces[namespace_name]
 | 
					        unless @namespace
 | 
				
			||||||
 | 
					          if namespace_name == DEFAULT_NAMESPACE.name
 | 
				
			||||||
 | 
					            @namespace = DEFAULT_NAMESPACE
 | 
				
			||||||
 | 
					          else
 | 
				
			||||||
 | 
					            @namespace = element.available_namespaces[namespace_name]
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return @namespace
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      ##
 | 
					      ##
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,11 +24,17 @@ describe Oga::XML::Attribute do
 | 
				
			||||||
        :name           => 'a',
 | 
					        :name           => 'a',
 | 
				
			||||||
        :element        => element
 | 
					        :element        => element
 | 
				
			||||||
      )
 | 
					      )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      @default = described_class.new(:namespace_name => 'xml', :name => 'x')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    example 'return a Namespace instance' do
 | 
					    example 'return a Namespace instance' do
 | 
				
			||||||
      @attribute.namespace.should == @namespace
 | 
					      @attribute.namespace.should == @namespace
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    example 'return the default XML namespace when the "xml" prefix is used' do
 | 
				
			||||||
 | 
					      @default.namespace.should == Oga::XML::Attribute::DEFAULT_NAMESPACE
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  context '#to_s' do
 | 
					  context '#to_s' do
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue