Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scope related route names in a similar manner to relationship routes #1254

Merged
merged 1 commit into from
May 29, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/jsonapi/link_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -150,12 +150,14 @@ def resource_url_helper_name_from_source(source)

def related_url_helper_name(relationship)
relationship_parts = resource_path_parts_from_class(relationship.parent_resource)
relationship_parts << "related"
relationship_parts << relationship.name
url_helper_name_from_parts(relationship_parts)
end

def singleton_related_url_helper_name(relationship)
relationship_parts = []
relationship_parts << "related"
relationship_parts << relationship.name
relationship_parts += resource_path_parts_from_class(relationship.parent_resource)
url_helper_name_from_parts(relationship_parts)
Expand Down
4 changes: 2 additions & 2 deletions lib/jsonapi/routing_ext.rb
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ def jsonapi_related_resource(*relationship)
match formatted_relationship_name, controller: options[:controller],
relationship: relationship.name, source: resource_type_with_module_prefix(source._type),
action: 'show_related_resource', via: [:get],
as: relationship_name
as: "related/#{relationship_name}"
end

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

protected
Expand Down
30 changes: 30 additions & 0 deletions test/fixtures/active_record.rb
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,14 @@
t.belongs_to :painting
end

create_table :lists, force: true do |t|
t.string :name
end

create_table :list_items, force: true do |t|
t.belongs_to :list
end

# special cases
create_table :storages, force: true do |t|
t.string :token, null: false
Expand Down Expand Up @@ -870,6 +878,14 @@ class Collector < ActiveRecord::Base
belongs_to :painting
end

class List < ActiveRecord::Base
has_many :items, class_name: 'ListItem', inverse_of: :list
end

class ListItem < ActiveRecord::Base
belongs_to :list, inverse_of: :items
end

### CONTROLLERS
class SessionsController < ActionController::Base
include JSONAPI::ActsAsResourceController
Expand Down Expand Up @@ -1202,6 +1218,12 @@ class DoctorsController < JSONAPI::ResourceController
class RespondentController < JSONAPI::ResourceController
end

class ListsController < JSONAPI::ResourceController
end

class ListItemsController < JSONAPI::ResourceController
end

class StoragesController < BaseController
end

Expand Down Expand Up @@ -2531,6 +2553,14 @@ class RespondentResource < JSONAPI::Resource
abstract
end

class ListResource < JSONAPI::Resource
has_many :items, class_name: 'ListItem'
end

class ListItemResource < JSONAPI::Resource
has_one :list
end

class StorageResource < JSONAPI::Resource
key_type :string
primary_key :token
Expand Down
14 changes: 14 additions & 0 deletions test/integration/routes/routes_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,20 @@ def test_routing_author_links_posts_create_not_acts_as_set
{controller: 'api/v5/authors', action: 'create_relationship', author_id: '1', relationship: 'posts'})
end

def test_routing_list_items_index
assert_routing({path: '/list_items', method: :get},
{controller: 'list_items', action: 'index'})
end

def test_routing_list_related_items
assert_routing({path: '/lists/1/items', method: :get},
{controller: 'list_items', action: 'index_related_resources', relationship: 'items', list_id: '1', source: 'lists'})
end

def test_list_items_route_helper_name
assert_equal(list_items_path, '/list_items')
end

#primary_key
def test_routing_primary_key_jsonapi_resources
assert_routing({path: '/iso_currencies/USD', method: :get},
Expand Down
3 changes: 3 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,9 @@ class CatResource < JSONAPI::Resource
jsonapi_resources :employees
jsonapi_resources :robots

jsonapi_resources :lists
jsonapi_resources :list_items

namespace :api do
jsonapi_resources :boxes
jsonapi_resources :things
Expand Down