Skip to content

Commit e58687c

Browse files
authored
Merge pull request #1028 from elvanja/fix-nested-relationships
Fix nested namespaces parsing and resource resolving
2 parents 22110a6 + bbebf89 commit e58687c

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

lib/jsonapi/request_parser.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ def parse_to_one_relationship(resource_klass, link_value, relationship)
527527

528528
unless links_object[:id].nil?
529529
resource = resource_klass || Resource
530-
relationship_resource = resource.resource_klass_for(unformat_key(links_object[:type]).to_s)
530+
relationship_resource = resource.resource_klass_for(unformat_key(relationship.options[:class_name] || links_object[:type]).to_s)
531531
relationship_id = relationship_resource.verify_key(links_object[:id], @context)
532532
if relationship.polymorphic?
533533
{ id: relationship_id, type: unformat_key(links_object[:type].to_s) }

lib/jsonapi/resource.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ def rebuild_relationships(relationships)
446446

447447
def resource_klass_for(type)
448448
type = type.underscore
449-
type_with_module = type.include?('/') ? type : module_path + type
449+
type_with_module = type.start_with?(module_path) ? type : module_path + type
450450

451451
resource_name = _resource_name_from_type(type_with_module)
452452
resource = resource_name.safe_constantize if resource_name

test/unit/resource/resource_test.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,18 @@ module MyModule
8585
class MyNamespacedResource < JSONAPI::Resource
8686
model_name "Person"
8787
has_many :related
88+
has_one :default_profile, class_name: "Nested::Profile"
8889
end
8990

9091
class RelatedResource < JSONAPI::Resource
9192
model_name "Comment"
9293
end
94+
95+
module Nested
96+
class ProfileResource < JSONAPI::Resource
97+
model_name "Nested::Profile"
98+
end
99+
end
93100
end
94101

95102
module MyAPI
@@ -155,6 +162,12 @@ def test_resource_for_namespaced_resource
155162
assert_equal(MyModule::MyNamespacedResource.resource_klass_for('related'), MyModule::RelatedResource)
156163
end
157164

165+
def test_resource_for_nested_namespaced_resource
166+
assert_equal(JSONAPI::Resource.resource_klass_for('my_module/nested/profile'), MyModule::Nested::ProfileResource)
167+
assert_equal(MyModule::MyNamespacedResource.resource_klass_for('my_module/nested/profile'), MyModule::Nested::ProfileResource)
168+
assert_equal(MyModule::MyNamespacedResource.resource_klass_for('nested/profile'), MyModule::Nested::ProfileResource)
169+
end
170+
158171
def test_relationship_parent_point_to_correct_resource
159172
assert_equal MyModule::MyNamespacedResource, MyModule::MyNamespacedResource._relationships[:related].parent_resource
160173
end

0 commit comments

Comments
 (0)