Accept a collection in fresh_when and stale?#18374
Conversation
There was a problem hiding this comment.
If you already check respond_to :maximum, then do you still need records.try here?
There was a problem hiding this comment.
@egilburg I had doubts about this too.
The reason why the code is written like that is: what if collection has a :maximum with a different arity than one? For instance:
class Collection
def maximum
100
end
endIn this case, I wouldn't want an ArgumentError raised… simply caching wouldn't work.
What do you think? Would you rewrite this type of check in a different way?
There was a problem hiding this comment.
If a developer overrides a system method and changes the method signature, they are just asking for trouble :/
There was a problem hiding this comment.
Besides, try doesn't handle arity differences anyways:
'asdf'.try(:gsub)
ArgumentError: wrong number of arguments (0 for 1..2)ab762c0 to
c0ea4fb
Compare
c0ea4fb to
bd30e6d
Compare
|
Good morning @rafaelfranca ☀️ I think that's something that would help me and other developers too, since combining
|
There was a problem hiding this comment.
record_or_collection_or_options this is getting out of hand =).
I would say this is a good opportunity to change the options passed to conditional_get to use kwargs! As far as I can tell we always validate by :etag, :last_modified, :public, :template , so those should be the args!
I also would say that refactor should happen first, and then we come back to evaluate this PR.
|
@claudiob , wanna rebase this on latest master and try again? |
The methods `fresh_when` and `stale?` from ActionController::ConditionalGet
accept a single record as a short form for a hash. For instance
```ruby
def show
@Article = Article.find(params[:id])
fresh_when(@Article)
end
```
is just a short form for:
```ruby
def show
@Article = Article.find(params[:id])
fresh_when(etag: @Article, last_modified: @article.created_at)
end
```
This commit extends `fresh_when` and `stale?` to also accept a collection
of records, so that a short form similar to the one above can be used in
an `index` action. After this commit, the following code:
```ruby
def index
@Article = Article.all
fresh_when(etag: @articles, last_modified: @articles.maximum(:created_at))
end
```
can be simply written as:
```ruby
def index
@Article = Article.all
fresh_when(@articles)
end
```
bd30e6d to
050fda0
Compare
|
@arthurnn Done… now we can review 🎀 |
|
Looks good. |
Accept a collection in fresh_when and stale?
|
nice!! code looks much better now! |
There was a problem hiding this comment.
Shouldn't this be maximum(:updated_at)?
The methods
fresh_whenandstale?fromActionController::ConditionalGetaccept a single record as a short form for a hash (see docs). For instance:is just a short form for:
This commit extends
fresh_whenandstale?to also accept a collection of records, so that a short form similar to the one above can be used in anindexaction.After this commit, the following code:
can be simply written as: