From bbebf892dcd517cf4e41759342b3f56a7b258b3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vanja=20Radovanovi=C4=87?= Date: Fri, 14 Apr 2017 16:56:44 +0200 Subject: [PATCH] Fix nested namespaces parsing and resource resolving --- lib/jsonapi/request_parser.rb | 2 +- lib/jsonapi/resource.rb | 2 +- test/unit/resource/resource_test.rb | 13 +++++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/jsonapi/request_parser.rb b/lib/jsonapi/request_parser.rb index a80b971ac..3ef6099ee 100644 --- a/lib/jsonapi/request_parser.rb +++ b/lib/jsonapi/request_parser.rb @@ -529,7 +529,7 @@ def parse_to_one_relationship(resource_klass, link_value, relationship) unless links_object[:id].nil? resource = resource_klass || Resource - relationship_resource = resource.resource_klass_for(unformat_key(links_object[:type]).to_s) + relationship_resource = resource.resource_klass_for(unformat_key(relationship.options[:class_name] || links_object[:type]).to_s) relationship_id = relationship_resource.verify_key(links_object[:id], @context) if relationship.polymorphic? { id: relationship_id, type: unformat_key(links_object[:type].to_s) } diff --git a/lib/jsonapi/resource.rb b/lib/jsonapi/resource.rb index fac409177..88003c1e6 100644 --- a/lib/jsonapi/resource.rb +++ b/lib/jsonapi/resource.rb @@ -446,7 +446,7 @@ def rebuild_relationships(relationships) def resource_klass_for(type) type = type.underscore - type_with_module = type.include?('/') ? type : module_path + type + type_with_module = type.start_with?(module_path) ? type : module_path + type resource_name = _resource_name_from_type(type_with_module) resource = resource_name.safe_constantize if resource_name diff --git a/test/unit/resource/resource_test.rb b/test/unit/resource/resource_test.rb index d1dd28d8a..6ced13d70 100644 --- a/test/unit/resource/resource_test.rb +++ b/test/unit/resource/resource_test.rb @@ -85,11 +85,18 @@ module MyModule class MyNamespacedResource < JSONAPI::Resource model_name "Person" has_many :related + has_one :default_profile, class_name: "Nested::Profile" end class RelatedResource < JSONAPI::Resource model_name "Comment" end + + module Nested + class ProfileResource < JSONAPI::Resource + model_name "Nested::Profile" + end + end end module MyAPI @@ -155,6 +162,12 @@ def test_resource_for_namespaced_resource assert_equal(MyModule::MyNamespacedResource.resource_klass_for('related'), MyModule::RelatedResource) end + def test_resource_for_nested_namespaced_resource + assert_equal(JSONAPI::Resource.resource_klass_for('my_module/nested/profile'), MyModule::Nested::ProfileResource) + assert_equal(MyModule::MyNamespacedResource.resource_klass_for('my_module/nested/profile'), MyModule::Nested::ProfileResource) + assert_equal(MyModule::MyNamespacedResource.resource_klass_for('nested/profile'), MyModule::Nested::ProfileResource) + end + def test_relationship_parent_point_to_correct_resource assert_equal MyModule::MyNamespacedResource, MyModule::MyNamespacedResource._relationships[:related].parent_resource end