@@ -7,14 +7,16 @@ class JsonApi < Adapter
77 def initialize ( serializer , options = { } )
88 super
99 @hash = { data : [ ] }
10-
10+ @url_helper = options [ :url_helper ]
1111 if fields = options . delete ( :fields )
1212 @fieldset = ActiveModel ::Serializer ::Fieldset . new ( fields , serializer . json_key )
1313 else
1414 @fieldset = options [ :fieldset ]
1515 end
1616 end
1717
18+ attr_reader :url_helper
19+
1820 def serializable_hash ( options = nil )
1921 options = { }
2022 if serializer . respond_to? ( :each )
@@ -41,10 +43,17 @@ def fragment_cache(cached_hash, non_cached_hash)
4143
4244 private
4345
44- def add_relationships ( resource , name , serializers )
46+ def add_relationships ( resource , name , serializers , opts )
4547 resource [ :relationships ] ||= { }
46- resource [ :relationships ] [ name ] ||= { data : [ ] }
47- resource [ :relationships ] [ name ] [ :data ] += serializers . map { |serializer | { type : serializer . type , id : serializer . id . to_s } }
48+
49+ if opts . fetch ( :data , true )
50+ resource [ :relationships ] [ name ] ||= { data : [ ] }
51+ resource [ :relationships ] [ name ] [ :data ] += serializers . map { |serializer | { type : serializer . type , id : serializer . id . to_s } }
52+ end
53+ if opts . fetch ( :links , false )
54+ resource [ :relationships ] [ name ] ||= { }
55+ resource [ :relationships ] [ name ] [ :links ] = { related : url_helper . url_for ( [ serializer . object , name ] ) }
56+ end
4857 end
4958
5059 def add_relationship ( resource , name , serializer , val = nil )
@@ -141,7 +150,7 @@ def add_resource_relationships(attrs, serializer, options = {})
141150 attrs [ :relationships ] ||= { }
142151
143152 if serializer . respond_to? ( :each )
144- add_relationships ( attrs , key , serializer )
153+ add_relationships ( attrs , key , serializer , opts )
145154 else
146155 if opts [ :virtual_value ]
147156 add_relationship ( attrs , key , nil , opts [ :virtual_value ] )
0 commit comments