fields-serializer 0.3.3 → 0.4.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 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