The project is in a healthy, maintained state
ActiveModel::Caching is a versatile gem for managing structured, temporary data using a caching backend, typically Rails cache for Rails applications. This gem provides an easy-to-use API for storing, retrieving, and manipulating data structures like scalars, lists, and JSON, making it simple to handle transient data without adding extra dependencies.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 0.1
>= 3.1.2
>= 1.2
>= 2.8
 Project Readme

ActiveModel::Caching

A library providing easy-to-use object-level caching methods for various data types in a Ruby on Rails application, allowing you to cache different attribute types directly on your models.

Installation

Add this line to your application's Gemfile:

gem 'activemodel-caching'

Then execute:

$ bundle install

Configuration

Configure the gem in an initializer:

ActiveModel::Caching.setup do |config|
  config.cache_store = Rails.cache # Defaults to Rails.cache if Rails is defined, otherwise to memory store
  config.global_id_app = 'MyApp'   # Defaults to GlobalID.app if present, otherwise to Rails.application.name if Rails is defined
end

Usage

Include the module in your class:

class User
  include ActiveModel::Caching

  cache_string :session_token
  cache_integer :view_count
  # ... etc
end

Available Cache Types

Basic Types

cache_string

Caches a string value.

cache_string :session_token
# Generates:
# - session_token
# - session_token=

cache_integer

Caches an integer value.

cache_integer :view_count
# Generates:
# - view_count
# - view_count=

cache_decimal

Caches a decimal value.

cache_decimal :account_balance
# Generates:
# - account_balance
# - account_balance=

cache_datetime

Caches a datetime value.

cache_datetime :last_login
# Generates:
# - last_login
# - last_login=

cache_flag / cache_boolean

Caches a boolean value.

cache_flag :is_active
# or
cache_boolean :is_verified
# Generates:
# - is_active
# - is_active=

cache_float

Caches a float value.

cache_float :average_rating
# Generates:
# - average_rating
# - average_rating=

Complex Types

cache_enum

Caches an enum value, storing the value among defined options.

cache_enum :status, %w[active inactive suspended]
# Generates:
# - status
# - status=

cache_json

Caches a JSON value.

cache_json :user_preferences
# Generates:
# - user_preferences
# - user_preferences=

cache_hash

Caches a hash value.

cache_hash :settings
# Generates:
# - settings
# - settings=

Collections

cache_list

Caches an ordered list of values, maintaining order and optional limit.

cache_list :recent_posts, limit: 5
# Generates:
# - recent_posts
# - add_to_recent_posts
# - remove_from_recent_posts

cache_unique_list

Caches a unique list of values, maintaining uniqueness and optional limit.

cache_unique_list :favorite_articles, limit: 10
# Generates:
# - favorite_articles
# - add_to_favorite_articles
# - remove_from_favorite_articles

cache_set

Caches a set of unique values with optional limit.

cache_set :tags, limit: 5
# Generates:
# - tags
# - add_to_tags
# - remove_from_tags

cache_ordered_set

Caches an ordered set of values, maintaining order and optional limit.

cache_ordered_set :recent_views, limit: 10
# Generates:
# - recent_views
# - add_to_recent_views
# - remove_from_recent_views

Special Types

cache_slots

Caches a limited number of available "slots" for resources like seats or reservations.

cache_slots :seats, available: 10
# Generates:
# - seats
# - available_seats?
# - reserve_seats!
# - release_seats!
# - reset_seats!

cache_slot

Caches a single slot (binary available/taken resource).

cache_slot :parking_space
# Generates:
# - parking_space
# - available_parking_space?
# - reserve_parking_space!
# - release_parking_space!
# - reset_parking_space!

cache_counter

Caches a counter value.

cache_counter :likes_count
# Generates:
# - likes_count
# - increment_likes_count
# - decrement_likes_count
# - reset_likes_count

cache_limiter

Caches a limiter value with a maximum allowed count.

cache_limiter :api_requests, limit: 100
# Generates:
# - api_requests
# - increment_api_requests
# - reset_api_requests

Options

All cache methods accept an optional expires_in parameter:

cache_string :session_token, expires_in: 1.hour
cache_counter :daily_visits, expires_in: 1.day

Contributing

Bug reports and pull requests are welcome at https://github.com/EmCousin/activemodel-caching.

License

This gem is available as open source under the terms of the MIT License.