normalizr.rb 0.0.2 → 0.1.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
  SHA1:
3
- metadata.gz: 59fff4df2dcf4e013f3759cd18f40eb35676679a
4
- data.tar.gz: 2ce8d1964c5945f2a57b6d041d161ff5973a60e7
3
+ metadata.gz: 8dd079a2b917a511e5902315498dd4ebb208f603
4
+ data.tar.gz: 0e1a3fdcd10163bac862cf20934ca31a8c9bcb4f
5
5
  SHA512:
6
- metadata.gz: 00e920713354a5a44f55bfd377acded602e71e32c1e23b2f209443f1e471db0817fe874c481c29fabca4e678e3afbb1e97063032a617fd5ce3f8262783bfa245
7
- data.tar.gz: d6bd2a2bdd27c95e2944835e51d0dd81d0b97d17c513cd62d8d025d01025bef267282a5ccf011aa0431d57565275c8fe3c483f640561a575ed60af92953d71b2
6
+ metadata.gz: b1ba4409e6be7e7af7a0d174520e1b1082b1a87026bcf4cddce7a9c5c21246477f9552cfdc63351efc4937ab9afe6601c3c2467cbcc5b133b278a3a3dca3b05a
7
+ data.tar.gz: 41d89fc8d3314a9fcf5d5696e3e8e700f66d067151aab61a1dbe6932aa0fa86f9798fdbdd660b7a7e832ce3f3a6cfbf1239ff92e34881699a98a1f7c02a3c4df
@@ -9,5 +9,9 @@ module Normalizr
9
9
  Array(obj).map { |item| @schema.visit(item, bag) }
10
10
  end
11
11
 
12
+ def unvisit obj, ids
13
+ ids.map { |id| @schema.unvisit(obj, id) }
14
+ end
15
+
12
16
  end
13
17
  end
data/lib/normalizr/bag.rb CHANGED
@@ -13,6 +13,10 @@ module Normalizr
13
13
  value[:id]
14
14
  end
15
15
 
16
+ def get name, id
17
+ @bag[name.to_sym][id]
18
+ end
19
+
16
20
  def to_hash
17
21
  @bag.dup
18
22
  end
@@ -1,6 +1,7 @@
1
1
  require 'normalizr/bag'
2
2
 
3
3
  module Normalizr
4
+
4
5
  def self.normalize! obj, schema
5
6
  bag = Normalizr::Bag.new
6
7
 
@@ -14,4 +15,17 @@ module Normalizr
14
15
 
15
16
  bag.to_hash
16
17
  end
18
+
19
+
20
+ def self.denormalize! obj, schema, id=nil
21
+ schema.keys.map do |key|
22
+ if id.nil?
23
+ value = schema[key].unvisit(obj, obj[key].keys)
24
+ else
25
+ value = schema[key].unvisit(obj, id)
26
+ end
27
+ Hash[key, value]
28
+ end.reduce({}, &:merge)
29
+ end
30
+
17
31
  end
@@ -1,11 +1,13 @@
1
1
  module Normalizr
2
2
  class Schema
3
3
 
4
+
4
5
  def initialize name, definition={}
5
6
  @name = name
6
7
  @definition = definition
7
8
  end
8
9
 
10
+
9
11
  def visit obj, bag
10
12
  relationships = @definition.keys.map do |key|
11
13
  id = @definition[key].visit(obj[key], bag)
@@ -15,5 +17,18 @@ module Normalizr
15
17
  bag.add(@name, obj.merge(relationships))
16
18
  end
17
19
 
20
+
21
+ def unvisit obj, id
22
+ normalized = obj[@name.to_sym][id]
23
+
24
+ denormalized = @definition.keys.map do |key|
25
+ value = @definition[key].unvisit(obj, normalized[key])
26
+ Hash[key, value]
27
+ end.reduce({}, &:merge)
28
+
29
+ normalized.merge(denormalized)
30
+ end
31
+
32
+
18
33
  end
19
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: normalizr.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Okhravi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-11 00:00:00.000000000 Z
11
+ date: 2017-02-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Normalize deeply nested hash based on a schema
14
14
  email: