module ActiveFacts::Generators::ScalaTraits::FactType

Public Instance Methods

fact_roles() click to toggle source

An objectified fact type has internal roles that are always “has_one”:

# File lib/activefacts/generators/traits/scala.rb, line 417
def fact_roles
  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
scala_definition() click to toggle source
# File lib/activefacts/generators/traits/scala.rb, line 392
def scala_definition
  # Dump a non-objectified fact type
  name_words = scala_name
  role_names = preferred_reading.role_sequence.all_role_ref_in_order.map do |rr|
      rr.role.scala_preferred_role_name.words.camelcase
    end
  role_types = preferred_reading.role_sequence.all_role_ref_in_order.map do |rr|
      rr.role.object_type.name.words.camelcase
    end

  "  case class #{name_words.titlecase}(#{role_names.zip(role_types).map{|n, t| n+': '+t}*', '})(implicit val constellation: Constellation) extends FBMModel.BinaryFact {\n" +
  "    def factType = metaModel.#{name_words.camelcase}\n" +
  "    def rolePlayers = (#{role_names*', '})\n" +
  "  }\n\n"
end
scala_metamodel() click to toggle source
# File lib/activefacts/generators/traits/scala.rb, line 408
def scala_metamodel
  name_words = scala_name
  role_names = preferred_reading.role_sequence.all_role_ref_in_order.map do |rr|
      rr.role.scala_preferred_role_name.words.camelcase
    end
  "  val #{name_words.camelcase} = assertEntity(FBMModel.BinaryFactType(FBMModel.FactTypeName(\"#{name_words.titlecase}\"), (#{role_names*', '})))\n"
end
scala_name() click to toggle source
# File lib/activefacts/generators/traits/scala.rb, line 388
def scala_name
  default_reading.words
end