Class: ActiveFacts::API::Role
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
-
#fact_type ⇒ Object
readonly
The FactType to which this role belongs.
-
#is_identifying ⇒ Object
readonly
Is this an identifying role for object_type?.
-
#mandatory ⇒ Object
readonly
In a valid fact population, is this role required to be played?.
-
#name ⇒ Object
readonly
The name of the role (a Symbol).
-
#object_type ⇒ Object
readonly
The ObjectType to which this role belongs.
-
#unique ⇒ Object
readonly
Is this role played by at most one instance, or more?.
-
#value_constraint ⇒ Object
readonly
Counterpart Instances playing this role must meet this constraint.
Instance Method Summary collapse
- #counterpart ⇒ Object
-
#getter ⇒ Object
Return the name of the getter method.
-
#initialize(fact_type, object_type, role_name, mandatory, unique) ⇒ Role
constructor
A new instance of Role.
- #inspect ⇒ Object
-
#setter ⇒ Object
Return the name of the setter method.
-
#unary? ⇒ Boolean
Is this role a unary (created by maybe)?.
-
#variable ⇒ Object
Return the name of the instance variable.
- #verbalise ⇒ Object
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..include?(@name) object_type.add_role(self) associate_role(@object_type) end |
Instance Attribute Details
#fact_type ⇒ Object (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_identifying ⇒ Object (readonly)
Is this an identifying role for object_type?
23 24 25 |
# File 'lib/activefacts/api/role.rb', line 23 def @is_identifying end |
#mandatory ⇒ Object (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 |
#name ⇒ Object (readonly)
The name of the role (a Symbol)
19 20 21 |
# File 'lib/activefacts/api/role.rb', line 19 def name @name end |
#object_type ⇒ Object (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 |
#unique ⇒ Object (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_constraint ⇒ Object (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
#counterpart ⇒ Object
43 44 45 |
# File 'lib/activefacts/api/role.rb', line 43 def counterpart @counterpart ||= (@fact_type.all_role - [self])[0] end |
#getter ⇒ Object
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 |
#inspect ⇒ Object
62 63 64 |
# File 'lib/activefacts/api/role.rb', line 62 def inspect "<Role #{object_type.name}.#{name}>" end |
#setter ⇒ Object
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)?
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 |
#variable ⇒ Object
Return the name of the instance variable
58 59 60 |
# File 'lib/activefacts/api/role.rb', line 58 def variable @variable ||= "@#{@name}" end |
#verbalise ⇒ Object
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 |