Class: ActiveFacts::Metamodel::RoleRef

Inherits:
Object
  • Object
show all
Defined in:
lib/activefacts/metamodel/metamodel.rb,
lib/activefacts/metamodel/extensions.rb

Instance Method Summary collapse

Instance Method Details

#cql_leading_adjectiveObject



421
422
423
424
425
426
427
428
429
430
431
432
433
# File 'lib/activefacts/metamodel/extensions.rb', line 421

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_nameObject



453
454
455
456
457
458
459
460
461
462
463
464
# File 'lib/activefacts/metamodel/extensions.rb', line 453

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_adjectiveObject



435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
# File 'lib/activefacts/metamodel/extensions.rb', line 435

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

#describeObject



398
399
400
# File 'lib/activefacts/metamodel/extensions.rb', line 398

def describe
  role.name + " in (#{role.fact_type.default_reading})"
end

#preferred_referenceObject



402
403
404
# File 'lib/activefacts/metamodel/extensions.rb', line 402

def preferred_reference
  role.preferred_reference
end

#role_name(separator = "-") ⇒ Object



406
407
408
409
410
411
412
413
414
415
416
417
418
419
# File 'lib/activefacts/metamodel/extensions.rb', line 406

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