Skip to content

Conversation

@brunohkbx
Copy link
Contributor

@brunohkbx brunohkbx commented Feb 6, 2020

Description

As we discussed on #868, it makes sense to move this module into CollectionDecorator since it depends upon decorator_class and context.

References

@brunohkbx brunohkbx requested a review from codebycliff February 6, 2020 13:38

# Configures the strategy used to proxy the query methods, which defaults to `:active_record`.
def strategy
@strategy ||= LoadStrategy.new(Draper.default_query_methods_strategy)
Copy link
Collaborator

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.

@n-rodriguez
Copy link
Contributor

@brunohkbx can you please rebase your branch on master ? Thank you !

@Alexander-Senko Alexander-Senko self-requested a review August 30, 2024 09:06
Copy link
Collaborator

@Alexander-Senko Alexander-Senko left a 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).


# Proxies missing query methods to the source class if the strategy allows.
def method_missing(method, *args, &block)
return super unless strategy.allowed? method
Copy link
Collaborator

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?

Copy link
Collaborator

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).


# Proxies missing query methods to the source class if the strategy allows.
def method_missing(method, *args, &block)
return super unless strategy.allowed? method
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
object.send(method, *args, &block).decorate(with: decorator_class, context: context)
object.send(method, *args, &block).try(:decorate, with: decorator_class, context: context)

@Alexander-Senko Alexander-Senko added this to the 5.0 milestone Aug 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants