class ActiveFacts::Metamodel::RoleRef

Public Instance Methods

cql_leading_adjective() click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 420
def cql_leading_adjective
  if leading_adjective
    # 'foo' => "foo-"
    # 'foo bar' => "foo- bar "
    # 'foo-bar' => "foo-- bar "
    # 'foo-bar baz' => "foo-- bar baz "
    # 'bat foo-bar baz' => "bat- foo-bar baz "
    leading_adjective.strip.
      sub(/[- ]|$/, '-\0 ').sub(/  /, ' ').sub(/[^-]$/, '\0 ').sub(/-  $/,'-')
  else
    ''
  end
end
cql_name() click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 452
def cql_name
  if role.fact_type.all_role.size == 1
    role_name
  elsif role.role_name
    role.role_name
  else
    # Where an adjective has multiple words, the hyphen is inserted outside the outermost space, leaving the space
    cql_leading_adjective +
      role.object_type.name+
      cql_trailing_adjective
  end
end
cql_trailing_adjective() click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 434
def cql_trailing_adjective
  if trailing_adjective
    # 'foo' => "-foo"
    # 'foo bar' => " foo -bar"
    # 'foo-bar' => " foo --bar"
    # 'foo-bar baz' => " foo-bar -baz"
    # 'bat foo-bar baz' => " bat foo-bar -baz"
    trailing_adjective.
      strip.
      sub(/(?<a>.*) (?<b>[^- ]+$)|(?<a>.*)(?<b>-[^- ]*)$|(?<a>)(?<b>.*)/) {
        " #{$~[:a]} -#{$~[:b]}"
      }.
      sub(/^ *-/, '-')  # A leading space is not needed if the hyphen is at the start
  else
    ''
  end
end
describe() click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 397
def describe
  role.name + " in (#{role.fact_type.default_reading})"
end
preferred_reference() click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 401
def preferred_reference
  role.preferred_reference
end
role_name(separator = "-") click to toggle source
# File lib/activefacts/metamodel/extensions.rb, line 405
def role_name(separator = "-")
  return 'UNKNOWN' unless role
  name_array =
    if role.fact_type.all_role.size == 1
      if role.fact_type.is_a?(LinkFactType)
        "#{role.object_type.name} objectification role for #{role.fact_type.role.object_type.name}"
      else
        role.fact_type.preferred_reading.text.gsub(/\{[0-9]\}/,'').strip.split(/\s/)
      end
    else
      role.role_name || [leading_adjective, role.object_type.name, trailing_adjective].compact.map{|w| w.split(/\s/)}.flatten
    end
  return separator ? Array(name_array)*separator : Array(name_array)
end