Module: CocinaDisplay::Concerns::Titles

Included in:
CocinaDisplay::CocinaRecord, RelatedResource
Defined in:
lib/cocina_display/concerns/titles.rb

Overview

Methods for finding and formatting titles.

Instance Method Summary collapse

Instance Method Details

#additional_titlesArray<String>

Any additional titles for the object excluding the main value of the primary title. Includes parallel titles of the primary title and all titles from secondary titles.

Returns:

  • (Array<String>)

See Also:

  • Title#display_title


41
42
43
44
# File 'lib/cocina_display/concerns/titles.rb', line 41

def additional_titles
  (Array(primary_title&.parallel_values) + secondary_titles.flat_map(&:title_values))
    .map(&:display_title).compact_blank
end

#all_titlesArray<Title>

All Title objects built from the Cocina titles.

Returns:

  • (Array<Title>)


69
70
71
72
73
74
75
76
77
# File 'lib/cocina_display/concerns/titles.rb', line 69

def all_titles
  @all_titles ||= cocina_titles.map do |cocina_title|
    CocinaDisplay::Titles::Title.new(
      cocina_title,
      part_label: part_label,
      part_numbers: part_numbers
    )
  end
end

#display_titleString?

The full title, joined together with additional punctuation. If there are multiple primary titles, uses the first.

Returns:

  • (String, nil)

See Also:

  • Title#display_title


25
26
27
# File 'lib/cocina_display/concerns/titles.rb', line 25

def display_title
  primary_title&.display_title
end

#full_titleString?

The full title for the object, including subtitle, part name, etc. If there are multiple primary titles, uses the first.

Returns:

  • (String, nil)

See Also:

  • Title#full_title


17
18
19
# File 'lib/cocina_display/concerns/titles.rb', line 17

def full_title
  primary_title&.full_title
end

#primary_titleTitle?

The first title marked primary, or the first without a type.

Returns:

  • (Title, nil)


57
58
59
# File 'lib/cocina_display/concerns/titles.rb', line 57

def primary_title
  all_titles.find { |title| title.primary? }.presence || all_titles.find { |title| !title.type? }
end

#secondary_titlesArray<Title>

All titles except the primary title.

Returns:

  • (Array<Title>)


63
64
65
# File 'lib/cocina_display/concerns/titles.rb', line 63

def secondary_titles
  all_titles - [primary_title]
end

#short_titleString?

The short title for the object, without subtitle, part name, etc. If there are multiple primary titles, uses the first.

Returns:

  • (String, nil)

See Also:

  • Title#short_title


9
10
11
# File 'lib/cocina_display/concerns/titles.rb', line 9

def short_title
  primary_title&.short_title
end

#sort_titleString

A string value for sorting by title that sorts missing values last. If there are multiple primary titles, uses the first.

Returns:

  • (String)

See Also:

  • Title#sort_title


33
34
35
# File 'lib/cocina_display/concerns/titles.rb', line 33

def sort_title
  primary_title&.sort_title || "\u{10FFFF}"
end

#title_display_data(exclude_primary: false) ⇒ Array<DisplayData>

Note:

All primary titles are included under “Title”, not just the first.

All TitleValue objects, grouped by their label for display.

Parameters:

  • exclude_primary (Boolean) (defaults to: false)

    Exclude primary titles. Defaults to false.

Returns:



50
51
52
53
# File 'lib/cocina_display/concerns/titles.rb', line 50

def title_display_data(exclude_primary: false)
  target_titles = exclude_primary ? secondary_titles : all_titles
  DisplayData.from_objects(target_titles.flat_map(&:title_values))
end