fields-serializer 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/fields/serializer/fields_tree.rb +41 -23
- data/lib/fields/serializer/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a40d814b11b8a789f079dd17c01cd6da9ef08a9
|
4
|
+
data.tar.gz: b107747d4a6d73b2e23616db6af21ad986108e96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a10e3adab1752e273bbef998e232cf8e9a466cfe92ec8cfc1ae7c7b2418fe3b3e1167265380e3119de7c4ab3b4b03991e61ea1ceda9613a2670df3728f0db004
|
7
|
+
data.tar.gz: 2b5c1a57588956d70ca910535bbe8cc0de4100ad0b3152e5fb04d078fbc1c129a0316f092ab00fd12cde9c667be7281c27b6d3473c1b54324b589a92753aa25a
|
@@ -14,6 +14,7 @@ module Fields
|
|
14
14
|
@associations = {}
|
15
15
|
end
|
16
16
|
|
17
|
+
# Self if any fields or associations. Nil otherwise
|
17
18
|
def presence
|
18
19
|
self if fields.present? || associations.present?
|
19
20
|
end
|
@@ -27,13 +28,9 @@ module Fields
|
|
27
28
|
# #=> [:name, :surname, { subjects: [:title, { posts: [{ comments: :count }, :date] }], followers: :nickname }]
|
28
29
|
#
|
29
30
|
def merge!(join_field)
|
30
|
-
return self
|
31
|
+
return self if join_field.blank?
|
31
32
|
parent, rest = join_field.to_s.split(".", 2)
|
32
|
-
|
33
|
-
fields << parent if !(existing_field?(parent) || association?(parent))
|
34
|
-
else
|
35
|
-
existing_association?(parent) ? associations[parent].merge!(rest) : add_association!(parent, rest)
|
36
|
-
end
|
33
|
+
rest.present? ? add_association!(parent, rest) : add_field!(parent)
|
37
34
|
self
|
38
35
|
end
|
39
36
|
|
@@ -43,14 +40,11 @@ module Fields
|
|
43
40
|
# #=> [:name, :surname, { subjects: [:title, { posts: :comments }], followers: :nickname }]
|
44
41
|
#
|
45
42
|
def notation
|
46
|
-
if fields.
|
47
|
-
|
48
|
-
|
49
|
-
else
|
50
|
-
fields.one? ? fields.first.dup : fields.dup
|
51
|
-
end
|
43
|
+
return associations_to_notation.presence if fields.blank?
|
44
|
+
if associations.present?
|
45
|
+
fields.dup << associations_to_notation
|
52
46
|
else
|
53
|
-
|
47
|
+
fields.one? ? fields.first.dup : fields.dup
|
54
48
|
end
|
55
49
|
end
|
56
50
|
|
@@ -60,15 +54,12 @@ module Fields
|
|
60
54
|
# #=> [{ subjects: { posts: :comments }}, :followers]
|
61
55
|
#
|
62
56
|
def to_includes
|
63
|
-
to_includes = associations.inject([]) do |result, (
|
64
|
-
|
65
|
-
if
|
66
|
-
|
67
|
-
hash = result.find { |e| e.is_a?(Hash) }
|
68
|
-
hash ? hash.merge!(new_has_entry) : (result << new_has_entry)
|
69
|
-
result
|
57
|
+
to_includes = associations.inject([]) do |result, (association_name, association_tree)|
|
58
|
+
association_includes = association_tree.to_includes
|
59
|
+
if association_includes.present?
|
60
|
+
add_association_includes_to_includes!(result, association_name, association_includes)
|
70
61
|
else
|
71
|
-
result
|
62
|
+
add_association_to_includes!(result, association_name)
|
72
63
|
end
|
73
64
|
end.presence
|
74
65
|
Array.wrap(to_includes).one? ? to_includes.first : to_includes
|
@@ -81,6 +72,21 @@ module Fields
|
|
81
72
|
private
|
82
73
|
|
83
74
|
def add_association!(parent, rest)
|
75
|
+
existing_association?(parent) ? merge_association!(parent, rest) : append_association!(parent, rest)
|
76
|
+
end
|
77
|
+
|
78
|
+
def add_association_includes_to_includes!(includes, association_name, association_includes)
|
79
|
+
new_has_entry = { association_name => association_includes }
|
80
|
+
includes_hash = includes.find { |e| e.is_a?(Hash) }
|
81
|
+
includes_hash ? includes_hash.merge!(new_has_entry) : (includes << new_has_entry)
|
82
|
+
includes
|
83
|
+
end
|
84
|
+
|
85
|
+
def add_association_to_includes!(includes, association_name)
|
86
|
+
includes << association_name
|
87
|
+
end
|
88
|
+
|
89
|
+
def append_association!(parent, rest)
|
84
90
|
if association?(parent)
|
85
91
|
nested_class = klass.reflections[parent].klass
|
86
92
|
nested_fields_tree = FieldsTree.new(nested_class).merge!(rest).presence
|
@@ -88,6 +94,14 @@ module Fields
|
|
88
94
|
associations.merge!(new_association) if new_association
|
89
95
|
end
|
90
96
|
end
|
97
|
+
|
98
|
+
def add_field!(value)
|
99
|
+
fields << value if new_field?(value)
|
100
|
+
end
|
101
|
+
|
102
|
+
def association?(value)
|
103
|
+
klass.reflections.keys.include?(value)
|
104
|
+
end
|
91
105
|
|
92
106
|
def associations_to_notation
|
93
107
|
associations.inject({}) do |result, (k, v)|
|
@@ -103,8 +117,12 @@ module Fields
|
|
103
117
|
fields.include?(value)
|
104
118
|
end
|
105
119
|
|
106
|
-
def
|
107
|
-
|
120
|
+
def merge_association!(key, fields)
|
121
|
+
associations[key].merge!(fields)
|
122
|
+
end
|
123
|
+
|
124
|
+
def new_field?(value)
|
125
|
+
!existing_field?(value) && !association?(value)
|
108
126
|
end
|
109
127
|
end
|
110
128
|
end
|