Sha256: 23e882a4d2c9e459865b24977ec6d37a837bdf755c7e8a3a08f5e17391b11541

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

module XsdModel
  module Elements
    class Schema
      include BaseElement
      extend AttributeMethods

      attribute_method 'targetNamespace'

      def collect_imported_schemas(options = {})
        _collect_imported_schemas(self, options)
      end

      def _collect_imported_schemas(original_schema, options, already_collected = [])
        imports = original_schema.imports

        imports.each do |import|
          unless already_collected.map { |d| d.target_namespace }.include? import.namespace
            new_schema = import.load(options)
            already_collected << new_schema
            _collect_imported_schemas(new_schema, options, already_collected)
          end
        end

        already_collected
      end

      def collect_included_schemas(options = {})
        _collect_included_schemas(self, options)
      end

      def _collect_included_schemas(original_schema, options, collected_schemas = [], collected_paths = [])
        includes = original_schema.includes

        includes.each do |incl|
          unless collected_paths.include? incl.schema_location
            new_schema = incl.load(options)
            collected_schemas << new_schema
            collected_paths << incl.schema_location

            _collect_included_schemas(new_schema, options, collected_schemas, collected_paths)
          end
        end

        collected_schemas
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
xsd_model-0.6.0 lib/xsd_model/elements/schema.rb
xsd_model-0.5.0 lib/xsd_model/elements/schema.rb