Sha256: ad37ca53e0a7cce835d04da61f05bff8589d756c33574d762c756af048d8dacd

Contents?: true

Size: 1.5 KB

Versions: 4

Compression:

Stored size: 1.5 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 types
        [
          fields.map(&:type) +
          associations.select { |a| a.relationship !~ /belongs_to(_many)?/ }.map(&:type)
        ].flatten.compact.uniq
      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

4 entries across 4 versions & 1 rubygems

Version Path
spectifly-0.0.11 lib/spectifly/xsd/builder.rb
spectifly-0.0.10 lib/spectifly/xsd/builder.rb
spectifly-0.0.9 lib/spectifly/xsd/builder.rb
spectifly-0.0.8 lib/spectifly/xsd/builder.rb