@@ -48,18 +48,30 @@ def jsonapi_resource(*resources, &_block)
4848
4949 resource @resource_type , options do
5050 # :nocov:
51- if @scope . respond_to? :[]=
51+ if @scope . respond_to? ( :[]= )
5252 # Rails 4
5353 @scope [ :jsonapi_resource ] = @resource_type
5454
55+ if block_given?
56+ yield
57+ else
58+ jsonapi_relationships
59+ end
60+ elsif Rails ::VERSION ::MAJOR >= 8 && Rails ::VERSION ::MINOR >= 1
61+ # Rails 8.1+
62+ # Rails 8.1 changed Scope to not support []= and Resource.new signature
63+ # Use instance variable to track resource type
64+ @jsonapi_resource_type = @resource_type
5565 if block_given?
5666 yield
5767 else
5868 jsonapi_relationships
5969 end
6070 else
61- # Rails 5
62- jsonapi_resource_scope ( SingletonResource . new ( @resource_type , api_only? , @scope [ :shallow ] , options ) , @resource_type ) do
71+ # Rails 5-8.0
72+ resource_arg = SingletonResource . new ( @resource_type , api_only? , @scope [ :shallow ] , options )
73+
74+ jsonapi_resource_scope ( resource_arg , @resource_type ) do
6375 if block_given?
6476 yield
6577 else
@@ -123,17 +135,29 @@ def jsonapi_resources(*resources, &_block)
123135
124136 resources @resource_type , options do
125137 # :nocov:
126- if @scope . respond_to? :[]=
138+ if @scope . respond_to? ( :[]= )
127139 # Rails 4
128140 @scope [ :jsonapi_resource ] = @resource_type
129141 if block_given?
130142 yield
131143 else
132144 jsonapi_relationships
133145 end
146+ elsif Rails ::VERSION ::MAJOR >= 8 && Rails ::VERSION ::MINOR >= 1
147+ # Rails 8.1+
148+ # Rails 8.1 changed Scope to not support []= and Resource.new signature
149+ # Use instance variable to track resource type
150+ @jsonapi_resource_type = @resource_type
151+ if block_given?
152+ yield
153+ else
154+ jsonapi_relationships
155+ end
134156 else
135- # Rails 5
136- jsonapi_resource_scope ( Resource . new ( @resource_type , api_only? , @scope [ :shallow ] , options ) , @resource_type ) do
157+ # Rails 5-8.0
158+ resource_arg = Resource . new ( @resource_type , api_only? , @scope [ :shallow ] , options )
159+
160+ jsonapi_resource_scope ( resource_arg , @resource_type ) do
137161 if block_given?
138162 yield
139163 else
@@ -277,7 +301,7 @@ def jsonapi_resource_scope(resource, resource_type) #:nodoc:
277301 private
278302
279303 def resource_type_with_module_prefix ( resource = nil )
280- resource_name = resource || @scope [ :jsonapi_resource ]
304+ resource_name = resource || @scope [ :jsonapi_resource ] || @jsonapi_resource_type
281305 [ @scope [ :module ] , resource_name ] . compact . collect ( &:to_s ) . join ( '/' )
282306 end
283307 end
0 commit comments