class Spectifly::Xsd::Builder

Public Instance Methods

build(xml = nil) click to toggle source
# File lib/spectifly/xsd/builder.rb, line 34
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
build_type(xml = nil) click to toggle source
# File lib/spectifly/xsd/builder.rb, line 13
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
root_type() click to toggle source
# File lib/spectifly/xsd/builder.rb, line 9
def root_type
  Spectifly::Support.lower_camelize("#{root}Type")
end
types() click to toggle source
# File lib/spectifly/xsd/builder.rb, line 27
def types
  [
    fields.map(&:type) +
    associations.select { |a| a.relationship !~ /belongs_to(_many)?/ }.map(&:type)
  ].flatten.compact.uniq
end