Spec-Zone.ru › Ruby on Rails 8.1

класс ActiveStorage::FixtureSet

Родительский класс:
Object
Включенные модули:
ActiveSupport::Testing::FileFixtures, ActiveRecord::SecureToken

FixtureSet хранилища Active Storage

Фикстуры — это способ упорядочить данные, на которых вы хотите проводить тестирование; проще говоря, это примеры данных.

Подробнее о фикстурах читайте в документации ActiveRecord::FixtureSet.

YAML

Как и другие модели на основе Active Record, записи ActiveStorage::Attachment и ActiveStorage::Blob наследуются от экземпляров ActiveRecord::Base и поэтому могут быть заполнены с помощью фикстур.

Рассмотрим гипотетический класс модели Article, связанные с ним данные фикстур, а также данные фикстур для связанных записей ActiveStorage::Attachment и ActiveStorage::Blob:

# app/models/article.rb
class Article < ApplicationRecord
  has_one_attached :thumbnail
end
# fixtures/active_storage/blobs.yml
first_thumbnail_blob: <%= ActiveStorage::FixtureSet.blob filename: "first.png" %>
# fixtures/active_storage/attachments.yml
first_thumbnail_attachment:
  name: thumbnail
  record: first (Article)
  blob: first_thumbnail_blob

При обработке Active Record добавит записи в базу данных для каждой записи фикстуры и обеспечит целостность связи Active Storage.

Открытые методы класса

blob (filename:, **attributes) Показать исходный код
# File activestorage/lib/active_storage/fixture_set.rb, line 66
def self.blob(filename:, **attributes)
  new.prepare Blob.new(filename: filename, key: generate_unique_secure_token), **attributes
end

Сформировать представление атрибутов экземпляра ActiveStorage::Blob в формате YAML, найти файл относительно каталога, указанного в ActiveSupport::Testing::FileFixtures.file_fixture, и загрузить файл в Service

Примеры

# tests/fixtures/active_storage/blobs.yml
second_thumbnail_blob: <%= ActiveStorage::FixtureSet.blob(
  filename: "second.svg",
) %>

third_thumbnail_blob: <%= ActiveStorage::FixtureSet.blob(
  filename: "third.svg",
  content_type: "image/svg+xml",
  service_name: "public"
) %>

Открытые методы экземпляра

prepare (instance, **attributes) Показать исходный код
# File activestorage/lib/active_storage/fixture_set.rb, line 70
def prepare(instance, **attributes)
  io = file_fixture(instance.filename.to_s).open
  instance.unfurl(io)
  instance.assign_attributes(attributes)
  instance.upload_without_unfurling(io)

  instance.attributes.transform_values { |value| value.is_a?(Hash) ? value.to_json : value }.compact.to_json
end

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API