Class: Accessory::Accessors::LastAccessor
- Inherits:
-
Accessory::Accessor
- Object
- Accessory::Accessor
- Accessory::Accessors::LastAccessor
- Defined in:
- lib/accessory/accessors/last_accessor.rb
Overview
Traverses into the “last” element within an Enumerable
, using #last
.
This accessor can be preferable to SubscriptAccessor for objects that are not subscriptable, e.g. Range
.
Aliases
-
Accessory::Access::FluentHelpers#last (included in Lens and BoundLens)
Default constructor used by predecessor accessor
-
Array.new
Instance Method Summary collapse
-
#get(data) ⇒ Object
Feeds
data.last
down the accessor chain, returning the result. -
#get_and_update(data) ⇒ Array
Finds
data.last
, feeds it down the accessor chain, and overwrites the stored value with the returned result.
Methods inherited from Accessory::Accessor
Instance Method Details
#get(data) ⇒ Object
Feeds data.last
down the accessor chain, returning the result.
39 40 41 42 43 44 45 46 47 |
# File 'lib/accessory/accessors/last_accessor.rb', line 39 def get(data) value = traverse_or_default(data) if block_given? yield(value) else value end end |
#get_and_update(data) ⇒ Array
Finds data.last
, feeds it down the accessor chain, and overwrites the stored value with the returned result.
If :pop
is returned from the accessor chain, the stored value will be removed using data.delete_at(-1)
.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/accessory/accessors/last_accessor.rb', line 57 def get_and_update(data) old_value = traverse_or_default(data) case yield(old_value) in [:clean, result, _] [:clean, result, data] in [:dirty, result, new_value] if data.respond_to?(:"last=") data.last = new_value else data[-1] = new_value end [:dirty, result, data] in :pop data.delete_at(-1) [:dirty, old_value, data] end end |