lib/activefacts/generators/traits/scala.rb in activefacts-generators-1.8.3 vs lib/activefacts/generators/traits/scala.rb in activefacts-generators-1.9.0

- old
+ new

@@ -7,47 +7,47 @@ # module ActiveFacts module Generators module ScalaTraits module Vocabulary - def scala_prelude - title_name = name.words.titlecase + def scala_prelude + title_name = name.words.titlecase - "package model\n"+ - "\n"+ - "import scala.language.implicitConversions\n" + - "\n" + - "object #{title_name} extends LocalStorageConstellation with #{title_name}\n" + - "\n" + - "trait #{title_name} extends Model {\n" + - # REVISIT: I think this next line should be model, not metaModel - " val metaModel = new #{title_name}Model()\n" + - "\n" - end + "package model\n"+ + "\n"+ + "import scala.language.implicitConversions\n" + + "\n" + + "object #{title_name} extends LocalStorageConstellation with #{title_name}\n" + + "\n" + + "trait #{title_name} extends Model {\n" + + # REVISIT: I think this next line should be model, not metaModel + " val metaModel = new #{title_name}Model()\n" + + "\n" + end - def scala_prelude_metamodel - title_name = name.words.titlecase - "class #{title_name}Model extends FBMModel with LocalStorageConstellation {\n" + - " implicit val constellation: Constellation = this\n" - end + def scala_prelude_metamodel + title_name = name.words.titlecase + "class #{title_name}Model extends FBMModel with LocalStorageConstellation {\n" + + " implicit val constellation: Constellation = this\n" + end - def scala_finale - "}\n"+ - "\n" - end + def scala_finale + "}\n"+ + "\n" + end end module ObjectType - # Map the ObjectType name to a Scala class name - def scala_type_name - oo_type_name - end + # Map the ObjectType name to a Scala class name + def scala_type_name + oo_type_name + end - # Map the Scala class name to a default role name - def scala_default_role_name - oo_default_role_name - end + # Map the Scala class name to a default role name + def scala_default_role_name + oo_default_role_name + end def absorbed_roles all_role. select do |role| role.fact_type.all_role.size <= 2 && @@ -60,20 +60,20 @@ end end module Role def scala_preferred_role_name(is_for = nil, &name_builder) - # REVISIT: Modify this to suit Scala + # REVISIT: Modify this to suit Scala - if fact_type.is_a?(ActiveFacts::Metamodel::TypeInheritance) - # Subtype and Supertype roles default to TitleCase names, and have no role_name to worry about: - return (name_builder || proc {|names| names.titlecase}).call(object_type.name.words) - end + if fact_type.is_a?(ActiveFacts::Metamodel::TypeInheritance) + # Subtype and Supertype roles default to TitleCase names, and have no role_name to worry about: + return (name_builder || proc {|names| names.titlecase}).call(object_type.name.words) + end - name_builder ||= proc {|names| names.map(&:downcase)*'_' } # Make snake_case by default + name_builder ||= proc {|names| names.map(&:downcase)*'_' } # Make snake_case by default - # Handle an objectified unary role: + # Handle an objectified unary role: if is_for && fact_type.entity_type == is_for && fact_type.all_role.size == 1 return name_builder.call(object_type.name.words) end # trace "Looking for preferred_role_name of #{describe_fact_type(fact_type, self)}" @@ -82,308 +82,308 @@ reading_rr.role == self } if fact_type.all_role.size == 1 return name_builder.call( - role_name ? - role_name.snakewords : - reading.text.gsub(/ *\{0\} */,' ').gsub(/[- ]+/,'_').words - ) + role_name ? + role_name.snakewords : + reading.text.gsub(/ *\{0\} */,' ').gsub(/[- ]+/,'_').words + ) end - if role_name && role_name != "" - role_words = [role_name] - else - role_words = [] + if role_name && role_name != "" + role_words = [role_name] + else + role_words = [] - la = preferred_role_ref.leading_adjective - role_words += la.words.snakewords if la && la != "" + la = preferred_role_ref.leading_adjective + role_words += la.words.snakewords if la && la != "" - role_words += object_type.name.words.snakewords + role_words += object_type.name.words.snakewords - ta = preferred_role_ref.trailing_adjective - role_words += ta.words.snakewords if ta && ta != "" - end + ta = preferred_role_ref.trailing_adjective + role_words += ta.words.snakewords if ta && ta != "" + end # n = role_words.map{|w| w.gsub(/([a-z])([A-Z]+)/,'\1_\2').downcase}*"_" - n = role_words*'_' + n = role_words*'_' # trace "\tresult=#{n}" return name_builder.call(n.gsub(' ','_').split(/_/)) end - def scala_role_definition - return if fact_type.entity_type + def scala_role_definition + return if fact_type.entity_type - if fact_type.all_role.size == 1 - scala_role_name = scala_preferred_role_name.words.camelcase - return " val #{scala_role_name}: Boolean" - elsif fact_type.all_role.size != 2 - # Shouldn't come here, except perhaps for an invalid model - return # ternaries and higher are always objectified - end + if fact_type.all_role.size == 1 + scala_role_name = scala_preferred_role_name.words.camelcase + return " val #{scala_role_name}: Boolean" + elsif fact_type.all_role.size != 2 + # Shouldn't come here, except perhaps for an invalid model + return # ternaries and higher are always objectified + end - return if fact_type.is_a?(ActiveFacts::Metamodel::TypeInheritance) + return if fact_type.is_a?(ActiveFacts::Metamodel::TypeInheritance) - other_role = fact_type.all_role.select{|r| r != self}[0] - other_role_name = other_role.scala_preferred_role_name - scala_role_name = other_role_name.words.camelcase - other_type_name = other_role.object_type.name.words.titlecase + other_role = fact_type.all_role.select{|r| r != self}[0] + other_role_name = other_role.scala_preferred_role_name + scala_role_name = other_role_name.words.camelcase + other_type_name = other_role.object_type.name.words.titlecase - if is_functional - if is_mandatory - # Define a getter for a mandatory value: - " val #{scala_role_name}: #{other_type_name}" - if !fact_type.is_existential - " def #{scala_role_name}_=(_value: #{other_type_name}) = { #{scala_role_name} = _value }" - end - else - # Define a getter for an optional value: - # REVISIT: The role number here depends on the metamodel ordering of the fact type roles. - # This likely should follow the role order of the preferred reading, from which the fact name is derived. - # The code here collows the order of definition of the roles in the fact type, - # which might not be the same as the order of the preferred reading: - fact_name = fact_type.scala_name.titlecase - role_number = fact_type.all_role_in_order.index(other_role)+1 + if is_functional + if is_mandatory + # Define a getter for a mandatory value: + " val #{scala_role_name}: #{other_type_name}" + if !fact_type.is_existential + " def #{scala_role_name}_=(_value: #{other_type_name}) = { #{scala_role_name} = _value }" + end + else + # Define a getter for an optional value: + # REVISIT: The role number here depends on the metamodel ordering of the fact type roles. + # This likely should follow the role order of the preferred reading, from which the fact name is derived. + # The code here collows the order of definition of the roles in the fact type, + # which might not be the same as the order of the preferred reading: + fact_name = fact_type.scala_name.titlecase + role_number = fact_type.all_role_in_order.index(other_role)+1 - " def #{scala_role_name}: Option[#{other_type_name}] = {\n" + - " constellation.getBinaryFact(metaModel.#{fact_name.words.camelcase}, this).map(x => {\n" + - " x.head.asInstanceOf[FBMModel.BinaryFact].rolePlayers._#{role_number}.asInstanceOf[#{other_type_name}]\n" + - " })\n" + - " }\n" + - if !fact_type.is_existential - # Define a setter for an optional value: - " def #{scala_role_name}_=(value: Option[#{other_type_name}]) = {\n" + - " value match {\n" + - " case None =>\n" + - " case Some(m) => constellation.assertBinaryFact(#{fact_name.words.titlecase}(this, m))\n" + - " }\n" + - " }" - else - '' - end - end - elsif other_role.object_type.fact_type - # An objectified fact type - <<"END" + " def #{scala_role_name}: Option[#{other_type_name}] = {\n" + + " constellation.getBinaryFact(metaModel.#{fact_name.words.camelcase}, this).map(x => {\n" + + " x.head.asInstanceOf[FBMModel.BinaryFact].rolePlayers._#{role_number}.asInstanceOf[#{other_type_name}]\n" + + " })\n" + + " }\n" + + if !fact_type.is_existential + # Define a setter for an optional value: + " def #{scala_role_name}_=(value: Option[#{other_type_name}]) = {\n" + + " value match {\n" + + " case None =>\n" + + " case Some(m) => constellation.assertBinaryFact(#{fact_name.words.titlecase}(this, m))\n" + + " }\n" + + " }" + else + '' + end + end + elsif other_role.object_type.fact_type + # An objectified fact type + <<"END" def all#{scala_role_name.words.titlecase}(implicit constellation: Constellation): Seq[#{other_type_name}] = { - constellation.getObjectifiedFact(metaModel.#{scala_role_name.words.camelcase}, this).getOrElse(Nil).flatMap(x => x match { - case o: #{other_type_name} => Some(o) - case _ => None - }) + constellation.getObjectifiedFact(metaModel.#{scala_role_name.words.camelcase}, this).getOrElse(Nil).flatMap(x => x match { + case o: #{other_type_name} => Some(o) + case _ => None + }) } END - else - <<"END" + else + <<"END" /* def all#{scala_role_name.words.titlecase}(implicit constellation: Constellation): Seq[#{other_type_name}] = { - constellation.getFact(metaModel.#{scala_role_name.words.camelcase}, this).getOrElse(Nil).flatMap(x => x match { - # REVISIT: This is incorrect; we want to return the other role player in the fact - case o: #{other_type_name} => Some(o) - case _ => None - }) + constellation.getFact(metaModel.#{scala_role_name.words.camelcase}, this).getOrElse(Nil).flatMap(x => x match { + # REVISIT: This is incorrect; we want to return the other role player in the fact + case o: #{other_type_name} => Some(o) + case _ => None + }) } */ END - end - end + end + end end module ValueType - DataTypeMap = { - "Signed Integer" => "Int", - "Unsigned Integer" => "Int", - "Real" => "Double", - "Char" => "String", - # REVISIT: More will be needed here. - } - LengthTypes = [ "String", "Decimal" ] - ScaleTypes = [ "Decimal" ] + DataTypeMap = { + "Signed Integer" => "Int", + "Unsigned Integer" => "Int", + "Real" => "Double", + "Char" => "String", + # REVISIT: More will be needed here. + } + LengthTypes = [ "String", "Decimal" ] + ScaleTypes = [ "Decimal" ] - def scala_definition(super_type_name, facets) - vt_name = name.words.titlecase - if d = DataTypeMap[super_type_name] - super_type_name = d - end - super_type_title = super_type_name.words.titlecase - super_type_camel = super_type_name.words.camelcase + def scala_definition(super_type_name, facets) + vt_name = name.words.titlecase + if d = DataTypeMap[super_type_name] + super_type_name = d + end + super_type_title = super_type_name.words.titlecase + super_type_camel = super_type_name.words.camelcase - sometimes_optional = all_role.detect do |r| - r.fact_type.all_role.size == 2 && (c = (r.fact_type.all_role.to_a-[r])[0]) and !c.is_mandatory - end + sometimes_optional = all_role.detect do |r| + r.fact_type.all_role.size == 2 && (c = (r.fact_type.all_role.to_a-[r])[0]) and !c.is_mandatory + end - " case class #{vt_name}(value: #{super_type_title})(implicit val constellation: Constellation) extends FBMModel.ValueTypeValue[#{super_type_title}] {\n" + - " val objectType = metaModel.#{vt_name.words.camelcase}\n" + -# REVISIT: scala_type_params + -# REVISIT: scala_value_restriction + # puts " restrict #{value_constraint.all_allowed_range_sorted.map{|ar| ar.to_s}*", "}\n" if value_constraint -# REVISIT: scala_units + # puts " \# REVISIT: #{vt_name} is in units of #{unit.name}\n" if unit - absorbed_roles.map do |role| + " case class #{vt_name}(value: #{super_type_title})(implicit val constellation: Constellation) extends FBMModel.ValueTypeValue[#{super_type_title}] {\n" + + " val objectType = metaModel.#{vt_name.words.camelcase}\n" + +# REVISIT: scala_type_params + +# REVISIT: scala_value_restriction + # puts " restrict #{value_constraint.all_allowed_range_sorted.map{|ar| ar.to_s}*", "}\n" if value_constraint +# REVISIT: scala_units + # puts " \# REVISIT: #{vt_name} is in units of #{unit.name}\n" if unit + absorbed_roles.map do |role| role.scala_role_definition end. compact*"\n" + - " }\n" + + " }\n" + - # Add implicit casts for the underlying data type: - " implicit def #{super_type_camel}2#{vt_name}(value: #{super_type_title})(implicit constellation: Constellation): #{vt_name} = #{vt_name}(value)\n" + - if sometimes_optional - " implicit def #{super_type_camel}2#{vt_name}Option(value: #{super_type_title})(implicit constellation: Constellation): Option[#{vt_name}] = Some(#{vt_name}(value))\n" - else - "" - end + - "\n" - end + # Add implicit casts for the underlying data type: + " implicit def #{super_type_camel}2#{vt_name}(value: #{super_type_title})(implicit constellation: Constellation): #{vt_name} = #{vt_name}(value)\n" + + if sometimes_optional + " implicit def #{super_type_camel}2#{vt_name}Option(value: #{super_type_title})(implicit constellation: Constellation): Option[#{vt_name}] = Some(#{vt_name}(value))\n" + else + "" + end + + "\n" + end - def scala_metamodel(super_type_name, facets) - vt_name = name.words.titlecase - super_type_title = super_type_name.words.titlecase - # REVISIT: Remove facets that do not apply to the Scala data types - params = [ - LengthTypes.include?(super_type_name) ? facets[:length] : nil, - ScaleTypes.include?(super_type_name) ? facets[:scale] : nil - ].compact * ", " + def scala_metamodel(super_type_name, facets) + vt_name = name.words.titlecase + super_type_title = super_type_name.words.titlecase + # REVISIT: Remove facets that do not apply to the Scala data types + params = [ + LengthTypes.include?(super_type_name) ? facets[:length] : nil, + ScaleTypes.include?(super_type_name) ? facets[:scale] : nil + ].compact * ", " - " val #{name.words.camelcase} = assertEntity(FBMModel.ValueType(FBMModel.DomainObjectTypeName(\"#{vt_name}\"), FBMModel.#{super_type_title}Type(#{params}), Nil))\n" - end + " val #{name.words.camelcase} = assertEntity(FBMModel.ValueType(FBMModel.DomainObjectTypeName(\"#{vt_name}\"), FBMModel.#{super_type_title}Type(#{params}), Nil))\n" + end end module EntityType - def scala_object(title_name, id_names, id_types) - " object #{title_name} {\n" + - " def apply(" + - (id_names.zip(id_types).map do |(name, type_name)| - "#{name}: #{type_name}" - end * ', ' - ) + - ")(implicit constellation: Constellation) = {\n" + + def scala_object(title_name, id_names, id_types) + " object #{title_name} {\n" + + " def apply(" + + (id_names.zip(id_types).map do |(name, type_name)| + "#{name}: #{type_name}" + end * ', ' + ) + + ")(implicit constellation: Constellation) = {\n" + - # Define the constant storage for the identifying role values: - id_names.map do |name| - " val _#{name} = #{name}" - end*"\n" + - " val _constellation = constellation\n" + - " assertEntity(new #{title_name} {\n" + - id_names.map do |name| - " val #{name} = _#{name}" - end*"\n" + - " val constellation = _constellation\n" + - " })\n" + # Ends new block and assertEntity - " }\n" + # Ends apply() - " }\n" + # Ends object{} - "\n" - end + # Define the constant storage for the identifying role values: + id_names.map do |name| + " val _#{name} = #{name}" + end*"\n" + + " val _constellation = constellation\n" + + " assertEntity(new #{title_name} {\n" + + id_names.map do |name| + " val #{name} = _#{name}" + end*"\n" + + " val constellation = _constellation\n" + + " })\n" + # Ends new block and assertEntity + " }\n" + # Ends apply() + " }\n" + # Ends object{} + "\n" + end - def scala_trait(title_name, primary_supertype, pis) - s = 'override ' unless supertypes.empty? + def scala_trait(title_name, primary_supertype, pis) + s = 'override ' unless supertypes.empty? - " trait #{title_name} extends #{primary_supertype ? primary_supertype.name.words.titlecase : 'FBMModel.Entity'} {\n" + - " #{s}val objectType = metaModel.#{name.words.camelcase}\n" + - (fact_type ? " // REVISIT: Here, we should use fact_roles_dump(fact_type)\n\n" : '') + - absorbed_roles.map do |role| + " trait #{title_name} extends #{primary_supertype ? primary_supertype.name.words.titlecase : 'FBMModel.Entity'} {\n" + + " #{s}val objectType = metaModel.#{name.words.camelcase}\n" + + (fact_type ? " // REVISIT: Here, we should use fact_roles_dump(fact_type)\n\n" : '') + + absorbed_roles.map do |role| role.scala_role_definition end. compact*"\n" + - " #{s}val identifier: Seq[Seq[FBMModel.Identifier[_]]] = Seq(#{ - pis.map do |pi| - 'Seq(' + - pi.role_sequence.all_role_ref_in_order.map do |id_role_ref| - id_role_ref.role.object_type.name.words.camelcase - end*', ' + - ')' - end*', ' - })\n" + - " }\n" + # Ends trait{} - "\n" - end + " #{s}val identifier: Seq[Seq[FBMModel.Identifier[_]]] = Seq(#{ + pis.map do |pi| + 'Seq(' + + pi.role_sequence.all_role_ref_in_order.map do |id_role_ref| + id_role_ref.role.object_type.name.words.camelcase + end*', ' + + ')' + end*', ' + })\n" + + " }\n" + # Ends trait{} + "\n" + end - def scala_metamodel(title_name) - pi = preferred_identifier - # The following finds the closest non-inheritance identifier - #while pi.role_sequence.all_role_ref.size == 1 and - # (role = pi.role_sequence.all_role_ref.single.role).fact_type.is_a?(ActiveFacts::Metamodel::TypeInheritance) - # pi = role.fact_type.supertype_role.object_type.preferred_identifier - #end - identifying_parameters = - pi.role_sequence.all_role_ref_in_order.map{|rr| rr.role.object_type.name.words.camelcase }*', ' + def scala_metamodel(title_name) + pi = preferred_identifier + # The following finds the closest non-inheritance identifier + #while pi.role_sequence.all_role_ref.size == 1 and + # (role = pi.role_sequence.all_role_ref.single.role).fact_type.is_a?(ActiveFacts::Metamodel::TypeInheritance) + # pi = role.fact_type.supertype_role.object_type.preferred_identifier + #end + identifying_parameters = + pi.role_sequence.all_role_ref_in_order.map{|rr| rr.role.object_type.name.words.camelcase }*', ' - supertypes_list = - if supertypes.empty? - 'Nil' - else - "List(#{supertypes.map{|s| s.name.words.camelcase}*', '})" - end - " val #{name.words.camelcase} = assertEntity(FBMModel.EntityType(FBMModel.DomainObjectTypeName(\"#{title_name}\"), #{supertypes_list}, Seq(#{identifying_parameters})))\n" - end + supertypes_list = + if supertypes.empty? + 'Nil' + else + "List(#{supertypes.map{|s| s.name.words.camelcase}*', '})" + end + " val #{name.words.camelcase} = assertEntity(FBMModel.EntityType(FBMModel.DomainObjectTypeName(\"#{title_name}\"), #{supertypes_list}, Seq(#{identifying_parameters})))\n" + end - def scala_shared(o, supertypes, pi = nil) - if supertypes - primary_supertype = o && (o.identifying_supertype || o.supertypes[0]) - end - title_name = o.name.words.titlecase + def scala_shared(o, supertypes, pi = nil) + if supertypes + primary_supertype = o && (o.identifying_supertype || o.supertypes[0]) + end + title_name = o.name.words.titlecase - id_roles, pis = *all_identifying_roles(o) - id_names = id_role_names(o, id_roles) - id_types = id_role_types(id_roles) - identification = pi ? identified_by(o, pi) : nil + id_roles, pis = *all_identifying_roles(o) + id_names = id_role_names(o, id_roles) + id_types = id_role_types(id_roles) + identification = pi ? identified_by(o, pi) : nil - # REVISIT: We don't want an object for abstract classes, - # i.e. where subtypes have a disjoint mandatory constraint - entity_object(title_name, id_names, id_types) + # REVISIT: We don't want an object for abstract classes, + # i.e. where subtypes have a disjoint mandatory constraint + entity_object(title_name, id_names, id_types) - entity_trait(o, title_name, primary_supertype, pis) + entity_trait(o, title_name, primary_supertype, pis) - entity_model(o, title_name) - end + entity_model(o, title_name) + end - def id_role_names id_roles - id_roles.map do |role| - # Ignore identification through a supertype - next if role.fact_type.kind_of?(ActiveFacts::Metamodel::TypeInheritance) - role.scala_preferred_role_name(self).words.camelcase - end.compact - end + def id_role_names id_roles + id_roles.map do |role| + # Ignore identification through a supertype + next if role.fact_type.kind_of?(ActiveFacts::Metamodel::TypeInheritance) + role.scala_preferred_role_name(self).words.camelcase + end.compact + end - def id_role_types id_roles - id_roles.map do |role| - next if role.fact_type.kind_of?(ActiveFacts::Metamodel::TypeInheritance) - if !role.fact_type.entity_type && role.fact_type.all_role.size == 1 - "Boolean" - else - role.object_type.name.words.titlecase - end - end.compact - end + def id_role_types id_roles + id_roles.map do |role| + next if role.fact_type.kind_of?(ActiveFacts::Metamodel::TypeInheritance) + if !role.fact_type.entity_type && role.fact_type.all_role.size == 1 + "Boolean" + else + role.object_type.name.words.titlecase + end + end.compact + end - def scala_objectification - # REVISIT: This disregards any supertypes and their identifiers + def scala_objectification + # REVISIT: This disregards any supertypes and their identifiers # primary_supertype = o && (o.identifying_supertype || o.supertypes[0]) # secondary_supertypes = o.supertypes-[primary_supertype] - pi = preferred_identifier - id_roles = [] - identifying_role_refs = pi.role_sequence.all_role_ref_in_order - identifying_role_refs.each do |id_role_ref| - id_roles << id_role_ref.role - end - id_names = id_role_names id_roles - id_types = id_role_types id_roles + pi = preferred_identifier + id_roles = [] + identifying_role_refs = pi.role_sequence.all_role_ref_in_order + identifying_role_refs.each do |id_role_ref| + id_roles << id_role_ref.role + end + id_names = id_role_names id_roles + id_types = id_role_types id_roles - " case class #{name.words.titlecase}(#{ - id_names.zip(id_types).map {|(n, t)| - "#{n}: #{t}" - }*', ' - }) extends FBMModel.ObjectifiedFact {\n" + - " // REVISIT: Here, we should use fact_roles_dump(fact_type)\n" + - absorbed_roles.map do |role| + " case class #{name.words.titlecase}(#{ + id_names.zip(id_types).map {|(n, t)| + "#{n}: #{t}" + }*', ' + }) extends FBMModel.ObjectifiedFact {\n" + + " // REVISIT: Here, we should use fact_roles_dump(fact_type)\n" + + absorbed_roles.map do |role| role.scala_role_definition end. compact*"\n" + - " }" - end + " }" + end - def scala_objectification_metamodel - identifying_parameters = preferred_identifier.role_sequence.all_role_ref_in_order.map{|rr| rr.role.object_type.name.words.camelcase }*', ' - " val #{name.words.camelcase} = assertEntity(FBMModel.ObjectifiedType(FBMModel.DomainObjectTypeName(\"#{name.words.titlecase}\"), Nil, Seq(#{identifying_parameters})))\n" - end + def scala_objectification_metamodel + identifying_parameters = preferred_identifier.role_sequence.all_role_ref_in_order.map{|rr| rr.role.object_type.name.words.camelcase }*', ' + " val #{name.words.camelcase} = assertEntity(FBMModel.ObjectifiedType(FBMModel.DomainObjectTypeName(\"#{name.words.titlecase}\"), Nil, Seq(#{identifying_parameters})))\n" + end end module FactType def scala_name default_reading.words @@ -413,30 +413,30 @@ " val #{name_words.camelcase} = assertEntity(FBMModel.BinaryFactType(FBMModel.FactTypeName(\"#{name_words.titlecase}\"), (#{role_names*', '})))\n" end # An objectified fact type has internal roles that are always "has_one": def fact_roles - raise "Fact #{describe} type is not objectified" unless entity_type + raise "Fact #{describe} type is not objectified" unless entity_type all_role.sort_by do |role| - role.scala_preferred_role_name(entity_type) - end. - map do |role| - role_name = role.scala_preferred_role_name(entity_type) - one_to_one = role.all_role_ref.detect{|rr| - rr.role_sequence.all_role_ref.size == 1 && - rr.role_sequence.all_presence_constraint.detect{|pc| - pc.max_frequency == 1 - } - } - counterpart_role_method = (one_to_one ? "" : "all_") + - entity_type.oo_default_role_name + - (role_name != role.object_type.oo_default_role_name ? "_as_#{role_name}" : '') - role.as_binary(role_name, role.object_type, true, one_to_one, nil, nil, counterpart_role_method) - end. - join('') - end + role.scala_preferred_role_name(entity_type) + end. + map do |role| + role_name = role.scala_preferred_role_name(entity_type) + one_to_one = role.all_role_ref.detect{|rr| + rr.role_sequence.all_role_ref.size == 1 && + rr.role_sequence.all_presence_constraint.detect{|pc| + pc.max_frequency == 1 + } + } + counterpart_role_method = (one_to_one ? "" : "all_") + + entity_type.oo_default_role_name + + (role_name != role.object_type.oo_default_role_name ? "_as_#{role_name}" : '') + role.as_binary(role_name, role.object_type, true, one_to_one, nil, nil, counterpart_role_method) + end. + join('') + end end - include ActiveFacts::TraitInjector # Must be last in this module, after all submodules have been defined + include ActiveFacts::TraitInjector # Must be last in this module, after all submodules have been defined end end end