-
Notifications
You must be signed in to change notification settings - Fork 78
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
Add last
to lists
#97
Conversation
I find this implementation already too complex. This should not be receiving user input, so I don't think we should be even calling |
For simplicity, this does not strictly respect Array#last when nil or false is passed, returning the last element instead of raising a TypeError. It also doesn't coerce the parameter into an int with to_int like Array#last does.
301d83e
to
02c42fa
Compare
I removed the |
Drop defensive programming
Drop defensive tests
* main: (21 commits) Bump version for 1.4.0 Update nokogiri for compatibility Revert "Improved version of UniqueList: OrderedSet (rails#76)" (rails#111) Add `last` to lists (rails#97) Improved version of UniqueList: OrderedSet (rails#76) Return Time objects instead of deprecated DateTime (rails#106) Fix possible deserialization of untrusted data Typecast return of Set#take (rails#105) Declare Active Model dependency (rails#107) Address LogSubscriber deprecation (rails#98) Account for time zones in DateTime serializations (rails#102) Add sample to set (rails#100) Bump version for 1.3.0 Allow Redis 5.x Add ltrim to lists Coalesce "current pipeline or redis" into the redis method itself Pefer a thread_mattr_accessor over a thread local variable Delete list of keys in batch (rails#90) Use a thread-local variable for pipeline Revert "Use block parameter to pipeline in Redis#multi (rails#68)" ...
…tialize * origin/main: (22 commits) Add kredis_ordered_set for OrderedSet usage in models Add a development console Bump version for 1.5.0 Fix ordered set prepend bug (rails#115) Unique list with sorted set (rails#114) Eliminating Ruby Warnings (rails#112) CI against Redis 7, Ruby 3.1, and Ruby 3.2 (rails#113) Bump version for 1.4.0 Update nokogiri for compatibility Revert "Improved version of UniqueList: OrderedSet (rails#76)" (rails#111) Add `last` to lists (rails#97) Improved version of UniqueList: OrderedSet (rails#76) Return Time objects instead of deprecated DateTime (rails#106) Fix possible deserialization of untrusted data Typecast return of Set#take (rails#105) Declare Active Model dependency (rails#107) Address LogSubscriber deprecation (rails#98) Account for time zones in DateTime serializations (rails#102) Add sample to set (rails#100) Bump version for 1.3.0 ...
This adds support for
last
for lists. Bothlast
andlast(n)
are supported.Because Ruby doesn't provide a great way to replicate the implicit conversions (
Integer.try_convert
exists in Ruby 3.1, but we'd still need to generate the error message manually because it returnsnil
instead of raising theTypeError
), some edge cases of the implementation ofArray#last
are not replicated:[].last(nil)
raises aTypeError
, whereas we just fail withundefined method `to_int' for nil:NilClass (NoMethodError)
[].last(object)
whereobject.to_int
doesn't return anInteger
raises aTypeError
, whereas we will call==
and<
onobject
, and the results may be unexpected (though that is a really edgy case).The first commit is really the most straightforward implementation, and we may not need the second one if we don't care about the edge case of
nil
orfalse
being passed and expecting an exception. I think in most caseslast(n)
is called with a literal value, so it's fine.