module MyData::Xsd::Structure
Constants
- PATH
Public Instance Methods
complex_types()
click to toggle source
# File lib/my_data/xsd/structure.rb, line 28 def complex_types @complex_types ||= docs.values.each_with_object({}) do |document, types| document.complex_types.each do |type| name = [type.namespace, type.name].compact.join(":") types[name] = type end end end
doc(class_name)
click to toggle source
# File lib/my_data/xsd/structure.rb, line 8 def doc(class_name) name = class_name.split("::").last [name, docs[name]] end
docs()
click to toggle source
# File lib/my_data/xsd/structure.rb, line 22 def docs @docs ||= Dir.glob("*.xsd", base: PATH).map do |file_name| [file_name.sub(/-.+$/, "").camelize, MyData::Xsd::Doc.new(read_xsd(file_name))] end.to_h end
resource_attributes(class_name, type)
click to toggle source
# File lib/my_data/xsd/structure.rb, line 13 def resource_attributes(class_name, type) namespace, name = class_name.split("::").last(2) key = namespace == "Resources" ? name : [namespace.downcase, name].join(":") current_doc = type == :complex_type ? complex_types[key] : docs[name] current_doc.elements.map { |element| element_attributes(element) } end
simple_types()
click to toggle source
# File lib/my_data/xsd/structure.rb, line 37 def simple_types @simple_types ||= docs.values.each_with_object({}) do |document, types| document.simple_types.each do |type| name = [type.namespace, type.name].compact.join(":") types[name] = type end end end
Private Instance Methods
classify(type)
click to toggle source
# File lib/my_data/xsd/structure.rb, line 63 def classify(type) namespace, name = type.split(":").map(&:camelize) "#{namespace}::#{name}" end
element_attributes(element)
click to toggle source
# File lib/my_data/xsd/structure.rb, line 48 def element_attributes(element) type = type_mapping(element.type) [ element.name.underscore, type, { collection: element.collection?, collection_element_name: element.collection_element_name, class_name: type == :resource ? classify(element.type) : nil, required: element.required? } ] end
read_xsd(name)
click to toggle source
# File lib/my_data/xsd/structure.rb, line 83 def read_xsd(name) Nokogiri::XML(File.read(File.join(PATH, name))) end
type_mapping(type)
click to toggle source
# File lib/my_data/xsd/structure.rb, line 69 def type_mapping(type) if ["xs:byte", "xs:long", "xs:int"].include?(type) :integer elsif type == "xs:decimal" :float elsif complex_types.key?(type) :resource elsif simple_types.key?(type) type_mapping(simple_types[type].type) else type.split(":").last.to_sym end end