README.md in halva-0.3.0 vs README.md in halva-0.4.0
- old
+ new
@@ -1,15 +1,22 @@
# Halva
-HAL-compliant serializer
+HAL-compliant decorator
[](https://github.com/denblackstache/halva/actions/workflows/main.yml) [](https://badge.fury.io/rb/halva)
-Links
+**Links**
* [HAL - Hypertext Application Language](https://stateless.co/hal_specification.html)
* [Specification Draft](https://datatracker.ietf.org/doc/html/draft-kelly-json-hal-08)
+**Goals**
+
+* No DSL
+* HAL-compliant
+* Not responsible for the whole presentation layer
+* Simple, extensible, self-discoverable
+
## Installation
Add this line to your application's Gemfile:
```ruby
@@ -36,10 +43,24 @@
.embed(Halva::Resource.from_model(order.customer), :customer)
.link(Halva::Link.new('/orders/1', :self))
.link(Halva::Link.new('/orders/1/customer', :customer))
.to_h
+# {
+# :id => 1,
+# :name => "Order Example"
+# :_embedded => {
+# :customer => [{
+# :id => 1,
+# :name => "Customer Example"
+# }]
+# },
+# :_links => {
+# :self => {:href => "/orders/1"},
+# :customer => {:href => "/orders/1/customer"}
+# }
+# }
```
### Representing a collection
```ruby
@@ -48,14 +69,35 @@
orders = Order.find
Halva::Resource.from_empty_model
.embed(orders.map do |order|
Halva::Resource.from_model(order)
.link(Halva::Link.new("/orders/#{order.id}", :self))
- end)
- .link(Halva::Link.new('/orders?page=3', :next))
+ end, :'acme:order')
.link(Halva::Link.new('/orders?page=2', :self))
+ .link(Halva::Link.new('/orders?page=3', :next))
.link(Halva::Link.new('/orders?page=1', :prev))
+ .link(Halva::Curie.new('https://docs.acme.com/relations/{rel}', 'acme'))
.to_h
+
+# {
+# :_embedded => {
+# :"acme:order" => [{
+# :id => 1,
+# :name => "Example"
+# :_links => {:self => {:href => "/orders/1"} }
+# }]
+# },
+# :_links => {
+# :self => {:href => "/orders/1?page=2"},
+# :next => {:href => "/orders/1?page=3"},
+# :prev => {:href => "/orders/1?page=1"},
+# :curies => [{
+# name: 'acme',
+# href: 'https://docs.acme.com/relations/{rel}',
+# templated: true
+# }]
+# }
+# }
```
## Development