Class: ActiveFacts::API::Role

Inherits:
Object
  • Object
show all
Defined in:
lib/activefacts/api/role.rb

Overview

A Role represents the relationship of one object to another (or to a boolean condition). Relationships (or binary fact types) have a Role at each end; one is declared using has_one or one_to_one, and the other is created on the counterpart class. Each ObjectType class maintains a RoleCollection hash of the roles it plays.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(fact_type, object_type, role_name, mandatory, unique) ⇒ Role

Returns a new instance of Role.



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/activefacts/api/role.rb', line 25

def initialize(fact_type, object_type, role_name, mandatory, unique)
	@fact_type = fact_type
	@fact_type.all_role << self
  @object_type = object_type
  @name = role_name
  @mandatory = mandatory
  @unique = unique
  @is_identifying = @object_type.is_entity_type && @object_type.identifying_role_names.include?(@name)
	object_type.add_role(self)
  associate_role(@object_type)
end

Instance Attribute Details

#fact_typeObject (readonly)

The FactType to which this role belongs



17
18
19
# File 'lib/activefacts/api/role.rb', line 17

def fact_type
  @fact_type
end

#is_identifyingObject (readonly)

Is this an identifying role for object_type?



23
24
25
# File 'lib/activefacts/api/role.rb', line 23

def is_identifying
  @is_identifying
end

#mandatoryObject (readonly)

In a valid fact population, is this role required to be played?



21
22
23
# File 'lib/activefacts/api/role.rb', line 21

def mandatory
  @mandatory
end

#nameObject (readonly)

The name of the role (a Symbol)



19
20
21
# File 'lib/activefacts/api/role.rb', line 19

def name
  @name
end

#object_typeObject (readonly)

The ObjectType to which this role belongs



18
19
20
# File 'lib/activefacts/api/role.rb', line 18

def object_type
  @object_type
end

#uniqueObject (readonly)

Is this role played by at most one instance, or more?



20
21
22
# File 'lib/activefacts/api/role.rb', line 20

def unique
  @unique
end

#value_constraintObject (readonly)

Counterpart Instances playing this role must meet this constraint



22
23
24
# File 'lib/activefacts/api/role.rb', line 22

def value_constraint
  @value_constraint
end

Instance Method Details

#counterpartObject



43
44
45
# File 'lib/activefacts/api/role.rb', line 43

def counterpart
	@counterpart ||= (@fact_type.all_role - [self])[0]
end

#getterObject

Return the name of the getter method



48
49
50
# File 'lib/activefacts/api/role.rb', line 48

def getter
  @getter ||= @name.to_sym
end

#inspectObject



62
63
64
# File 'lib/activefacts/api/role.rb', line 62

def inspect
  "<Role #{object_type.name}.#{name}>"
end

#setterObject

Return the name of the setter method



53
54
55
# File 'lib/activefacts/api/role.rb', line 53

def setter
  @setter ||= :"#{@name}="
end

#unary?Boolean

Is this role a unary (created by maybe)?

Returns:

  • (Boolean)


38
39
40
41
# File 'lib/activefacts/api/role.rb', line 38

def unary?
  # N.B. A role with a forward reference looks unary until it is resolved.
	@fact_type.all_role.size == 1
end

#variableObject

Return the name of the instance variable



58
59
60
# File 'lib/activefacts/api/role.rb', line 58

def variable
  @variable ||= "@#{@name}"
end

#verbaliseObject



66
67
68
69
# File 'lib/activefacts/api/role.rb', line 66

def verbalise
	"Role #{name} of #{object_type}, " +
	  (unary? ? 'unary' : (counterpart ? 'played by' + counterpart.object_type : 'undefined'))
end