class MyData::Xsd::Element

Attributes

element[R]
namespace[R]

Public Class Methods

new(element, namespace: nil, force_collection: nil) click to toggle source
# File lib/my_data/xsd/element.rb, line 6
def initialize(element, namespace: nil, force_collection: nil)
  @element = element
  @namespace = namespace
  force_collection && @collection = force_collection
end

Public Instance Methods

collection?() click to toggle source
# File lib/my_data/xsd/element.rb, line 28
def collection?
  return @collection if defined? @collection

  @collection = element.to_s.include? "maxOccurs"
end
collection_element_name() click to toggle source
# File lib/my_data/xsd/element.rb, line 34
def collection_element_name
  return @collection_element_name if defined? @collection_element_name

  @collection_element_name =
    if collection?
      nested_element = element.at_xpath(".//xs:element")
      nested_element ? nested_element.attributes["name"].value : nil
    end
end
inspect() click to toggle source
# File lib/my_data/xsd/element.rb, line 48
def inspect
  "Element: { name: #{name.to_json}, type: #{type.to_json}, collection: #{collection?} }"
end
name() click to toggle source
# File lib/my_data/xsd/element.rb, line 12
def name
  @name ||= element.attributes["name"].value
end
required?() click to toggle source
# File lib/my_data/xsd/element.rb, line 44
def required?
  element.attributes["minOccurs"]&.value != "0"
end
type() click to toggle source
# File lib/my_data/xsd/element.rb, line 16
def type
  @type =
    begin
      extracted_type =
        element.attributes["type"] ||
        element.at_xpath(".//xs:element[@type]")&.attributes.try(:[], "type") ||
        element.at_xpath(".//xs:restriction[@base]")&.attributes.try(:[], "base")

      camelize_type(extracted_type.value)
    end
end

Private Instance Methods

camelize_type(extracted_type) click to toggle source
# File lib/my_data/xsd/element.rb, line 54
def camelize_type(extracted_type)
  return extracted_type if extracted_type.starts_with?("xs:")

  ns, name = extracted_type.include?(":") ? extracted_type.split(":") : [nil, extracted_type]

  [ns, name.camelize].compact.join(":")
end