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