
Security News
Follow-up and Clarification on Recent Malicious Ruby Gems Campaign
A clarification on our recent research investigating 60 malicious Ruby gems.
Гем для кеширования общих данных Rails.
Часто в проектах Rails приходится формировать списки объектов для их дальнейшей обработки фронтендом (например отображение опций в селектах).
Подобные коллекции могут вызываться очень часто. И, чтобы не нагружать БД, лучше их кешировать.
Этот гем предназначен для простого кеширования необходимых данных и получения готовых кешированных коллекций.
Добавить в Gemfile
gem 'common-data-caching'
И выполнить:
bundle
Добавьте вызов common_cache
на моделях, передав обязательную опцию attrs
со списком атрибутов, которые должны быть в закешированной коллекции (id
будет добавлен по умолчанию, добавлять его не обязательно):
class User < ActiveRecord::Base
common_cache attrs: %i[email name]
end
Коллекция кеша будет обновляться после каждого изменения записи модели - создании, обновлении, удалении.
Для получения коллекции кеша общих данных вызовите метод common_data_cache_collection
:
User.common_data_cache_collection
Для получения версий коллекций кеша общих данных вызовите:
CommonDataCaching.versions
При необходимости, чтобы не обновлять кеш при создании или редактировании определенной записи, передайте skip_common_data_caching: true
в качестве аргумента:
User.create(email: "user@example.com", skip_common_data_caching: true)
User.find(1).update(name: "User", skip_common_data_caching: true)
Для применения сортировки, передайте опцию order
:
class User < ActiveRecord::Base
common_cache attrs: %i[email name],
order: 'name desc'
end
Значение опции order
должно соответствовать тем же значениям, которые принимает метод .order
ActiveRecord.
По умолчанию, сортировка осуществляется по id
в направлении ASC
, до тех пор пока не будет передан order
.
Для применения фильтрации/ограничений записей, из которых будет сформирована закешированная коллекция, передайте опцию scope
:
class User < ActiveRecord::Base
common_cache attrs: %i[email name],
scope: proc { where(role: 'admin') }
end
Значение опции scope
должно быть условием where
ActiveRecord, Rails скоупом или их последовательностью, которые необходимо обернуть в proc
.
По умолчанию, фильтрация не применяется, до тех пор пока не будет передан scope
.
Для кеширования разных коллекций в рамках одной модели воспользуйтесь опцией collections
, передав в нее массив объектов, содержимое каждого их которых соответствует стандартным опциям; значение ключа кеша укажите в key
:
class User < ActiveRecord::Base
common_cache collections: [
{
key: 'admin_users',
attrs: %i[email name],
scope: proc { where(role: 'admin') }
},
{
key: 'manager_users',
attrs: [:name],
scope: proc { where(role: 'manager') }
}
]
Для массового обновления всех коллекций воспользутесь Rake таском:
rake common_data_caching:update_cache
Для обновления кеша общих данных при каждом деплое с помощью Capistrano добавьте в Capfile:
require 'common_data_caching/capistrano'
FAQs
Unknown package
We found that common-data-caching demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
A clarification on our recent research investigating 60 malicious Ruby gems.
Security News
ESLint now supports parallel linting with a new --concurrency flag, delivering major speed gains and closing a 10-year-old feature request.
Research
/Security News
A malicious Go module posing as an SSH brute forcer exfiltrates stolen credentials to a Telegram bot controlled by a Russian-speaking threat actor.