Module: ActiveFacts::Generators::ScalaTraits::FactType

Defined in:
lib/activefacts/generators/traits/scala.rb

Instance Method Summary collapse

Instance Method Details

#fact_rolesObject

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



417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
# 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_definitionObject



392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
# 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_metamodelObject



408
409
410
411
412
413
414
# 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_nameObject



388
389
390
# File 'lib/activefacts/generators/traits/scala.rb', line 388

def scala_name
  default_reading.words
end