Class: ArkMinter
- Inherits:
-
Object
- Object
- ArkMinter
- Defined in:
- backend/app/lib/ark/ark_minter.rb
Direct Known Subclasses
Class Method Summary collapse
-
.generate_version_key(*version_grist) ⇒ Object
Hash some values together and return a string.
Instance Method Summary collapse
-
#ark_recognized?(ark) ⇒ Boolean
Return true if a given ARK string can be assumed to have been generated by the current ARK minter.
-
#is_still_current?(ark_name_obj, obj) ⇒ Boolean
Return true if the provided ark name still looks right.
-
#mint!(obj, row_defaults) ⇒ Object
-
#shoulder_for_repo(repo_id) ⇒ Object
Caching shoulder lookup for bulk record creation (like imports).
-
#version_key_for(obj) ⇒ Object
Return an opaque value that captures any values that will be used to generate an ARK for
obj.
Class Method Details
.generate_version_key(*version_grist) ⇒ Object
Hash some values together and return a string.
89 90 91 |
# File 'backend/app/lib/ark/ark_minter.rb', line 89 def self.generate_version_key(*version_grist) Digest::SHA256.hexdigest(version_grist.map(&:to_s).to_json) end |
Instance Method Details
#ark_recognized?(ark) ⇒ Boolean
Return true if a given ARK string can be assumed to have been generated by the current ARK minter. Used during import to determine how to handle incoming ARK strings.
63 64 65 |
# File 'backend/app/lib/ark/ark_minter.rb', line 63 def ark_recognized?(ark) raise NotImplementedError.new end |
#is_still_current?(ark_name_obj, obj) ⇒ Boolean
Return true if the provided ark name still looks right. Reasons it might not look right include: changed NAAN, changed repository shoulder. Stuff like that.
The version_key column in the ark_name table can be used to hold a
minter-specific value to record the conditions under which each Ark was
generated. For example, the default minter (archivesspace_ark_minter.rb)
stores a hash containing the Ark NAAN & repository shoulder that were in use at
the point each Ark was generated. Its is_still_current? can then
recalculate that hash (using generate_version_key below) to determine if the
Ark needs to be recomputed.
77 78 79 |
# File 'backend/app/lib/ark/ark_minter.rb', line 77 def is_still_current?(ark_name_obj, obj) ark_name_obj.version_key == version_key_for(obj) end |
#mint!(obj, row_defaults) ⇒ Object
56 57 58 |
# File 'backend/app/lib/ark/ark_minter.rb', line 56 def mint!(obj, row_defaults) raise NotImplementedError.new end |
#shoulder_for_repo(repo_id) ⇒ Object
Caching shoulder lookup for bulk record creation (like imports)
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'backend/app/lib/ark/ark_minter.rb', line 94 def shoulder_for_repo(repo_id) if RequestContext.get(:repo_ark_shoulders).nil? RequestContext.put(:repo_ark_shoulders, {}) end shoulders = RequestContext.get(:repo_ark_shoulders) if !shoulders.include?(repo_id) DB.open do |db| shoulders[repo_id] = db[:repository].filter(:id => repo_id).get(:ark_shoulder) end end shoulders[repo_id] end |
#version_key_for(obj) ⇒ Object
Return an opaque value that captures any values that will be used to generate
an ARK for obj. Default implementation just hashes together the bits of
data the provided minters use for generating ARKs.
84 85 86 |
# File 'backend/app/lib/ark/ark_minter.rb', line 84 def version_key_for(obj) ArkMinter.generate_version_key(AppConfig[:ark_naan], shoulder_for_repo(obj.repo_id), AppConfig[:ark_shoulder_delimiter], AppConfig[:ark_minter]) end |