Server IP : 111.118.215.189 / Your IP : 3.145.133.121 Web Server : Apache System : Linux md-in-83.webhostbox.net 4.19.286-203.ELK.el7.x86_64 #1 SMP Wed Jun 14 04:33:55 CDT 2023 x86_64 User : a1673wkz ( 2475) PHP Version : 8.2.25 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /usr/share/ruby/vendor_ruby/puppet/vendor/rgen/lib/rgen/ecore/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
require 'rgen/transformer' require 'rgen/ecore/ecore' module RGen module ECore # This transformer creates an ECore model from Ruby classes built # by RGen::MetamodelBuilder. # class RubyToECore < Transformer transform Class, :to => EClass, :if => :convert? do { :name => name.gsub(/.*::(\w+)$/,'\1'), :abstract => _abstract_class, :interface => false, :eStructuralFeatures => trans(_metamodel_description), :ePackage => trans(name =~ /(.*)::\w+$/ ? eval($1) : nil), :eSuperTypes => trans(superclasses), :instanceClassName => name, :eAnnotations => trans(_annotations) } end method :superclasses do if superclass.respond_to?(:multiple_superclasses) && superclass.multiple_superclasses superclass.multiple_superclasses else [ superclass ] end end transform Module, :to => EPackage, :if => :convert? do @enumParentModule ||= {} _constants = _constantOrder + (constants - _constantOrder) _constants.select {|c| const_get(c).is_a?(MetamodelBuilder::DataTypes::Enum)}. each {|c| @enumParentModule[const_get(c)] = @current_object} { :name => name.gsub(/.*::(\w+)$/,'\1'), :eClassifiers => trans(_constants.collect{|c| const_get(c)}.select{|c| c.is_a?(Class) || (c.is_a?(MetamodelBuilder::DataTypes::Enum) && c != MetamodelBuilder::DataTypes::Boolean) }), :eSuperPackage => trans(name =~ /(.*)::\w+$/ ? eval($1) : nil), :eSubpackages => trans(_constants.collect{|c| const_get(c)}.select{|c| c.is_a?(Module) && !c.is_a?(Class)}), :eAnnotations => trans(_annotations) } end method :convert? do @current_object.respond_to?(:ecore) && @current_object != RGen::MetamodelBuilder::MMBase end transform MetamodelBuilder::Intermediate::Attribute, :to => EAttribute do Hash[*MetamodelBuilder::Intermediate::Attribute.properties.collect{|p| [p, value(p)]}.flatten].merge({ :eType => (etype == :EEnumerable ? trans(impl_type) : RGen::ECore.const_get(etype)), :eAnnotations => trans(annotations) }) end transform MetamodelBuilder::Intermediate::Reference, :to => EReference do Hash[*MetamodelBuilder::Intermediate::Reference.properties.collect{|p| [p, value(p)]}.flatten].merge({ :eType => trans(impl_type), :eOpposite => trans(opposite), :eAnnotations => trans(annotations) }) end transform MetamodelBuilder::Intermediate::Annotation, :to => EAnnotation do { :source => source, :details => details.keys.collect do |k| e = RGen::ECore::EStringToStringMapEntry.new e.key = k e.value = details[k] e end } end transform MetamodelBuilder::DataTypes::Enum, :to => EEnum do { :name => name, :instanceClassName => @enumParentModule && @enumParentModule[@current_object] && @enumParentModule[@current_object].name+"::"+name, :eLiterals => literals.collect do |l| lit = RGen::ECore::EEnumLiteral.new lit.name = l.to_s lit end } end end end end