Class: Farce::LeaseMap

Inherits:
Abstract::LeaseMap show all
Includes:
Shareable::Unfreezable
Defined in:
lib/farce/lease_map.rb

Overview

A Ractor-shareable map that moves each resource on checkout and checkin.

Examples:

Updating independently leased resources

leases = Farce::LeaseMap.new { { primary: [], replica: [] } }
leases.checkout(:primary) { |items| items << :updated }
leases.checkout(:primary, &:dup) # => [:updated]

Automatically checking out resources as they are accessed

leases = Farce::LeaseMap.new { { primary: [], replica: [] } }

leases.auto_lease do
  leases[:primary] << :updated
  leases[:replica] << :replicated
  leases[:primary] << :verified # Reuses the same checkout
end

# Both resources are checked back in when the block exits, even on an exception.
leases.available?(:primary) # => true
leases.checkout(:primary, &:dup) # => [:updated, :verified]

Method Summary

Methods included from Shareable

#initialize, #ractor_shareable?

Methods inherited from Abstract::LeaseMap

#[], #[]=, #auto_lease, #available?, #checked_out?, #checkin, #checkout, #clear, #compare_keys_by_identity?, #compare_values_by_identity?, #delete, #duplicable?, #each, #each_key, #each_value, #fetch, #getkey, #initialize, #key?, #keys, #lease_for, #owned?, #shareable_keys?, #shareable_values?, #size, #store_if_absent, #to_a, #to_h, #try_checkout, #values

Methods inherited from Abstract::Map

#[], #[]=, #as_extended_json, #as_json, #assert_valid_keys, #assoc, #bson_type, #clear, #compare_by_identity?, #compare_keys_by_identity?, #compare_values_by_identity?, #deconstruct_keys, #delete, #dig, #each, #each_key, #each_pair, #each_value, #empty?, #fetch, #fetch_values, #getkey, #has_key?, #key, #key?, #keys, #length, #rassoc, #shareable_keys?, #shareable_values?, #size, #store, #store_if_absent, #to_a, #to_bson, #to_bson_normalized_value, #to_cbor, #to_h, #to_hash, #to_json, #to_msgpack, #to_query, #to_s, #value?, #values_at, #weak_keys?, #weak_values?