Class: Shrine::Plugins::KithePromotionDirectives

Inherits:
Object
  • Object
show all
Defined in:
lib/shrine/plugins/kithe_promotion_directives.rb

Overview

This adds some features around shrine promotion that we found useful for dealing with backgrounding promotion.

By default the kithe setup:

  • Does “promotion” in background job – metadata extraction, and moving file from ‘cache’ to ‘store’

  • Runs ActiveSupport-style callbacks around promotion (before_promotion, after_promotion)

  • Uses these callbacks to make sure we extract metadata on promotion (which shrine doesn’t do by default)

  • Uses these callbacks to trigger our custom create_derivatives code after promotion

There are times you want to customize these life cycle actions, either disabling them, or switching them from a background job to happen inline in the foreground. Some use cases for this are: 1) in automated testing; 2) when you are running a batch job (eg batch import), you might want to disable some expensive things per-record to instead do them all in batch at the end, or run them inline to keep from clogging up your bg job queue, and have better ‘backpressure’.

We provide something we call “promotion directives” to let you customize these. You can set them on a shrine Attacher; or on a Kithe ‘Asset` model individually, or globally on the class.

## Directives

  • ‘promote`: default `:background`; set to `:inline` to do promotion inline instead of a background

    job, or `false` to make promotion not happen automatically at all.
    
  • ‘skip_callbacks`: default `false`, set to `true` to disable our custom promotion callbacks

    entirely, including disabling our default callbacks such as derivative creation and
    promotion metadata extraction.
    
  • ‘create_derivatives`: default `background` (create a separate bg job). Also can be `false`

    to disable, or `inline` to create derivatives 'inline' when the after_promotion hook
    occurs -- which could already be in a bg job depending on `promote` directive!
    
  • ‘delete`: should deletion of shrine attachment happen in a bg job? Default `:background`,

    can also be `false` (can't think of a good use case), or `:inline`.
    

# Examples of setting

## Globally on Kithe::Asset

Useful for batch processing or changing test defaults.

Kithe::Asset.promotion_directives = { promote: :inline, create_derivatives: false }

## On a Kithe::Asset individual model

asset = Kithe:Assst.new
asset.set_promotion_directives(create_derivatives: :inline)

(Aggregates on top of whatever was set at class level of previously set with ‘Asset#set_promotion_directives)`, does not replace previously settings but merges into them!

## Directly on a shrine attacher

some_asset.file = some_assignable_file
some_asset.file_attacher.set_promotion_directives(skip_callbacks: true)
some_asset.save!

(Aggregates on top of whatever was already set, merges into it, does not replace!)

## Checking current settings

some_asset.promotion_directives

or

some_asset.file_attacher.promotion_directives

Defined Under Namespace

Modules: AttacherMethods, AttachmentMethods