class ActiveFacts::Metamodel::FactType
Attributes
check_and_add_spanning_uniqueness_constraint[RW]
Public Instance Methods
all_reading_by_ordinal()
click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 202 def all_reading_by_ordinal all_reading.sort_by{|reading| reading.ordinal} end
all_role_in_order()
click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 255 def all_role_in_order all_role.sort_by{|r| r.ordinal} end
compatible_readings(types_array)
click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 259 def compatible_readings types_array all_reading.select do |reading| ok = true reading.role_sequence.all_role_ref_in_order.each_with_index do |rr, i| ok = false unless types_array[i].include?(rr.role.object_type) end ok end end
default_reading(frequency_constraints = [], define_role_names = nil)
click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 217 def default_reading(frequency_constraints = [], define_role_names = nil) preferred_reading.expand(frequency_constraints, define_role_names) end
describe(highlight = nil)
click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 212 def describe(highlight = nil) (entity_type ? entity_type.name : "")+ '('+all_role.map{|role| role.describe(highlight) }*", "+')' end
internal_presence_constraints()
click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 237 def internal_presence_constraints all_role.map do |r| r.all_role_ref.map do |rr| !rr.role_sequence.all_role_ref.detect{|rr1| rr1.role.fact_type != self } ? rr.role_sequence.all_presence_constraint.to_a : [] end end.flatten.compact.uniq end
is_existential()
click to toggle source
Does any role of this fact type participate in a preferred identifier?
# File lib/activefacts/metamodel/extensions.rb, line 222 def is_existential return false if all_role.size > 2 all_role.detect do |role| role.all_role_ref.detect do |rr| rr.role_sequence.all_presence_constraint.detect do |pc| pc.is_preferred_identifier end end end end
is_unary()
click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 233 def is_unary all_role.size == 1 end
preferred_reading(negated = false)
click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 206 def preferred_reading negated = false pr = all_reading_by_ordinal.detect{|r| !r.is_negative == !negated } raise "No reading for (#{all_role.map{|r| r.object_type.name}*", "})" unless pr || negated pr end
reading_preferably_starting_with_role(role, negated = false)
click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 247 def reading_preferably_starting_with_role role, negated = false all_reading_by_ordinal.detect do |reading| reading.text =~ /\{(\d+)\}/ and reading.role_sequence.all_role_ref_in_order[$1.to_i].role.base_role == role and reading.is_negative == !!negated end || preferred_reading(negated) end