halva 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c7540c00f3cbdde45eb5601db5fa7b21fd37da8c6f9f32a12d0f7b351a01c578
4
- data.tar.gz: 858f12ed050776011ca688739717efe5ec31afc2a40940b256dfd52f0f7c15dd
3
+ metadata.gz: 80195ba0344ba27a745702df037112a4a99dd5dcf8b5a6efead8239695e45d65
4
+ data.tar.gz: a9ecef55da2bc12c3c3c87f81e866b598bfcc3c721c39951f44a9a13e753245b
5
5
  SHA512:
6
- metadata.gz: a887b14fff4b717594cb14b43371f797ddbe2650753261a578f8eab78dd372f78b2cc9618aaed2c3214d69eda63d19b39acb60590a6c8a6353746c4dd2559028
7
- data.tar.gz: 329b6db4147b2646d7f613bacce0202cf1211af44376e7479ff8f917600a8a29c36dfb3bf7ae66a887858b300e4dd16c2d78499457ba184aaed09e8f80167ea7
6
+ metadata.gz: 6a23c6fb22884252b2184fd5b2caef1e9f59fbdbae3066230586b72782b018868a5d19c8de049b4a1751fed301f6350871f0765b6cbbae9b3e236b087a452daa
7
+ data.tar.gz: 8662e1c3887fe0c23061fb33a21a8e059e7e39764be9282ec219bc53064db34a565394cdd04d461a11fe3e4eba8f0442924989a788ced5ebdca07278884459a6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- halva (0.2.0)
4
+ halva (0.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -33,10 +33,10 @@ require 'halva'
33
33
 
34
34
  order = Order.find(1)
35
35
  Halva::Resource.from_model(order)
36
- .embed(Halva::Resource.from_model(order.customer).build, :customer)
36
+ .embed(Halva::Resource.from_model(order.customer), :customer)
37
37
  .link(Halva::Link.new('/orders/1', :self))
38
38
  .link(Halva::Link.new('/orders/1/customer', :customer))
39
- .build
39
+ .to_h
40
40
 
41
41
  ```
42
42
 
@@ -47,11 +47,14 @@ require 'halva'
47
47
 
48
48
  orders = Order.find
49
49
  Halva::Resource.from_empty_model
50
- .embed(orders.map { |order| Halva::Resource.from_model(order).build })
50
+ .embed(orders.map do |order|
51
+ Halva::Resource.from_model(order)
52
+ .link(Halva::Link.new("/orders/#{order.id}", :self))
53
+ end)
51
54
  .link(Halva::Link.new('/orders?page=3', :next))
52
55
  .link(Halva::Link.new('/orders?page=2', :self))
53
56
  .link(Halva::Link.new('/orders?page=1', :prev))
54
- .build
57
+ .to_h
55
58
 
56
59
  ```
57
60
 
@@ -16,7 +16,7 @@ module Halva
16
16
  end
17
17
 
18
18
  def initialize(model)
19
- @model = model
19
+ @model = model.freeze
20
20
  @embedded = []
21
21
  @links = []
22
22
  end
@@ -31,22 +31,28 @@ module Halva
31
31
  self
32
32
  end
33
33
 
34
- def build
34
+ def to_h
35
+ document = @model.dup
35
36
  unless @embedded.empty?
36
- @model[EMBEDDED_KEY] = {} unless @model.key?(EMBEDDED_KEY)
37
+ document[EMBEDDED_KEY] = {} unless document.key?(EMBEDDED_KEY)
37
38
  @embedded.each do |emb|
38
- @model[EMBEDDED_KEY][emb[:relation]] = emb[:resource]
39
+ is_collection = emb[:resource].is_a?(Enumerable)
40
+ document[EMBEDDED_KEY][emb[:relation]] = if is_collection
41
+ emb[:resource].map(&:to_h)
42
+ else
43
+ emb[:resource].to_h
44
+ end
39
45
  end
40
46
  end
41
47
 
42
48
  unless @links.empty?
43
- @model[LINKS_KEY] = {} unless @model.key?(LINKS_KEY)
49
+ document[LINKS_KEY] = {} unless document.key?(LINKS_KEY)
44
50
  @links.each do |link|
45
- @model[LINKS_KEY][link.relation] = link.to_h
51
+ document[LINKS_KEY][link.relation] = link.to_h
46
52
  end
47
53
  end
48
54
 
49
- @model.to_h
55
+ document
50
56
  end
51
57
  end
52
58
  end
data/lib/halva/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Halva
4
- VERSION = '0.2.0'
4
+ VERSION = '0.3.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: halva
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Semenenko