Sha256: 54d7b2e7d0735c84a460d3f48d775ca93bf970da702e195abc0d8d1f5e338906

Contents?: true

Size: 1.29 KB

Versions: 5

Compression:

Stored size: 1.29 KB

Contents

require 'builder'
require_relative 'field'
require_relative 'association'
require_relative 'types'

module Spectifly
  module Xsd
    class Builder < Spectifly::Base::Builder
      def root_type
        Spectifly::Support.lower_camelize("#{root}Type")
      end

      def build_type(xml = nil)
        xml ||= ::Builder::XmlMarkup.new(:indent => 2)
        xml.xs 'complexType'.to_sym, :name => root_type do
          xml.xs :sequence do
            fields.each do |field|
              field.to_xsd(xml)
            end
            associations.each do |association|
              association.to_xsd(xml)
            end
          end
        end
      end

      def build(xml = nil)
        xml ||= ::Builder::XmlMarkup.new(:indent => 2)
        xml.instruct! :xml, :version => '1.0', :encoding => 'UTF-8'
        xml.xs :schema, 'xmlns:xs' => "http://www.w3.org/2001/XMLSchema", 'elementFormDefault' => "qualified" do
          custom_types.each do |cust|
            xml.xs :include, 'schemaLocation' => "#{cust}.xsd"
          end
          unless utilized_extended_types.empty?
            xml.xs :include, 'schemaLocation' => "extended.xsd"
          end
          xml.xs :element, :name => Spectifly::Support.camelize(root), :type => root_type
          build_type(xml)
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
spectifly-0.0.5 lib/spectifly/xsd/builder.rb
spectifly-0.0.4 lib/spectifly/xsd/builder.rb
spectifly-0.0.3 lib/spectifly/xsd/builder.rb
spectifly-0.0.2 lib/spectifly/xsd/builder.rb
spectifly-0.0.1 lib/spectifly/xsd/builder.rb