From a23f074c70b496092a0118dcafdfdc98b6ca8557 Mon Sep 17 00:00:00 2001 From: amitsuryavanshi Date: Tue, 17 Apr 2018 15:08:52 +0530 Subject: [PATCH 1/2] allowing for extension of Scoping::Filter class --- lib/jsonapi_compliable/scope.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/jsonapi_compliable/scope.rb b/lib/jsonapi_compliable/scope.rb index 635c9df..0d56219 100644 --- a/lib/jsonapi_compliable/scope.rb +++ b/lib/jsonapi_compliable/scope.rb @@ -93,11 +93,13 @@ def sideload(results, includes) def apply_scoping(opts) @object = JsonapiCompliable::Scoping::DefaultFilter.new(@resource, query_hash, @object).apply - @object = JsonapiCompliable::Scoping::Filter.new(@resource, query_hash, @object).apply unless opts[:filter] == false + @object = filter_class.new(@resource, query_hash, @object).apply unless opts[:filter] == false @object = JsonapiCompliable::Scoping::ExtraFields.new(@resource, query_hash, @object).apply unless opts[:extra_fields] == false @object = JsonapiCompliable::Scoping::Sort.new(@resource, query_hash, @object).apply unless opts[:sort] == false @unpaginated_object = @object @object = JsonapiCompliable::Scoping::Paginate.new(@resource, query_hash, @object, default: opts[:default_paginate]).apply unless opts[:paginate] == false end + + def filter_class; ::JsonapiCompliable::Scoping::Filter; end end end From 04c4de11a465c179c4631fe708f0db01b6ee3f9a Mon Sep 17 00:00:00 2001 From: amitsuryavanshi Date: Mon, 4 Jun 2018 12:53:11 +0530 Subject: [PATCH 2/2] further refactoring on JsonapiCompliable::Scope#apply_scoping --- lib/jsonapi_compliable/scope.rb | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/jsonapi_compliable/scope.rb b/lib/jsonapi_compliable/scope.rb index 0d56219..684846c 100644 --- a/lib/jsonapi_compliable/scope.rb +++ b/lib/jsonapi_compliable/scope.rb @@ -91,15 +91,17 @@ def sideload(results, includes) end end - def apply_scoping(opts) - @object = JsonapiCompliable::Scoping::DefaultFilter.new(@resource, query_hash, @object).apply - @object = filter_class.new(@resource, query_hash, @object).apply unless opts[:filter] == false - @object = JsonapiCompliable::Scoping::ExtraFields.new(@resource, query_hash, @object).apply unless opts[:extra_fields] == false - @object = JsonapiCompliable::Scoping::Sort.new(@resource, query_hash, @object).apply unless opts[:sort] == false - @unpaginated_object = @object - @object = JsonapiCompliable::Scoping::Paginate.new(@resource, query_hash, @object, default: opts[:default_paginate]).apply unless opts[:paginate] == false + def apply_scoping(opts) + add_scoping(nil, JsonapiCompliable::Scoping::DefaultFilter, opts) + add_scoping(:filter, JsonapiCompliable::Scoping::Filter, opts) + add_scoping(:extra_fields, JsonapiCompliable::Scoping::ExtraFields, opts) + add_scoping(:sort, JsonapiCompliable::Scoping::Sort, opts) + add_scoping(:paginate, JsonapiCompliable::Scoping::Paginate, opts, default: opts[:default_paginate]) end - def filter_class; ::JsonapiCompliable::Scoping::Filter; end + def add_scoping(key, scoping_class, opts, default = {}) + @object = scoping_class.new(@resource, query_hash, @object, default).apply unless opts[key] == false + @unpaginated_object = @object unless key == :paginate + end end end