-
Notifications
You must be signed in to change notification settings - Fork 526
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
refactor: move module query-methods into collection-decorator #874
base: master
Are you sure you want to change the base?
refactor: move module query-methods into collection-decorator #874
Conversation
|
||
# Configures the strategy used to proxy the query methods, which defaults to `:active_record`. | ||
def strategy | ||
@strategy ||= LoadStrategy.new(Draper.default_query_methods_strategy) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does the name LoadStrategy
still make sense in this new context? Should it be something like QueryMethodStrategy
or something more specific to query methods? I don't have a big opinion here, but it does seem odd.
@brunohkbx can you please rebase your branch on master ? Thank you ! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Decorated collection may be not backed by a DB. These strategies make no sense in that case (see #920).
@@ -72,6 +71,17 @@ def replace(other) | |||
self | |||
end | |||
|
|||
# Proxies missing query methods to the source class if the strategy allows. | |||
def method_missing(method, *args, &block) | |||
return super unless strategy.allowed? method |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm new here, so please forgive my stupid question 🙏
Why do we need any strategy in the first place? Isn't object.respond_to?
enough?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see: it's for methods returning decoratable collections. It's not obvious for everyone, though (see #867).
@@ -72,6 +71,17 @@ def replace(other) | |||
self | |||
end | |||
|
|||
# Proxies missing query methods to the source class if the strategy allows. | |||
def method_missing(method, *args, &block) | |||
return super unless strategy.allowed? method |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
return super unless strategy.allowed? method | |
return super unless object.respond_to? method |
def method_missing(method, *args, &block) | ||
return super unless strategy.allowed? method | ||
|
||
object.send(method, *args, &block).decorate(with: decorator_class, context: context) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
object.send(method, *args, &block).decorate(with: decorator_class, context: context) | |
object.send(method, *args, &block).try(:decorate, with: decorator_class, context: context) |
Description
As we discussed on #868, it makes sense to move this module into CollectionDecorator since it depends upon
decorator_class
andcontext
.References