Class: Niso::Jats::Article

Inherits:
Lutaml::Model::Serializable
  • Object
show all
Defined in:
lib/niso/jats/article.rb

Instance Method Summary collapse

Instance Method Details

#affiliation(id) ⇒ Array<Aff>

Returns affiliations matching the given id across all contrib-groups.

Parameters:

  • id (String)

    the affiliation id to match

Returns:

  • (Array<Aff>)

    matching affiliations



77
78
79
80
81
82
# File 'lib/niso/jats/article.rb', line 77

def affiliation(id)
  groups = front&.&.contrib_group
  return [] unless groups

  groups.flat_map(&:aff).select { |a| a.id == id }
end

#contributorsArray<Contrib>

Returns all contributors across all contrib-groups in article metadata.

Returns:



66
67
68
69
70
71
# File 'lib/niso/jats/article.rb', line 66

def contributors
  groups = front&.&.contrib_group
  return [] unless groups

  groups.flat_map(&:contrib)
end

#doiString?

Returns the DOI (Digital Object Identifier) from article identifiers.

Returns:

  • (String, nil)

    the DOI value



56
57
58
59
60
61
# File 'lib/niso/jats/article.rb', line 56

def doi
  ids = front&.&.article_id
  return unless ids

  ids.find { |id| id.pub_id_type == "doi" }&.content
end

Returns DOI-based links derived from article identifiers.

Returns:

  • (Array<Hash{Symbol => String}>)

    each hash has :content (URL) and :type (“src” or “doi”)



110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/niso/jats/article.rb', line 110

def doi_links
  ids = front&.&.article_id
  return [] unless ids

  ids.each_with_object([]) do |id, links|
    next unless id.pub_id_type == "doi"

    url = "https://doi.org/#{id.content}"
    links << { content: url, type: "src" }
    links << { content: url, type: "doi" }
  end
end

#journal_titleString?

Returns the first journal title from journal metadata.

Returns:

  • (String, nil)

    the journal title



45
46
47
48
49
50
51
# File 'lib/niso/jats/article.rb', line 45

def journal_title
  meta = front&.journal_meta
  return unless meta

  titles = meta.journal_title_group.first.journal_title
  titles.first.content if titles.any?
end

#localityArray<Array<String>>

Returns bibliographic locality (volume, issue, page range).

Returns:

  • (Array<Array<String>>)

    each entry is [type, value] or

    type, from, to

    for page ranges



99
100
101
102
103
104
# File 'lib/niso/jats/article.rb', line 99

def locality
  meta = front&.
  return [] unless meta

  build_locality(meta)
end

#pub_datesArray<String>

Returns formatted publication dates as ISO 8601 strings (YYYY-MM-DD). Missing month or day defaults to “01”.

Returns:

  • (Array<String>)

    formatted date strings



88
89
90
91
92
93
# File 'lib/niso/jats/article.rb', line 88

def pub_dates
  dates = front&.&.pub_date
  return [] unless dates

  dates.map { |d| format_pub_date(d) }
end