skalka 0.1.0 → 0.2.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 +4 -4
- data/lib/skalka/functions.rb +10 -10
- data/lib/skalka/nested_resource.rb +22 -0
- data/lib/skalka/resource.rb +17 -27
- data/lib/skalka/version.rb +1 -1
- data/lib/skalka.rb +4 -6
- data/skalka.gemspec +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5719ceadec96d873ec1440d99a5d5c5780aaef255e2b035830e74540d25d9bcc
|
4
|
+
data.tar.gz: b85ccbb1645e24dcfd4e3a36c9fa02a56e717f8863d46471550bb4731be5263a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7561d80483359b08e8054096900bc90bef5e68e582bcb19fb94d80739dcc7c49296482e7de16b164b656bf72de4b7712de32badf772a964fc8b1d225926feca
|
7
|
+
data.tar.gz: 00a13e0657fb7ae1cdc6333b65f8d5051110b63d483dc558d550444419df42615e27c05e7fcd6a3195e33b6fcdc75b4ac7bb9b3398f20caf6554e020e3a63ed8
|
data/lib/skalka/functions.rb
CHANGED
@@ -20,25 +20,25 @@ module Skalka
|
|
20
20
|
item.fetch(:data, {})
|
21
21
|
end
|
22
22
|
|
23
|
-
def flat_wrap(data)
|
24
|
-
[data].flatten
|
25
|
-
end
|
26
|
-
|
27
23
|
def extra_fields(parsed_json)
|
28
24
|
parsed_json.slice(*EXTRA_FIELDS)
|
29
25
|
end
|
30
26
|
|
31
|
-
def
|
27
|
+
def extract_resource(parsed_json)
|
28
|
+
included = parsed_json.fetch(:included, [])
|
29
|
+
|
32
30
|
(
|
33
31
|
self[:fetch_data] >>
|
34
|
-
self[:
|
35
|
-
self[:map_array, Resource[:build_resource].with(parsed_json)] >>
|
36
|
-
self[:unwrap]
|
32
|
+
self[:map_or_pass][ Resource[:build].with(included) ]
|
37
33
|
).call(parsed_json)
|
38
34
|
end
|
39
35
|
|
40
|
-
def
|
41
|
-
|
36
|
+
def map_or_pass(func)
|
37
|
+
self[:is, Array, self[:map_array, func]] >> self[:is, Hash, func]
|
38
|
+
end
|
39
|
+
|
40
|
+
def parse_and_symbolize_keys(json)
|
41
|
+
(self[:parse_json] >> self[:deep_symbolize_keys]).call(json)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Skalka
|
2
|
+
module NestedResource
|
3
|
+
extend Transproc::Registry
|
4
|
+
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def build(item)
|
8
|
+
(
|
9
|
+
Resource[:fetch_relationships] >>
|
10
|
+
Functions[:map_values, fetch_and_process_data]
|
11
|
+
)[item]
|
12
|
+
end
|
13
|
+
|
14
|
+
private def fetch_and_process_data
|
15
|
+
Functions[:fetch_data] >> Functions[:map_or_pass][reject_type_and_convert_id]
|
16
|
+
end
|
17
|
+
|
18
|
+
private def reject_type_and_convert_id
|
19
|
+
Functions[:reject_keys, [:type]] >> Functions[:map_value, :id, ->(id) { id.to_i }]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/skalka/resource.rb
CHANGED
@@ -4,13 +4,10 @@ module Skalka
|
|
4
4
|
|
5
5
|
module_function
|
6
6
|
|
7
|
-
def
|
8
|
-
raw_relationships = item.fetch(:relationships, {})
|
9
|
-
included = parsed_json.fetch(:included, [])
|
10
|
-
|
7
|
+
def build(item, included)
|
11
8
|
{
|
12
9
|
**self[:deattribute][item],
|
13
|
-
**relationships(included
|
10
|
+
**self[:relationships].with(included)[item]
|
14
11
|
}
|
15
12
|
end
|
16
13
|
|
@@ -23,16 +20,19 @@ module Skalka
|
|
23
20
|
|
24
21
|
def deattribute_with_nested(item)
|
25
22
|
{
|
26
|
-
**deattribute
|
27
|
-
**
|
23
|
+
**self[:deattribute][item],
|
24
|
+
**NestedResource[:build][item]
|
28
25
|
}
|
29
26
|
end
|
30
27
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
28
|
+
def fetch_relationships(item)
|
29
|
+
item.fetch(:relationships, {})
|
30
|
+
end
|
31
|
+
|
32
|
+
def fetch_link_func(included)
|
33
|
+
Functions[:fetch_data] >> Functions[:map_or_pass][
|
34
|
+
self[:find_resource].with(included) >> self[:deattribute_with_nested]
|
35
|
+
]
|
36
36
|
end
|
37
37
|
|
38
38
|
def find_resource(relationship, included)
|
@@ -41,21 +41,11 @@ module Skalka
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
def
|
45
|
-
|
46
|
-
:
|
47
|
-
Functions[:
|
48
|
-
|
49
|
-
Functions[
|
50
|
-
:map_array,
|
51
|
-
Functions[:accept_keys, [:id]] >>
|
52
|
-
Functions[:map_value, :id, ->(id) { id.to_i }]
|
53
|
-
]
|
54
|
-
][relationships]
|
55
|
-
end
|
56
|
-
|
57
|
-
def relationships(included, raw_relationships)
|
58
|
-
Functions[:map_values, fetch_link(included)][raw_relationships]
|
44
|
+
def relationships(item, included)
|
45
|
+
(
|
46
|
+
self[:fetch_relationships] >>
|
47
|
+
Functions[:map_values, fetch_link_func(included)]
|
48
|
+
)[item]
|
59
49
|
end
|
60
50
|
end
|
61
51
|
end
|
data/lib/skalka/version.rb
CHANGED
data/lib/skalka.rb
CHANGED
@@ -1,23 +1,21 @@
|
|
1
1
|
require "skalka/functions"
|
2
2
|
require "skalka/resource"
|
3
|
+
require "skalka/nested_resource"
|
3
4
|
require "skalka/version"
|
4
5
|
|
5
6
|
module Skalka
|
6
7
|
autoload :Functions, "skalka/functions"
|
7
8
|
autoload :Resource, "skalka/resource"
|
9
|
+
autoload :NestedResource, "skalka/nested_resource"
|
8
10
|
|
9
11
|
module_function
|
10
12
|
|
11
13
|
def call(json)
|
12
|
-
parsed_json =
|
14
|
+
parsed_json = Functions[:parse_and_symbolize_keys][json]
|
13
15
|
|
14
16
|
{
|
15
|
-
data: Functions[:
|
17
|
+
data: Functions[:extract_resource][parsed_json],
|
16
18
|
**Functions[:extra_fields][parsed_json]
|
17
19
|
}
|
18
20
|
end
|
19
|
-
|
20
|
-
private def parse_json(json)
|
21
|
-
(Functions[:parse_json] >> Functions[:deep_symbolize_keys])[json]
|
22
|
-
end
|
23
21
|
end
|
data/skalka.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skalka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emil Shakirov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- Rakefile
|
85
85
|
- lib/skalka.rb
|
86
86
|
- lib/skalka/functions.rb
|
87
|
+
- lib/skalka/nested_resource.rb
|
87
88
|
- lib/skalka/resource.rb
|
88
89
|
- lib/skalka/version.rb
|
89
90
|
- skalka.gemspec
|