active_model_serializers_pg 0.0.8 → 0.1.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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e76f115e2f83261f48bd94bd4bf72a14ba90e75b0e8cf8bd5f141122950424c4
|
4
|
+
data.tar.gz: df09967cbaa3a0e594fd8357e12ac8a4db43b53a06e77d259e5c7e3d2ac24931
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: daed8e7d80f643cfe961eeb162829f941c73c3e015b9e32fe68d5bf23aa0444f348ae2714847e282603a0a0676a11c29e9b4c20d8d413ac1a2e4b4dee2b96fc4
|
7
|
+
data.tar.gz: 18709557dca29fed95387c97fb684926e3c68593692fd62f14dc600af46e42c173dba2a1543787a79c942a47ddc1386fd12d7507489067b45a877010eb782ca8
|
@@ -173,6 +173,20 @@ class JsonThing
|
|
173
173
|
(@sql_methods[field] ||= _sql_method(field))[0]
|
174
174
|
end
|
175
175
|
|
176
|
+
# Returns the primary key column as a string,
|
177
|
+
# but if there is a "#{primary_key}__sql" method,
|
178
|
+
# then call that and return it instead.
|
179
|
+
# We use this for the id reported in the jsonapi output,
|
180
|
+
# but not for foreign key relationships.
|
181
|
+
def primary_key_attr
|
182
|
+
pk = primary_key
|
183
|
+
if has_sql_method?(pk)
|
184
|
+
sql_method(pk)
|
185
|
+
else
|
186
|
+
pk
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
176
190
|
private
|
177
191
|
|
178
192
|
# This needs to be globally unique within the SQL query,
|
@@ -494,7 +508,7 @@ class JsonApiPgSql
|
|
494
508
|
def select_resource_relationship_links(resource, reflection)
|
495
509
|
reflection.links.map {|link_name, link_parts|
|
496
510
|
<<~EOQ
|
497
|
-
'#{link_name}', CONCAT(#{link_parts.join(%Q{, "#{resource.parent.table_name}"."#{resource.parent.
|
511
|
+
'#{link_name}', CONCAT(#{link_parts.join(%Q{, "#{resource.parent.table_name}"."#{resource.parent.primary_key_attr}", })})
|
498
512
|
EOQ
|
499
513
|
}.join(",\n")
|
500
514
|
end
|
@@ -545,7 +559,6 @@ class JsonApiPgSql
|
|
545
559
|
# or from the class's default scope.
|
546
560
|
# TODO: preserve the whole custom relation, not just ordering
|
547
561
|
p = refl.ar_class.new
|
548
|
-
ordering = nil
|
549
562
|
ordering = p.send(refl.name).arel.orders
|
550
563
|
ordering = child_resource.ar_class.default_scoped.arel.orders if ordering.empty?
|
551
564
|
ordering = ordering.map{|o|
|
@@ -562,7 +575,7 @@ class JsonApiPgSql
|
|
562
575
|
ordering = "ORDER BY #{ordering}" if ordering
|
563
576
|
<<~EOQ
|
564
577
|
LEFT OUTER JOIN LATERAL (
|
565
|
-
SELECT coalesce(jsonb_agg(jsonb_build_object('id', rel."#{child_resource.
|
578
|
+
SELECT coalesce(jsonb_agg(jsonb_build_object('id', rel."#{child_resource.primary_key_attr}"::text,
|
566
579
|
'type', '#{child_resource.json_type}') #{ordering}), '[]') AS j
|
567
580
|
FROM "#{child_resource.table_name}" rel
|
568
581
|
WHERE rel."#{child_resource.foreign_key}" = "#{resource.table_name}"."#{resource.primary_key}"
|
@@ -575,7 +588,7 @@ class JsonApiPgSql
|
|
575
588
|
when ActiveRecord::Relation
|
576
589
|
rel = refl.reflection_sql
|
577
590
|
sql = rel.select(<<~EOQ).to_sql
|
578
|
-
coalesce(jsonb_agg(jsonb_build_object('id', "#{child_resource.table_name}"."#{child_resource.
|
591
|
+
coalesce(jsonb_agg(jsonb_build_object('id', "#{child_resource.table_name}"."#{child_resource.primary_key_attr}"::text,
|
579
592
|
'type', '#{child_resource.json_type}')), '[]') AS j
|
580
593
|
EOQ
|
581
594
|
<<~EOQ
|
@@ -588,7 +601,7 @@ class JsonApiPgSql
|
|
588
601
|
elsif refl.has_one?
|
589
602
|
<<~EOQ
|
590
603
|
LEFT OUTER JOIN LATERAL (
|
591
|
-
SELECT jsonb_build_object('id', rel."#{child_resource.
|
604
|
+
SELECT jsonb_build_object('id', rel."#{child_resource.primary_key_attr}"::text,
|
592
605
|
'type', '#{child_resource.json_type}') AS j
|
593
606
|
FROM "#{child_resource.table_name}" rel
|
594
607
|
WHERE rel."#{child_resource.foreign_key}" = "#{resource.table_name}"."#{resource.primary_key}"
|
@@ -704,7 +717,7 @@ class JsonApiPgSql
|
|
704
717
|
def select_resource(resource)
|
705
718
|
fields = fields_for(resource)
|
706
719
|
<<~EOQ
|
707
|
-
jsonb_build_object('id', "#{resource.table_name}"."#{resource.
|
720
|
+
jsonb_build_object('id', "#{resource.table_name}"."#{resource.primary_key_attr}"::text,
|
708
721
|
'type', '#{resource.json_type}',
|
709
722
|
'attributes', #{select_resource_attributes(resource)}
|
710
723
|
#{maybe_select_resource_relationships(resource)})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_model_serializers_pg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul A. Jungwirth
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_model_serializers
|