Module: ActiveFacts::Generators::OOTraits::Role

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

Instance Method Summary collapse

Instance Method Details

#oo_role_definitionObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/activefacts/generators/traits/oo.rb', line 23

def oo_role_definition
         return if fact_type.entity_type

         if fact_type.all_role.size == 1
    return "    maybe :#{preferred_role_name}\n"
         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

         # REVISIT: TypeInheritance
         if fact_type.is_a?(ActiveFacts::Metamodel::TypeInheritance)
           # trace "Ignoring role #{self} in #{fact_type}, subtype fact type"
           # REVISIT: What about secondary subtypes?
           # REVISIT: What about dumping the relational mapping when using separate tables?
           return
         end

         return unless is_functional

         counterpart_role = fact_type.all_role.select{|r| r != self}[0]
         counterpart_type = counterpart_role.object_type
         counterpart_role_name = counterpart_role.preferred_role_name
         counterpart_type_default_role_name = counterpart_type.oo_default_role_name

         # It's a one_to_one if there's a uniqueness constraint on the other role:
         one_to_one = counterpart_role.is_functional
         return if one_to_one &&
             false # REVISIT: !@object_types_dumped[counterpart_role.object_type]

         # Find role name:
         role_method = preferred_role_name
         counterpart_role_method = one_to_one ? role_method : "all_"+role_method
         # puts "---"+role.role_name if role.role_name
         if counterpart_role_name != counterpart_type.oo_default_role_name and
      role_method == self.object_type.oo_default_role_name
#	    debugger
           counterpart_role_method += "_as_#{counterpart_role_name}"
         end

         role_name = role_method
         role_name = nil if role_name == object_type.oo_default_role_name

         as_binary(counterpart_role_name, counterpart_type, is_mandatory, one_to_one, nil, role_name, counterpart_role_method)
end