rekey.rb 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7fedc5a7b339e337ea2ae4ae34d467cce9b30321
4
+ data.tar.gz: 1faddcdbaea64bbfe83551d36372899ddddee609
5
+ SHA512:
6
+ metadata.gz: b2d8c1a1857d27810043a6756332a559a0a493c0735dd5ac06cb73c75aba561ae4423aadc3b9080a79bde3313a786a93fb6c6e3e3ed036b3225afbed4caedc25
7
+ data.tar.gz: e2dbd8c0b31588c793d2f02d2061ee9b7c18bfa68a383d15799233babf7320550315f69796a42a452c8da87c8981d07bfcbebab72bbc35ac462000d5a919f7cf
@@ -0,0 +1,14 @@
1
+ module Rekey
2
+ class ArrayOf < Rekey::From
3
+
4
+ def initialize key, schema
5
+ @key = key
6
+ @schema = schema
7
+ end
8
+
9
+ def rekey obj
10
+ obj[@key].map { |value| @schema.rekey(value) }
11
+ end
12
+
13
+ end
14
+ end
data/lib/rekey/from.rb ADDED
@@ -0,0 +1,23 @@
1
+ module Rekey
2
+ class From
3
+
4
+ def initialize key
5
+ @key = key
6
+ end
7
+
8
+ def rekey obj
9
+ obj[@key]
10
+ end
11
+
12
+ def unkey obj
13
+ obj.map do |key, value|
14
+ if key == @key
15
+ {}
16
+ else
17
+ Hash[key, value]
18
+ end
19
+ end.reduce({}, &:merge)
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ module Rekey
2
+
3
+ def self.rekey obj, schema
4
+ schema.rekey(obj)
5
+ end
6
+
7
+ end
@@ -0,0 +1,26 @@
1
+ module Rekey
2
+ class Schema
3
+
4
+ def initialize definition
5
+ @definition = definition
6
+ end
7
+
8
+ def rekey obj
9
+ additions = @definition.keys.map do |key|
10
+ value = @definition[key].rekey(obj)
11
+ Hash[key, value]
12
+ end.reduce({}, &:merge)
13
+
14
+ unkeyed = @definition.keys.reduce(obj) do |acc, key|
15
+ @definition[key].unkey(acc)
16
+ end
17
+
18
+ unkeyed = @definition.keys.map do |key|
19
+ value = @definition[key].unkey(obj)
20
+ end.reduce({}, &:merge)
21
+
22
+ unkeyed.merge(additions)
23
+ end
24
+
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rekey.rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Christopher Okhravi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-02-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/rekey/array_of.rb
20
+ - lib/rekey/from.rb
21
+ - lib/rekey/rekey.rb
22
+ - lib/rekey/schema.rb
23
+ homepage: https://github.com/chrokh/rekey.rb
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.5.1
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Rename keys of deeply nested hash based on schema
47
+ test_files: []