module MyData::Xsd::ResourceGenerator

This class is for development reason only, to generate resources

Public Instance Methods

generate_docs() click to toggle source
# File lib/my_data/xsd/resource_generator.rb, line 9
def generate_docs
  MyData::Xsd::Structure.docs.each do |name, doc|
    generate_file(name: name, namespace: doc.target_namespace, xsd_mode: "xsd_doc")
  end

  "done"
end
generate_types() click to toggle source
# File lib/my_data/xsd/resource_generator.rb, line 17
def generate_types
  MyData::Xsd::Structure.complex_types.each do |_, type|
    generate_file(name: type.name, namespace: type.namespace, xsd_mode: "xsd_complex_type")
  end

  "done"
end

Private Instance Methods

class_string(class_name, xsd_mode) click to toggle source
# File lib/my_data/xsd/resource_generator.rb, line 39
def class_string(class_name, xsd_mode)
  string = "# frozen_string_literal: true\n"
  string += "\n"
  string += "class MyData::Resources::#{class_name}\n"
  string += "  include MyData::Resource\n"
  string += "\n"
  string += "  #{xsd_mode}\n"
  string += "end\n"

  string
end
generate_file(name:, namespace:, xsd_mode:) click to toggle source
# File lib/my_data/xsd/resource_generator.rb, line 27
def generate_file(name:, namespace:, xsd_mode:)
  folder_name = File.join(MyData.root, "lib/my_data/resources", namespace.to_s)
  FileUtils.mkdir_p(folder_name)

  class_name = [namespace&.camelize, name.camelize].compact.join("::")
  puts "Create file: #{folder_name}, #{name}"

  file = File.new(File.join(folder_name, "#{name.underscore}.rb"), "w")
  file.write(class_string(class_name, xsd_mode))
  file.close
end