@@ -8,6 +8,7 @@ module Base
88 included do
99 class_attribute :_jsonapi_compliable
1010 before_action :parse_fieldsets!
11+ after_action :reset_scope_flag
1112 end
1213
1314 def default_page_number
@@ -30,18 +31,22 @@ def jsonapi_scope(scope,
3031 scope = JSONAPICompliable ::Scope ::Sideload . new ( self , scope ) . apply if includes
3132 scope = JSONAPICompliable ::Scope ::Sort . new ( self , scope ) . apply if sort
3233 scope = JSONAPICompliable ::Scope ::Paginate . new ( self , scope ) . apply if paginate
34+ @_jsonapi_scoped = true
3335 scope
3436 end
3537
38+ def reset_scope_flag
39+ @_jsonapi_scoped = false
40+ end
41+
3642 def parse_fieldsets!
3743 Util ::FieldParams . parse! ( params , :fields )
3844 Util ::FieldParams . parse! ( params , :extra_fields )
3945 end
4046
41- # * Eager loads whitelisted includes
42- # * Merges opts and ams_default_options
4347 def render_ams ( scope , opts = { } )
44- scope = jsonapi_scope ( scope ) if scope . is_a? ( ActiveRecord ::Relation )
48+ opts [ :scope ] = true unless opts [ :scope ] == false
49+ scope = jsonapi_scope ( scope ) if !@_jsonapi_scoped && opts . delete ( :scope )
4550 options = default_ams_options
4651 options [ :include ] = forced_includes || Util ::IncludeParams . scrub ( self )
4752 options [ :json ] = scope
@@ -60,6 +65,9 @@ def default_ams_options
6065 end
6166 end
6267
68+ # TODO: This nastiness likely goes away once jsonapi standardizes
69+ # a spec for nested relationships.
70+ # See: https://github.com/json-api/json-api/issues/1089
6371 def forced_includes ( data = nil )
6472 return unless force_includes?
6573 data = raw_params [ :data ] unless data
@@ -85,9 +93,11 @@ def force_includes?
8593
8694 module ClassMethods
8795 def jsonapi ( &blk )
88- dsl = JsonapiCompliable ::DSL . new
89- dsl . instance_eval ( &blk )
90- self . _jsonapi_compliable = dsl
96+ if !self . _jsonapi_compliable
97+ dsl = JsonapiCompliable ::DSL . new
98+ self . _jsonapi_compliable = dsl
99+ end
100+ self . _jsonapi_compliable . instance_eval ( &blk )
91101 end
92102 end
93103 end
0 commit comments