Sha256: 46cd14293aa177ea31ad5ae333b52bdc1dc3c8f73f81ef6944b944f665e35ee6

Contents?: true

Size: 1.61 KB

Versions: 6

Compression:

Stored size: 1.61 KB

Contents

require 'xommelier/xml'
require 'active_support/core_ext/array/extract_options'

module Xommelier
  module Xml
    class Namespace
      class << self
        def registry
          @registry ||= Xommelier::Collection.new(self)
        end
      end

      attr_reader :uri, :options, :as, :elements, :attributes
      alias to_s uri

      def initialize(uri, options = {}, &block)
        @uri        = uri
        @options    = {}
        @elements   = Xommelier::Collection.new(Xommelier::Xml::Element)
        @as         = options.delete(:as)

        Xommelier::Xml::Namespace.registry[as] = self

        self.options = options
        scoped(&block) if block_given?
      end

      def ns
        Xommelier::Xml::Namespace.registry
      end

      def options=(options)
        options.delete(:elements) { [] }.each do |name|
          element(name)
        end
        options.delete(:attributes) { [] }.each do |name|
          attribute(name)
        end
        @options.merge!(options)
      end

      def scoped(&block)
        instance_exec(&block)
      end

      def attribute(*names, &block)
        options = names.extract_options!
        names.map do |name|
          options[:ns] ||= self
          attributes.find_or_create(name, options, &block)
        end
      end

      def element(*names, &block)
        options = names.extract_options!
        names.map do |name|
          options[:ns] ||= self
          elements.find_or_create(name, options, &block)
        end
      end

      def to_hash
        {as.to_s => uri.to_s}
      end

      def inspect
        %(xmlns:#{as}="#{uri}")
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
xommelier-0.1.7 lib/xommelier/xml/namespace.rb
xommelier-0.1.6 lib/xommelier/xml/namespace.rb
xommelier-0.1.5 lib/xommelier/xml/namespace.rb
xommelier-0.1.4 lib/xommelier/xml/namespace.rb
xommelier-0.1.3 lib/xommelier/xml/namespace.rb
xommelier-0.1.2 lib/xommelier/xml/namespace.rb