Skip to content

Commit 2a7ffdf

Browse files
authored
Merge pull request #779 from cerebris/fix_related_resources_context
Fixes missing context on show_related_resources
2 parents f0533fb + 8a467c5 commit 2a7ffdf

3 files changed

Lines changed: 35 additions & 0 deletions

File tree

lib/jsonapi/processor.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ def show_related_resources
148148
source_resource ||= source_klass.find_by_key(source_id, context: context, fields: fields)
149149

150150
related_resources = source_resource.public_send(relationship_type,
151+
context: context,
151152
filters: filters,
152153
sort_criteria: sort_criteria,
153154
paginator: paginator,

test/controllers/controller_test.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3448,6 +3448,23 @@ def test_get_related_resources
34483448
}, json_response)
34493449
end
34503450

3451+
def test_get_related_resources_filtered
3452+
$test_user = Person.find(1)
3453+
get :get_related_resources, params: {moon_id: '1', relationship: 'craters', source: "api/v1/moons", filter: {description: 'Small crater'}}
3454+
assert_response :success
3455+
assert_hash_equals({
3456+
data: [
3457+
{
3458+
id:"A4D3",
3459+
type:"craters",
3460+
links:{self: "http://test.host/api/v1/craters/A4D3"},
3461+
attributes:{code: "A4D3", description: "Small crater"},
3462+
relationships:{moon: {links: {self: "http://test.host/api/v1/craters/A4D3/relationships/moon", related: "http://test.host/api/v1/craters/A4D3/moon"}}}
3463+
}
3464+
]
3465+
}, json_response)
3466+
end
3467+
34513468
def test_show_relationship
34523469
get :show_relationship, params: {crater_id: 'S56D', relationship: 'moon'}
34533470

test/fixtures/active_record.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,15 +662,27 @@ class BreedsController < JSONAPI::ResourceController
662662
end
663663

664664
class PlanetsController < JSONAPI::ResourceController
665+
def context
666+
{current_user: $test_user}
667+
end
665668
end
666669

667670
class PlanetTypesController < JSONAPI::ResourceController
671+
def context
672+
{current_user: $test_user}
673+
end
668674
end
669675

670676
class MoonsController < JSONAPI::ResourceController
677+
def context
678+
{current_user: $test_user}
679+
end
671680
end
672681

673682
class CratersController < JSONAPI::ResourceController
683+
def context
684+
{current_user: $test_user}
685+
end
674686
end
675687

676688
class LikesController < JSONAPI::ResourceController
@@ -1069,6 +1081,11 @@ class CraterResource < JSONAPI::Resource
10691081

10701082
has_one :moon
10711083

1084+
filter :description, apply: -> (records, value, options) {
1085+
fail "context not set" unless options[:context][:current_user] != nil && options[:context][:current_user] == $test_user
1086+
records.where(:description => value)
1087+
}
1088+
10721089
def self.verify_key(key, context = nil)
10731090
key && String(key)
10741091
end

0 commit comments

Comments
 (0)