fields-serializer 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: db691b14752c0a91e789dc56e7e10bb85b71f606
4
- data.tar.gz: bc53b7a7f16bf45686d71464e85795f769c488d4
3
+ metadata.gz: 026a3b888bceb7ead4ec323dfb6a8f5d32b0530c
4
+ data.tar.gz: 1465d275c0d1999835a1b16306c488343654e20d
5
5
  SHA512:
6
- metadata.gz: 8073ccef183f83a57edb61c4bfe49fbcc83f9ab13f114f64ce09534cbd24fa9de47f1bfd1cef67e18c710e669ec32f02b0f76589679e5896971a5f8897deb99b
7
- data.tar.gz: 5f8d7e63bf56b6210b7c4f50374c2e2cd52cd1bf8d3d75f4552e2ac25b186baa4a87b36ba5a5553ebbbbf77d50c0e1b97089a8b055da2b92c08a865c96ec2f3e
6
+ metadata.gz: 72bc247fb4b38e878af011e3fa2a96f4e8bac7b57696dc2b48f9375ff462f04e6b49a9f2966f18a78c939a35720ded20e20b18439ef6d3adddedd2e88e8ba4f9
7
+ data.tar.gz: 54127c8b3f4e09f5d7c04e01780862ce08de6368ff0dfde49be85f600437022968e0d2ee9167b674acd7e7ceecd51a3ffe734234aa29baf012ba9f32ecce8e5f
@@ -17,9 +17,10 @@ module Fields
17
17
  fields = options.delete(:fields)
18
18
  model_class = options.delete(:model_class)
19
19
  if fields.present?
20
- query = query.includes(*model_class.fields_to_includes(fields))
21
- options.merge!(each_serializer: FieldSerializer, fields: Array(fields))
22
- options.delete(:include)
20
+ includes = model_class.fields_to_includes(fields)
21
+ query = query.includes(*includes)
22
+ # options.merge!(include: model_class.fields_to_include(includes).join(","))
23
+ options.merge!(include: includes)
23
24
  end
24
25
  render options.merge!(json: query.to_a)
25
26
  end
@@ -24,6 +24,23 @@ module Fields
24
24
  end.map(&:presence).compact
25
25
  end
26
26
 
27
+ # Convert a list of fields (json_api notation) in a list of associations to be
28
+ # added to a ActiveRecord Model.includes call
29
+ #
30
+ # Example:
31
+ #
32
+ # BoilerPack.fields_to_includes("id,boiler.gas_safe_code") #=> ["boiler"]
33
+ #
34
+ def fields_to_include(fields, root: nil)
35
+ Array(fields).map do |field|
36
+ if field.kind_of?(Hash) || field.kind_of?(Array)
37
+ field.map { |k, v| fields_to_include(v, root: composite_field(root, k)) }
38
+ else
39
+ composite_field(root, field)
40
+ end
41
+ end.flatten
42
+ end
43
+
27
44
  def nested_field(attribute_stack)
28
45
  parent = attribute_stack.first
29
46
  return unless association?(parent)
@@ -41,6 +58,10 @@ module Fields
41
58
  reflections.keys.include?(key)
42
59
  end
43
60
 
61
+ def composite_field(*values)
62
+ values.compact.join(".")
63
+ end
64
+
44
65
  def nested_fields(fields)
45
66
  array_fields(fields).map { |field| nested_field(field.split(".")) }.compact.uniq
46
67
  end
@@ -1,5 +1,5 @@
1
1
  module Fields
2
2
  module Serializer
3
- VERSION = "0.3.3"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fields-serializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stuart Chinery
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2017-12-18 00:00:00.000000000 Z
13
+ date: 2017-12-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler