Class: AtlasRb::Community
- Defined in:
- lib/atlas_rb/community.rb
Overview
A top-level grouping in the Atlas hierarchy.
Communities are organizational containers — they hold Collections and, optionally, sub-Communities. Most institutional structure (departments, programs, projects) is modeled as a tree of Communities with Collections at the leaves.
See also: Collection, Work.
Constant Summary collapse
- ROUTE =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Atlas REST endpoint prefix for this resource.
"/communities/"
Class Method Summary collapse
-
.children(id) ⇒ Array<String>
List the immediate children (sub-Communities and Collections) of a Community.
-
.create(id = nil, xml_path = nil) ⇒ Hash
Create a new Community, optionally seeded with MODS metadata.
-
.destroy(id) ⇒ Faraday::Response
Delete a Community.
-
.find(id) ⇒ Hash
Fetch a single Community by ID.
-
.metadata(id, values) ⇒ Hash
Patch individual metadata fields without uploading a full MODS document.
-
.mods(id, kind = nil) ⇒ String
Fetch the Community's MODS representation in the requested format.
-
.update(id, xml_path) ⇒ Hash
Replace a Community's metadata by uploading a MODS XML document.
Methods inherited from Resource
Methods included from FaradayHelper
Class Method Details
.children(id) ⇒ Array<String>
List the immediate children (sub-Communities and Collections) of a Community.
The endpoint returns just the noids; resolve each through Resource.find (which dispatches by type) when richer payloads are needed.
79 80 81 |
# File 'lib/atlas_rb/community.rb', line 79 def self.children(id) JSON.parse(connection({}).get(ROUTE + id + '/children')&.body) end |
.create(id = nil, xml_path = nil) ⇒ Hash
Create a new Community, optionally seeded with MODS metadata.
Pass id = nil to create a top-level Community; pass a Community ID to
nest the new Community beneath an existing one.
48 49 50 51 52 53 54 |
# File 'lib/atlas_rb/community.rb', line 48 def self.create(id = nil, xml_path = nil) result = AtlasRb::Mash.new(JSON.parse(connection({ parent_id: id }).post(ROUTE)&.body))["community"] return result unless xml_path.present? update(result["id"], xml_path) find(result["id"]) end |
.destroy(id) ⇒ Faraday::Response
Delete a Community.
63 64 65 |
# File 'lib/atlas_rb/community.rb', line 63 def self.destroy(id) connection({}).delete(ROUTE + id) end |
.find(id) ⇒ Hash
Fetch a single Community by ID.
26 27 28 |
# File 'lib/atlas_rb/community.rb', line 26 def self.find(id) AtlasRb::Mash.new(JSON.parse(connection({}).get(ROUTE + id)&.body))["community"] end |
.metadata(id, values) ⇒ Hash
Patch individual metadata fields without uploading a full MODS document.
107 108 109 |
# File 'lib/atlas_rb/community.rb', line 107 def self.(id, values) AtlasRb::Mash.new(JSON.parse(connection({ metadata: values }).patch(ROUTE + id)&.body)) end |
.mods(id, kind = nil) ⇒ String
Fetch the Community's MODS representation in the requested format.
122 123 124 125 126 127 |
# File 'lib/atlas_rb/community.rb', line 122 def self.mods(id, kind = nil) # json default, html, xml connection({}).get( ROUTE + id + '/mods' + (kind.present? ? ".#{kind}" : '') )&.body end |
.update(id, xml_path) ⇒ Hash
Replace a Community's metadata by uploading a MODS XML document.
91 92 93 94 95 96 |
# File 'lib/atlas_rb/community.rb', line 91 def self.update(id, xml_path) payload = { binary: Faraday::Multipart::FilePart.new(File.open(xml_path), "application/xml", File.basename(xml_path)) } AtlasRb::Mash.new(JSON.parse(multipart({}).patch(ROUTE + id, payload)&.body)) end |