class WsdlMapper::D10rGeneration::D10rGenerator
Attributes
context[R]
Public Class Methods
new(context, skip_modules: false, namer: WsdlMapper::Naming::DefaultNamer.new, formatter_factory: DefaultFormatter, module_generator_factory: DefaultModuleGenerator)
click to toggle source
Calls superclass method
WsdlMapper::Generation::Base::new
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 17 def initialize(context, skip_modules: false, namer: WsdlMapper::Naming::DefaultNamer.new, formatter_factory: DefaultFormatter, module_generator_factory: DefaultModuleGenerator) super(context) @namer = namer @formatter_factory = formatter_factory @module_generator = module_generator_factory.new self @type_directory_name = @namer.get_d10r_type_directory_name @element_directory_name = @namer.get_d10r_element_directory_name @deserializer_name = @namer.get_global_d10r_name @skip_modules = skip_modules end
Public Instance Methods
generate(schema)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 34 def generate(schema) result = Result.new schema: schema generate_type_directory schema, result schema.each_type do |type| generate_type type, result end unless @skip_modules result.module_tree.each do |module_node| @module_generator.generate module_node, result end end generate_element_directory schema, result generate_deserializer schema, result result end
get_formatter(io)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 55 def get_formatter(io) @formatter_factory.new io end
Protected Instance Methods
collect_property_requires(properties)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 143 def collect_property_requires(properties) properties.map do |prop| type = get_type_name(prop.type) next if WsdlMapper::Dom::BuiltinType.builtin?(type.name) || type.is_a?(WsdlMapper::Dom::SimpleType) || WsdlMapper::Dom::SoapEncodingType.builtin?(type.name) @namer.get_d10r_name(type).require_path end.compact end
generate_complex(type, result)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 122 def generate_complex(type, result) type_name = @namer.get_type_name get_type_name type name = @namer.get_d10r_name get_type_name type modules = get_module_names name prop_requires = collect_property_requires(type.each_property) prop_requires += collect_property_requires(type.base.each_property) if has_base?(type) type_file_for name, result do |f| f.requires @type_directory_name.require_path, type_name.require_path f.requires(*prop_requires.uniq) f.in_modules modules do if type.soap_array? register_soap_array f, name, type, type_name else register_complex_type f, name, type, type_name end end end end
generate_deserializer(_schema, result)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 60 def generate_deserializer(_schema, result) modules = @deserializer_name.parents.reverse.map(&:module_name) type_file_for @deserializer_name, result do |f| f.requires 'wsdl_mapper/deserializers/lazy_loading_deserializer', @element_directory_name.require_path f.in_modules modules do f.assignment @deserializer_name.class_name, "::WsdlMapper::Deserializers::LazyLoadingDeserializer.new(#{@element_directory_name.name})" end end end
generate_element_directory(schema, result)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 72 def generate_element_directory(schema, result) modules = get_module_names @element_directory_name type_file_for @element_directory_name, result do |f| f.requires @type_directory_name.require_path, 'wsdl_mapper/deserializers/element_directory' f.in_modules modules do f.block_assignment @element_directory_name.class_name, "::WsdlMapper::Deserializers::ElementDirectory.new(#{@type_directory_name.name})", [] do register_elements f, schema, result end end end end
generate_type(type, result)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 115 def generate_type(type, result) case type when WsdlMapper::Dom::ComplexType generate_complex type, result end end
generate_type_directory(_schema, result)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 104 def generate_type_directory(_schema, result) modules = get_module_names @type_directory_name type_file_for @type_directory_name, result do |f| f.requires 'wsdl_mapper/deserializers/type_directory' f.in_modules modules do f.assignment @type_directory_name.class_name, '::WsdlMapper::Deserializers::TypeDirectory.new' end end end
has_base?(type)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 165 def has_base?(type) WsdlMapper::Dom::ComplexType === type && type.base && WsdlMapper::Dom::ComplexType === type.base end
register_attributes(f, containing_type)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 169 def register_attributes(f, containing_type) if has_base? containing_type register_attributes f, containing_type.base end containing_type.each_attribute do |attr| acc_name = @namer.get_attribute_name attr type = attr.type.root name = attr.name f.call :register_attr, ":#{acc_name.attr_name}", generate_name(name), generate_name(type.name) end end
register_complex_type(f, name, type, type_name)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 155 def register_complex_type(f, name, type, type_name) simple = ", simple: #{generate_name(type.root.name)}" if type.simple_content? type_or_inline = get_type_name(type).name f.block_assignment name.class_name, "#{@type_directory_name.name}.register_type(#{generate_name(type_or_inline)}, #{type_name.name}#{simple})", [] do register_attributes f, type register_properties f, type end end
register_element(f, element, _result)
click to toggle source
@param [WsdlMapper::Generation::AbstractFormatter] f @param [WsdlMapper::Dom::Element] element @param [WsdlMapper::Generation::Result] _result
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 95 def register_element(f, element, _result) element_name = generate_name element.name type_name = generate_name get_type_name(element.type).name d10r_name = @namer.get_d10r_name(element.type.name ? element.type : @namer.get_inline_type(element)) require_path = d10r_name.require_path.inspect f.statement "register_element #{element_name}, #{type_name}, #{require_path}, #{d10r_name.name.inspect}" end
register_elements(f, schema, result)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 86 def register_elements(f, schema, result) schema.each_element do |element| register_element f, element, result end end
register_properties(f, containing_type)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 181 def register_properties(f, containing_type) if has_base? containing_type register_properties f, containing_type.base end containing_type.each_property do |prop| acc_name = @namer.get_property_name prop type = prop.type.is_a?(WsdlMapper::Dom::SimpleType) ? prop.type.root : prop.type args = [":#{acc_name.attr_name}", generate_name(prop.name), generate_name(type.name)] args << 'array: true' if prop.array? f.call :register_prop, *args end end
register_soap_array(f, name, type, type_name)
click to toggle source
# File lib/wsdl_mapper/d10r_generation/d10r_generator.rb, line 151 def register_soap_array(f, name, type, type_name) f.assignment name.class_name, "#{@type_directory_name.name}.register_soap_array(#{generate_name(type.name)}, #{type_name.name}, #{generate_name(type.soap_array_type_name)})" end