fix(#1975): Allow to use before/after/rescue_from
methods in any order when using mount
#2384
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR tries to "fix" the issue described in #1975 .
Right now, as we can read in our README, declarations as
before/after/rescue_from
must be placed beforemount
in a case where they should be inherited.However, I think this behavior arises from the existing implementation rather than being an intentional design. This occurs because when the
mount
method is invoked, a newEndpoint
instance is generated, inheriting the previously registeredbefore/after/rescue_from
methods. However, if additionalbefore/after/rescue_from
methods are executed after themount
operation, the mounted endpoints remain unrefreshed.Considering that:
Grape::API
class, it is stored in the@setup
variable in the sequence in which it was executed.My proposal to address this issue is:
before/after/rescue_from
(in fact, any method, not limited to these), verify whether there have been precedingmount
method calls for this particularGrape::API
class stored within the@setup
variable.By doing so, at the end of this process, all mounted endpoints will inherit all the executed methods within the
Grape::API
scope.