halva 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 900e5a47a7c2ffcb2528799f258b4de9245358315dfb0c7cf5c211844bfe872b
4
- data.tar.gz: 798b4bb53e9121a805f8e0acb963609c8626b2281e80c54098e76b037c6574b9
3
+ metadata.gz: 80195ba0344ba27a745702df037112a4a99dd5dcf8b5a6efead8239695e45d65
4
+ data.tar.gz: a9ecef55da2bc12c3c3c87f81e866b598bfcc3c721c39951f44a9a13e753245b
5
5
  SHA512:
6
- metadata.gz: 447cd2a234cc0edc69b2404207731add3093e91527ffe2ce9ab34416e78fd7415f344d03cebfff9289411cc6af8f502d55bdef7dc95dd20773469f719ac0ecde
7
- data.tar.gz: 6dde2bcef96c82921f98af028a0c6c78c47453e904f6dc9ad891cacaf001ab03100e8a43a28820c8deef92a00caa84872688526661899665005d873c6ff5f05f
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.1.0)
4
+ halva (0.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -29,25 +29,32 @@ Or install it yourself as:
29
29
  ### Representing an object
30
30
 
31
31
  ```ruby
32
+ require 'halva'
33
+
32
34
  order = Order.find(1)
33
35
  Halva::Resource.from_model(order)
34
- .embed(Halva::Resource.from_model(order.customer).build, :customer)
36
+ .embed(Halva::Resource.from_model(order.customer), :customer)
35
37
  .link(Halva::Link.new('/orders/1', :self))
36
38
  .link(Halva::Link.new('/orders/1/customer', :customer))
37
- .build
39
+ .to_h
38
40
 
39
41
  ```
40
42
 
41
43
  ### Representing a collection
42
44
 
43
45
  ```ruby
46
+ require 'halva'
47
+
44
48
  orders = Order.find
45
49
  Halva::Resource.from_empty_model
46
- .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)
47
54
  .link(Halva::Link.new('/orders?page=3', :next))
48
55
  .link(Halva::Link.new('/orders?page=2', :self))
49
56
  .link(Halva::Link.new('/orders?page=1', :prev))
50
- .build
57
+ .to_h
51
58
 
52
59
  ```
53
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.1.0'
4
+ VERSION = '0.3.0'
5
5
  end
data/lib/halva.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'halva/link'
4
+ require 'halva/resource'
3
5
  require 'halva/version'
4
6
 
5
7
  module Halva
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.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Semenenko