Class: Halva::Resource
- Inherits:
-
Object
- Object
- Halva::Resource
- Defined in:
- lib/halva/resource.rb
Overview
HAL Resource object See [HAL Draft](datatracker.ietf.org/doc/html/draft-kelly-json-hal#section-4)
Constant Summary collapse
- EMBEDDED_KEY =
:_embedded
- LINKS_KEY =
:_links
- CURIES_KEY =
:curies
Class Method Summary collapse
Instance Method Summary collapse
- #embed(resource, relation = :item) ⇒ Object
-
#initialize(model) ⇒ Resource
constructor
A new instance of Resource.
- #link(link) ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize(model) ⇒ Resource
Returns a new instance of Resource.
19 20 21 22 23 |
# File 'lib/halva/resource.rb', line 19 def initialize(model) @model = model.freeze @embedded = [] @links = [] end |
Class Method Details
.from_empty_model ⇒ Object
15 16 17 |
# File 'lib/halva/resource.rb', line 15 def self.from_empty_model new({}) end |
.from_model(model) ⇒ Object
11 12 13 |
# File 'lib/halva/resource.rb', line 11 def self.from_model(model) new(model.to_h) end |
Instance Method Details
#embed(resource, relation = :item) ⇒ Object
25 26 27 28 |
# File 'lib/halva/resource.rb', line 25 def (resource, relation = :item) @embedded << { resource: resource, relation: relation.to_sym } self end |
#link(link) ⇒ Object
30 31 32 33 |
# File 'lib/halva/resource.rb', line 30 def link(link) @links << link self end |
#to_h ⇒ Object
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 |
# File 'lib/halva/resource.rb', line 35 def to_h document = @model.dup unless @embedded.empty? document[EMBEDDED_KEY] = {} unless document.key?(EMBEDDED_KEY) @embedded.each do |emb| is_collection = emb[:resource].is_a?(Enumerable) document[EMBEDDED_KEY][emb[:relation]] = if is_collection emb[:resource].map(&:to_h) else emb[:resource].to_h end end end unless @links.empty? document[LINKS_KEY] = {} unless document.key?(LINKS_KEY) @links.each do |link| if link.relation == CURIES_KEY document[LINKS_KEY][CURIES_KEY] = [] unless document[LINKS_KEY].key?(CURIES_KEY) document[LINKS_KEY][CURIES_KEY] << link.to_h else document[LINKS_KEY][link.relation] = link.to_h end end end document end |