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, 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, name, mandatory, unique) ⇒ Role
Returns a new instance of Role.
25 26 27 28 29 30 31 32 33 34 |
# File 'lib/activefacts/api/role.rb', line 25 def initialize(fact_type, object_type, name, mandatory, unique) @fact_type = fact_type @fact_type.all_role << self @object_type = object_type @name = name @mandatory = mandatory @unique = unique @is_identifying = @object_type.is_entity_type && @object_type..include?(@name) 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
42 43 44 |
# File 'lib/activefacts/api/role.rb', line 42 def counterpart @counterpart ||= (@fact_type.all_role - [self])[0] end |
#getter ⇒ Object
Return the name of the getter method
47 48 49 |
# File 'lib/activefacts/api/role.rb', line 47 def getter @getter ||= @name.to_sym end |
#inspect ⇒ Object
61 62 63 |
# File 'lib/activefacts/api/role.rb', line 61 def inspect "<Role #{object_type.name}.#{name}>" end |
#setter ⇒ Object
Return the name of the setter method
52 53 54 |
# File 'lib/activefacts/api/role.rb', line 52 def setter @setter ||= :"#{@name}=" end |
#unary? ⇒ Boolean
Is this role a unary (created by maybe)?
37 38 39 40 |
# File 'lib/activefacts/api/role.rb', line 37 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
57 58 59 |
# File 'lib/activefacts/api/role.rb', line 57 def variable @variable ||= "@#{@name}" end |
#verbalise ⇒ Object
65 66 67 68 |
# File 'lib/activefacts/api/role.rb', line 65 def verbalise "Role #{name} of #{object_type}, " + (unary? ? 'unary' : (counterpart ? 'played by' + counterpart.object_type : 'undefined')) end |