Module: Shared::Identifiers

Overview

Shared code for objects that have Identifiers.

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#dwc_occurrence_idObject



119
120
121
# File 'app/models/concerns/shared/identifiers.rb', line 119

def dwc_occurrence_id
  identifiers.where('identifiers.type like ?', 'Identifier::Global::Uuid%').order('identifiers.position ASC').first&.identifier
end

#identified?Boolean

Returns:

  • (Boolean)


123
124
125
126
127
128
129
# File 'app/models/concerns/shared/identifiers.rb', line 123

def identified?
  if respond_to?(:project_id)
    identifiers.visible(self.project_id).any?
  else
    identifiers.any?
  end
end

#next_by_identifierObject



131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'app/models/concerns/shared/identifiers.rb', line 131

def next_by_identifier
  # TODO: Memoize i so it can be shared with previous etc.
  # LIke attr_accessor @navigating_identifier
  if @navigating_identifier ||= identifiers.where("identifiers.type ILIKE 'Identifier::Local%'").order(:position).first
    self.class
      .where(project_id:)
      .where.not(id:)
      .with_identifier_type_and_namespace_method(navigating_identifier.type, navigating_identifier.namespace_id, 'ASC')
      .where('cached_numeric_identifier > ?', navigating_identifier.cached_numeric_identifier)
      .first
  else
    nil
  end
end

#previous_by_identifierObject



146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'app/models/concerns/shared/identifiers.rb', line 146

def previous_by_identifier
  if @navigating_identifier ||= identifiers.where("type ILIKE 'Identifier::Local%'").order(:position).first
    self.class
      .where(project_id:)
      .where.not(id:)
      .with_identifier_type_and_namespace_method(navigating_identifier.type, navigating_identifier.namespace_id, 'DESC')
      .where('cached_numeric_identifier < ?', navigating_identifier.cached_numeric_identifier)
      .first
  else
    nil
  end

end

#reject_identifiers(attributed) ⇒ Object (protected)



162
163
164
# File 'app/models/concerns/shared/identifiers.rb', line 162

def reject_identifiers(attributed)
  attributed['identifier'].blank? || attributed['type'].blank?
end

#uriObject



111
112
113
# File 'app/models/concerns/shared/identifiers.rb', line 111

def uri
  uris.first&.cached
end

#uuidObject



115
116
117
# File 'app/models/concerns/shared/identifiers.rb', line 115

def uuid
  uuids.first&.cached
end

#visible_identifiers_for(project_id) ⇒ Object



53
54
55
56
57
58
59
# File 'app/models/concerns/shared/identifiers.rb', line 53

def visible_identifiers_for(project_id)
  if association(:identifiers).loaded?
    identifiers.select { |i| i.visible_to_project?(project_id) }
  else
    identifiers.visible(project_id)
  end
end