Skip to content

Commit b63e843

Browse files
authored
Merge pull request #1254 from cerebris/related_scope
Scope related route names in a similar manner to relationship routes
2 parents f4c6b93 + acaa474 commit b63e843

File tree

5 files changed

+51
-2
lines changed

5 files changed

+51
-2
lines changed

lib/jsonapi/link_builder.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,14 @@ def resource_url_helper_name_from_source(source)
150150

151151
def related_url_helper_name(relationship)
152152
relationship_parts = resource_path_parts_from_class(relationship.parent_resource)
153+
relationship_parts << "related"
153154
relationship_parts << relationship.name
154155
url_helper_name_from_parts(relationship_parts)
155156
end
156157

157158
def singleton_related_url_helper_name(relationship)
158159
relationship_parts = []
160+
relationship_parts << "related"
159161
relationship_parts << relationship.name
160162
relationship_parts += resource_path_parts_from_class(relationship.parent_resource)
161163
url_helper_name_from_parts(relationship_parts)

lib/jsonapi/routing_ext.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ def jsonapi_related_resource(*relationship)
232232
match formatted_relationship_name, controller: options[:controller],
233233
relationship: relationship.name, source: resource_type_with_module_prefix(source._type),
234234
action: 'show_related_resource', via: [:get],
235-
as: relationship_name
235+
as: "related/#{relationship_name}"
236236
end
237237

238238
def jsonapi_related_resources(*relationship)
@@ -250,7 +250,7 @@ def jsonapi_related_resources(*relationship)
250250
controller: options[:controller],
251251
relationship: relationship.name, source: resource_type_with_module_prefix(source._type),
252252
action: 'index_related_resources', via: [:get],
253-
as: relationship_name
253+
as: "related/#{relationship_name}"
254254
end
255255

256256
protected

test/fixtures/active_record.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,14 @@
372372
t.belongs_to :painting
373373
end
374374

375+
create_table :lists, force: true do |t|
376+
t.string :name
377+
end
378+
379+
create_table :list_items, force: true do |t|
380+
t.belongs_to :list
381+
end
382+
375383
# special cases
376384
create_table :storages, force: true do |t|
377385
t.string :token, null: false
@@ -870,6 +878,14 @@ class Collector < ActiveRecord::Base
870878
belongs_to :painting
871879
end
872880

881+
class List < ActiveRecord::Base
882+
has_many :items, class_name: 'ListItem', inverse_of: :list
883+
end
884+
885+
class ListItem < ActiveRecord::Base
886+
belongs_to :list, inverse_of: :items
887+
end
888+
873889
### CONTROLLERS
874890
class SessionsController < ActionController::Base
875891
include JSONAPI::ActsAsResourceController
@@ -1202,6 +1218,12 @@ class DoctorsController < JSONAPI::ResourceController
12021218
class RespondentController < JSONAPI::ResourceController
12031219
end
12041220

1221+
class ListsController < JSONAPI::ResourceController
1222+
end
1223+
1224+
class ListItemsController < JSONAPI::ResourceController
1225+
end
1226+
12051227
class StoragesController < BaseController
12061228
end
12071229

@@ -2531,6 +2553,14 @@ class RespondentResource < JSONAPI::Resource
25312553
abstract
25322554
end
25332555

2556+
class ListResource < JSONAPI::Resource
2557+
has_many :items, class_name: 'ListItem'
2558+
end
2559+
2560+
class ListItemResource < JSONAPI::Resource
2561+
has_one :list
2562+
end
2563+
25342564
class StorageResource < JSONAPI::Resource
25352565
key_type :string
25362566
primary_key :token

test/integration/routes/routes_test.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,20 @@ def test_routing_author_links_posts_create_not_acts_as_set
205205
{controller: 'api/v5/authors', action: 'create_relationship', author_id: '1', relationship: 'posts'})
206206
end
207207

208+
def test_routing_list_items_index
209+
assert_routing({path: '/list_items', method: :get},
210+
{controller: 'list_items', action: 'index'})
211+
end
212+
213+
def test_routing_list_related_items
214+
assert_routing({path: '/lists/1/items', method: :get},
215+
{controller: 'list_items', action: 'index_related_resources', relationship: 'items', list_id: '1', source: 'lists'})
216+
end
217+
218+
def test_list_items_route_helper_name
219+
assert_equal(list_items_path, '/list_items')
220+
end
221+
208222
#primary_key
209223
def test_routing_primary_key_jsonapi_resources
210224
assert_routing({path: '/iso_currencies/USD', method: :get},

test/test_helper.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,9 @@ class CatResource < JSONAPI::Resource
292292
jsonapi_resources :employees
293293
jsonapi_resources :robots
294294

295+
jsonapi_resources :lists
296+
jsonapi_resources :list_items
297+
295298
namespace :api do
296299
jsonapi_resources :boxes
297300
jsonapi_resources :things

0 commit comments

Comments
 (0)