Class: Commonmeta::Metadata

Inherits:
Object
  • Object
show all
Includes:
MetadataUtils
Defined in:
lib/commonmeta/metadata.rb

Constant Summary

Constants included from Readers::SchemaOrgReader

Readers::SchemaOrgReader::SO_TO_DC_RELATION_TYPES, Readers::SchemaOrgReader::SO_TO_DC_REVERSE_RELATION_TYPES

Constants included from Utils

Utils::BIB_TO_CM_TRANSLATIONS, Utils::CM_TO_BIB_TRANSLATIONS, Utils::CM_TO_CR_TRANSLATIONS, Utils::CM_TO_CSL_TRANSLATIONS, Utils::CM_TO_DC_TRANSLATIONS, Utils::CM_TO_JATS_TRANSLATIONS, Utils::CM_TO_RIS_TRANSLATIONS, Utils::CM_TO_SO_TRANSLATIONS, Utils::CR_TO_CM_TRANSLATIONS, Utils::CSL_TO_CM_TRANSLATIONS, Utils::DC_TO_CM_TRANSLATIONS, Utils::NORMALIZED_LICENSES, Utils::RIS_TO_CM_TRANSLATIONS, Utils::SO_TO_CM_TRANSLATIONS, Utils::UNKNOWN_INFORMATION

Constants included from SchemaUtils

SchemaUtils::COMMONMETA

Instance Attribute Summary collapse

Attributes included from MetadataUtils

#name_detector, #reverse

Instance Method Summary collapse

Methods included from MetadataUtils

#container_title, #csl_hsh, #graph, #locale, #raw, #should_passthru, #style

Methods included from Writers::TurtleWriter

#turtle

Methods included from Writers::SchemaOrgWriter

#schema_hsh, #schema_org

Methods included from Writers::RisWriter

#ris

Methods included from Writers::RdfXmlWriter

#rdf_xml

Methods included from Writers::JatsWriter

#insert_authors, #insert_citation, #insert_citation_title, #insert_contributor, #insert_editors, #insert_fpage, #insert_issue, #insert_lpage, #insert_pub_id, #insert_publication_date, #insert_publisher_name, #insert_source, #insert_version, #insert_volume, #is_article?, #is_chapter?, #is_data?, #jats, #publication_type

Methods included from Writers::DataciteWriter

#datacite, #datacite_contributor, #datacite_reference

Methods included from Writers::CsvWriter

#csv

Methods included from Writers::CslWriter

#csl

Methods included from Writers::CrossrefXmlWriter

#crossref_xml

Methods included from Writers::CommonmetaWriter

#commonmeta

Methods included from Writers::CodemetaWriter

#codemeta

Methods included from Writers::CffWriter

#cff, #write_cff_contributors, #write_cff_reference

Methods included from Writers::CitationWriter

#citation

Methods included from Writers::BibtexWriter

#bibtex

Methods included from Readers::SchemaOrgReader

#get_schema_org, #read_schema_org, #schema_org_has_part, #schema_org_is_identical_to, #schema_org_is_new_version_of, #schema_org_is_part_of, #schema_org_is_previous_version_of, #schema_org_is_referenced_by, #schema_org_is_supplement_to, #schema_org_is_supplemented_by, #schema_org_reference, #schema_org_references

Methods included from Readers::RisReader

#read_ris, #ris_meta

Methods included from Readers::NpmReader

#get_npm, #read_npm

Methods included from Readers::JsonFeedReader

#get_doi_prefix_by_blog_slug, #get_doi_prefix_by_json_feed_item_id, #get_files, #get_funding_references, #get_json_feed_blog_slug, #get_json_feed_by_blog, #get_json_feed_item, #get_json_feed_unregistered, #get_json_feed_updated, #get_references, #get_related_identifiers, #read_json_feed_item

Methods included from Readers::DataciteReader

#format_contributor, #get_datacite, #get_datacite_reference, #read_datacite

Methods included from Readers::CslReader

#read_csl

Methods included from Readers::CrossrefXmlReader

#crossref_alternate_identifiers, #crossref_date_published, #crossref_description, #crossref_funding_reference, #crossref_license, #crossref_people, #crossref_references, #get_crossref_xml, #read_crossref_xml

Methods included from Readers::CrossrefReader

#get_crossref, #get_reference, #read_crossref

Methods included from Readers::CommonmetaReader

#read_commonmeta

Methods included from Readers::CodemetaReader

#get_codemeta, #read_codemeta

Methods included from Readers::CffReader

#cff_contributors, #get_cff, #get_cff_reference, #read_cff

Methods included from Readers::BibtexReader

#read_bibtex

Methods included from Utils

#decode_container_id, #decode_doi, #encode_container_id, #encode_doi, #encode_doi_for_id, #find_from_format, #find_from_format_by_ext, #find_from_format_by_filename, #find_from_format_by_id, #find_from_format_by_string, #from_csl, #from_datacite, #from_json_feed, #from_schema_org, #generate_ghost_token, #get_contributor, #get_date, #get_date_from_date_parts, #get_date_from_parts, #get_date_from_unix_timestamp, #get_date_parts, #get_date_parts_from_parts, #get_dates_from_date, #get_datetime_from_iso8601, #get_datetime_from_time, #get_datetime_from_unix_timestamp, #get_identifier, #get_identifier_type, #get_iso8601_date, #get_link, #get_series_information, #get_year_month, #get_year_month_day, #github_as_cff_url, #github_as_codemeta_url, #github_as_owner_url, #github_as_release_url, #github_as_repo_url, #github_from_url, #github_owner_from_url, #github_release_from_url, #github_repo_from_url, #hsh_to_fos, #hsh_to_spdx, #json_feed_by_blog_url, #json_feed_item_by_id_url, #json_feed_unregistered_url, #json_feed_updated_url, #jsonlint, #map_hash_keys, #name_to_fos, #name_to_spdx, #normalize_cc_url, #normalize_id, #normalize_isni, #normalize_issn, #normalize_licenses, #normalize_name_identifier, #normalize_orcid, #normalize_ror, #normalize_url, #orcid_as_url, #orcid_from_url, #parse_attributes, #rogue_scholar_api_url, #sanitize, #spdx_to_hsh, #strip_milliseconds, #to_csl, #to_datacite, #to_identifier, #to_ris, #to_schema_org, #to_schema_org_citation, #to_schema_org_container, #to_schema_org_funder, #to_schema_org_identifiers, #to_schema_org_relation, #to_schema_org_spatial_coverage, #update_ghost_post_via_api, #validate_email, #validate_isni, #validate_orcid, #validate_orcid_scheme, #validate_ror, #validate_url

Methods included from SchemaUtils

#json_schema_errors

Methods included from DoiUtils

#crossref_api_url, #datacite_api_url, #doi_as_url, #doi_from_url, #doi_resolver, #get_crossref_member, #get_doi_ra, #is_rogue_scholar_doi?, #normalize_doi, #validate_doi, #validate_funder_doi, #validate_prefix

Methods included from CrossrefUtils

#crossref_errors, #crossref_root_attributes, #insert_archive_locations, #insert_citation_list, #insert_crossref_abstract, #insert_crossref_access_indicators, #insert_crossref_anonymous, #insert_crossref_contributors, #insert_crossref_issn, #insert_crossref_language, #insert_crossref_license, #insert_crossref_person, #insert_crossref_publication_date, #insert_crossref_relations, #insert_crossref_subjects, #insert_crossref_titles, #insert_crossref_work, #insert_doi_data, #insert_funding_references, #insert_group_title, #insert_institution, #insert_item_number, #insert_journal, #insert_posted_content, #insert_posted_date, #write_crossref_xml

Methods included from AuthorUtils

#author_name_identifiers, #authors_as_string, #cleanup_author, #datacite_contributor_roles, #get_affiliations, #get_authors, #get_one_author, #is_personal_name?, #name_exists?

Constructor Details

#initialize(options = {}) ⇒ Metadata

Returns a new instance of Metadata.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/commonmeta/metadata.rb', line 19

def initialize(options = {})
  options.symbolize_keys!

  id = normalize_id(options[:input], options)
  ra = nil

  if id.present?
    @from = options[:from] || find_from_format(id: id)

    # mEDRA, KISTI, JaLC and OP DOIs are found in the Crossref index
    case @from
    when "medra"
      ra = "mEDRA"
    when "kisti"
      ra = "KISTI"
    when "jalc"
      ra = "JaLC"
    when "op"
      ra = "OP"
    end

    # generate name for method to call dynamically
    hsh = @from.present? ? send("get_#{@from}", id: id, **options) : {}
    string = hsh.fetch("string", nil)
  elsif options[:input].present? && File.exist?(options[:input])
    filename = File.basename(options[:input])
    ext = File.extname(options[:input])
    if %w[.bib .ris .xml .json .cff].include?(ext)
      hsh = {
        "url" => options[:url],
        "state" => options[:state],
        "provider_id" => options[:provider_id],
        "client_id" => options[:client_id],
        "files" => options[:files],
      }
      string = File.read(options[:input])
      @from = options[:from] || find_from_format(string: string, ext: ext)
    else
      warn "File type #{ext} not supported"
      exit 1
    end
  else
    hsh = {
      "url" => options[:url],
      "state" => options[:state],
      "provider_id" => options[:provider_id],
      "client_id" => options[:client_id],
      "files" => options[:files],
      "contributors" => options[:contributors],
      "titles" => options[:titles],
      "publisher" => options[:publisher],
    }
    string = options[:input]
    @from = options[:from] || find_from_format(string: string)
  end

  # make sure input is encoded as utf8
  if string.present? && string.is_a?(String)
    dup_string = string.dup.force_encoding("UTF-8").encode!
  end
  @string = dup_string

  # input options for citation formatting
  @style = options[:style]
  @locale = options[:locale]

  @sandbox = options[:sandbox]

  # options that come from the datacite database
  @url = hsh.to_h["url"].presence || options[:url].presence
  @state = hsh.to_h["state"].presence
  @provider_id = hsh.to_h["provider_id"].presence
  @client_id = hsh.to_h["client_id"].presence
  @files = hsh.to_h["files"].presence

  # options that come from the cli, needed
  # for crossref doi registration
  @depositor = options[:depositor]
  @email = options[:email]
  @registrant = options[:registrant]

  # set attributes directly
  read_options = options.slice(
    :contributors,
    :titles,
    :type,
    :additional_type,
    :container,
    :publisher,
    :funding_references,
    :date,
    :descriptions,
    :rights_list,
    :version,
    :subjects,
    :language,
    :geo_locations,
    :references,
    :alternate_identifiers,
    :related_identifiers,
    :related_items,
    :formats,
    :sizes
  ).compact

  @regenerate = options[:regenerate] || read_options.present?
  # generate name for method to call dynamically
  opts = { string: @string, sandbox: options[:sandbox], doi: options[:doi], id: id,
           ra: ra }.merge(read_options)
  @meta = @from.present? ? send("read_#{@from}", **opts) : {}
end

Instance Attribute Details

#additional_typeObject



249
250
251
# File 'lib/commonmeta/metadata.rb', line 249

def additional_type
  @additional_type ||= meta.fetch("additional_type", nil)
end

#alternate_identifiersObject



229
230
231
# File 'lib/commonmeta/metadata.rb', line 229

def alternate_identifiers
  @alternate_identifiers ||= meta.fetch("alternate_identifiers", nil)
end

#archive_locationsObject



261
262
263
# File 'lib/commonmeta/metadata.rb', line 261

def archive_locations
  @archive_locations ||= meta.fetch("archive_locations", nil)
end

#client_idObject



143
144
145
# File 'lib/commonmeta/metadata.rb', line 143

def client_id
  @client_id ||= meta.fetch("client_id", nil)
end

#containerObject



213
214
215
# File 'lib/commonmeta/metadata.rb', line 213

def container
  @container ||= meta.fetch("container", nil)
end

#contributorsObject



257
258
259
# File 'lib/commonmeta/metadata.rb', line 257

def contributors
  @contributors ||= meta.fetch("contributors", nil)
end

#dateObject



221
222
223
# File 'lib/commonmeta/metadata.rb', line 221

def date
  @date ||= meta.fetch("date", nil)
end

#depositorObject

Returns the value of attribute depositor.



9
10
11
# File 'lib/commonmeta/metadata.rb', line 9

def depositor
  @depositor
end

#descriptionsObject



161
162
163
# File 'lib/commonmeta/metadata.rb', line 161

def descriptions
  @descriptions ||= meta.fetch("descriptions", nil)
end

#docObject (readonly)

Returns the value of attribute doc.



11
12
13
# File 'lib/commonmeta/metadata.rb', line 11

def doc
  @doc
end

#doiObject



135
136
137
# File 'lib/commonmeta/metadata.rb', line 135

def doi
  @doi ||= meta.fetch("doi", nil)
end

#emailObject

Returns the value of attribute email.



9
10
11
# File 'lib/commonmeta/metadata.rb', line 9

def email
  @email
end

#filesObject



233
234
235
# File 'lib/commonmeta/metadata.rb', line 233

def files
  @files ||= meta.fetch("files", nil)
end

#format=(value) ⇒ Object (writeonly)

Sets the attribute format

Parameters:

  • value

    the value to set the attribute format to.



12
13
14
# File 'lib/commonmeta/metadata.rb', line 12

def format=(value)
  @format = value
end

#formatsObject



181
182
183
# File 'lib/commonmeta/metadata.rb', line 181

def formats
  @formats ||= meta.fetch("formats", nil)
end

#fromObject

Returns the value of attribute from.



9
10
11
# File 'lib/commonmeta/metadata.rb', line 9

def from
  @from
end

#funding_referencesObject



189
190
191
# File 'lib/commonmeta/metadata.rb', line 189

def funding_references
  @funding_references ||= meta.fetch("funding_references", nil)
end

#geo_locationsObject



217
218
219
# File 'lib/commonmeta/metadata.rb', line 217

def geo_locations
  @geo_locations ||= meta.fetch("geo_locations", nil)
end

#idObject



131
132
133
# File 'lib/commonmeta/metadata.rb', line 131

def id
  @id ||= meta.fetch("id", nil)
end

#issueObject

Returns the value of attribute issue.



9
10
11
# File 'lib/commonmeta/metadata.rb', line 9

def issue
  @issue
end

#languageObject



173
174
175
# File 'lib/commonmeta/metadata.rb', line 173

def language
  @language ||= meta.fetch("language", nil)
end

#licenseObject



165
166
167
# File 'lib/commonmeta/metadata.rb', line 165

def license
  @license ||= meta.fetch("license", nil)
end

#locale=(value) ⇒ Object (writeonly)

Sets the attribute locale

Parameters:

  • value

    the value to set the attribute locale to.



12
13
14
# File 'lib/commonmeta/metadata.rb', line 12

def locale=(value)
  @locale = value
end

#metaObject

Returns the value of attribute meta.



9
10
11
# File 'lib/commonmeta/metadata.rb', line 9

def meta
  @meta
end

#page_endObject (readonly)

Returns the value of attribute page_end.



11
12
13
# File 'lib/commonmeta/metadata.rb', line 11

def page_end
  @page_end
end

#page_startObject (readonly)

Returns the value of attribute page_start.



11
12
13
# File 'lib/commonmeta/metadata.rb', line 11

def page_start
  @page_start
end

#providerObject



237
238
239
# File 'lib/commonmeta/metadata.rb', line 237

def provider
  @provider ||= meta.fetch("provider", nil)
end

#provider_idObject



139
140
141
# File 'lib/commonmeta/metadata.rb', line 139

def provider_id
  @provider_id ||= meta.fetch("provider_id", nil)
end

#publisherObject



225
226
227
# File 'lib/commonmeta/metadata.rb', line 225

def publisher
  @publisher ||= meta.fetch("publisher", nil)
end

#referencesObject



193
194
195
# File 'lib/commonmeta/metadata.rb', line 193

def references
  @references ||= meta.fetch("references", nil)
end

#regenerateObject

Returns the value of attribute regenerate.



9
10
11
# File 'lib/commonmeta/metadata.rb', line 9

def regenerate
  @regenerate
end

#registrantObject

Returns the value of attribute registrant.



9
10
11
# File 'lib/commonmeta/metadata.rb', line 9

def registrant
  @registrant
end


197
198
199
# File 'lib/commonmeta/metadata.rb', line 197

def related_identifiers
  @related_identifiers ||= meta.fetch("related_identifiers", nil)
end


201
202
203
# File 'lib/commonmeta/metadata.rb', line 201

def related_items
  @related_items ||= meta.fetch("related_items", nil)
end

#sandboxObject

Returns the value of attribute sandbox.



9
10
11
# File 'lib/commonmeta/metadata.rb', line 9

def sandbox
  @sandbox
end

#schema_versionObject



185
186
187
# File 'lib/commonmeta/metadata.rb', line 185

def schema_version
  @schema_version ||= meta.fetch("schema_version", nil)
end

#show_errorsObject

Returns the value of attribute show_errors.



9
10
11
# File 'lib/commonmeta/metadata.rb', line 9

def show_errors
  @show_errors
end

#sizesObject



177
178
179
# File 'lib/commonmeta/metadata.rb', line 177

def sizes
  @sizes ||= meta.fetch("sizes", nil)
end

#stateObject



241
242
243
# File 'lib/commonmeta/metadata.rb', line 241

def state
  @state ||= meta.fetch("state", nil)
end

#stringObject

Returns the value of attribute string.



9
10
11
# File 'lib/commonmeta/metadata.rb', line 9

def string
  @string
end

#style=(value) ⇒ Object (writeonly)

Sets the attribute style

Parameters:

  • value

    the value to set the attribute style to.



12
13
14
# File 'lib/commonmeta/metadata.rb', line 12

def style=(value)
  @style = value
end

#subjectsObject



169
170
171
# File 'lib/commonmeta/metadata.rb', line 169

def subjects
  @subjects ||= meta.fetch("subjects", nil)
end

#titlesObject



253
254
255
# File 'lib/commonmeta/metadata.rb', line 253

def titles
  @titles ||= meta.fetch("titles", nil)
end

#typeObject



245
246
247
# File 'lib/commonmeta/metadata.rb', line 245

def type
  @type ||= meta.fetch("type", nil)
end

#urlObject



205
206
207
# File 'lib/commonmeta/metadata.rb', line 205

def url
  @url ||= meta.fetch("url", nil)
end

#versionObject



209
210
211
# File 'lib/commonmeta/metadata.rb', line 209

def version
  @version ||= meta.fetch("version", nil)
end

#volume=(value) ⇒ Object (writeonly)

Sets the attribute volume

Parameters:

  • value

    the value to set the attribute volume to.



12
13
14
# File 'lib/commonmeta/metadata.rb', line 12

def volume=(value)
  @volume = value
end

Instance Method Details

#errorsObject

Catch errors in the reader Then validate against JSON schema for Commonmeta



157
158
159
# File 'lib/commonmeta/metadata.rb', line 157

def errors
  meta.fetch("errors", nil) || json_schema_errors
end

#exists?Boolean

Returns:

  • (Boolean)


147
148
149
# File 'lib/commonmeta/metadata.rb', line 147

def exists?
  (@state || meta.fetch("state", nil)) != "not_found"
end

#valid?Boolean

Returns:

  • (Boolean)


151
152
153
# File 'lib/commonmeta/metadata.rb', line 151

def valid?
  exists? && errors.nil?
end