fields-serializer 0.5.7 → 0.6.0
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/active_record.rb +20 -15
- 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: 18a49cde603d26bd1720c5efc9a626d89460debd
|
4
|
+
data.tar.gz: ee1496bfa7c568d657e280678c505705d3ecae1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f437546ad70fe765da4d1e8e4cdef5be4cbd1d42d91f3b7621428927b656852b90f2e322e607ced987190a04004d14334ef15fa4ba4a2daa8896d3259be71e9
|
7
|
+
data.tar.gz: 47fc5594fe431a1855f6a388041bcc33c3e832eb2cfcc9b3de054501fcc0acaa9a583f428eea3ab10d51c8af7daba0c2db33eed12776d67f4ce8fa8d239db3d6
|
@@ -8,8 +8,9 @@ module Fields
|
|
8
8
|
|
9
9
|
class_methods do
|
10
10
|
|
11
|
+
# If key is an association of a given model class
|
11
12
|
def association?(key)
|
12
|
-
reflections.keys.include?(key)
|
13
|
+
reflections.keys.include?(key.to_s)
|
13
14
|
end
|
14
15
|
|
15
16
|
# Convert a list of fields (json_api notation) in a list of associations to be
|
@@ -23,14 +24,32 @@ module Fields
|
|
23
24
|
fields_to_tree(fields).to_includes
|
24
25
|
end
|
25
26
|
|
27
|
+
# Creates new anonymous ActiveModel::Serializer subclass from fields in json api notation:
|
28
|
+
#
|
29
|
+
# Class.new do
|
30
|
+
# attribute :id
|
31
|
+
# attribute :non_association_field_1
|
32
|
+
# attribute :non_association_field_2
|
33
|
+
# attribute :non_association_field_3
|
34
|
+
# attribute :non_association_field_4
|
35
|
+
# ...
|
36
|
+
#
|
37
|
+
# has_one :association_field_1, serializer: new_serializer_class_for_association_field_1_nested_fields
|
38
|
+
# or
|
39
|
+
# belongs_to :association_field_2, serializer: new_serializer_class_for_association_field_2_nested_fields
|
40
|
+
# or
|
41
|
+
# has_many :association_field_3, serializer: new_serializer_class_for_association_field_3_nested_fields
|
42
|
+
# end ...
|
26
43
|
def fields_serializer(*fields)
|
27
44
|
create_serializer_class(fields_to_tree(fields).notation)
|
28
45
|
end
|
29
46
|
|
47
|
+
# Creates new anonymous ActiveModel::Serializer subclass from fields in Rails includes notation
|
30
48
|
def create_serializer_class(fields)
|
31
49
|
klass = self
|
32
50
|
Class.new(ActiveModel::Serializer).tap do |new_class|
|
33
51
|
new_class.class_eval do
|
52
|
+
attribute :id
|
34
53
|
Array.wrap(fields).each do |field|
|
35
54
|
if field.kind_of?(Hash)
|
36
55
|
field.each do |association_name, nested_fields|
|
@@ -51,20 +70,6 @@ module Fields
|
|
51
70
|
array_fields(fields.flatten).inject(FieldsTree.new(self), &:merge!)
|
52
71
|
end
|
53
72
|
|
54
|
-
# Calls:
|
55
|
-
# has_one :user, serializer: new_serializer_class_for_user_fields
|
56
|
-
# or
|
57
|
-
# belongs_to :user, serializer: new_serializer_class_for_user_fields
|
58
|
-
# or
|
59
|
-
# has_many :users, serializer: new_serializer_class_for_user_fields
|
60
|
-
#
|
61
|
-
def nested_association(fields)
|
62
|
-
fields.each do |association_name, nested_fields|
|
63
|
-
reflection = reflections[association_name]
|
64
|
-
send(reflection.macro, association_name.to_sym, serializer: reflection.klass.create_serializer_class(nested_fields))
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
73
|
def array_fields(fields)
|
69
74
|
Array.wrap(fields).map { |str| str.to_s.split(",").map(&:strip) }.flatten.sort
|
70
75
|
end
|