- Allow and test on Rails 8 #184
- Fix repeatable_attr_input for Bootstrap 5.x. #183
- Use new ActiveRecord enum args in Raisl 7.0+ to avoid Rails 7.2 deprecation notice. #182
- Allow Rails 7.2 in gemspec, no code changes required. #181
- Normalized metadata from ExiftoolCharacterization::Result supports a couple PDF values #180
-
Kithe::Model sub-classes filter_attributes :json_attributes #169
-
New method Kithe::Model.kithe_earlier_after_commit can be used to register an after_commit hook that will fire BEFORE any existing after_commit hooks -- including shrine promotion-related ones -- and will work consistently in any version of Rails including Rails 7.1 with run_after_transaction_callbacks_in_order_defined. #178
- Support Rails 7.1 #172
- Dropped support for Rails < 6, and attr_json < 2. #170
-
Re-use of single shared source tempfile for multiple
add_metadata
andbefore_promotion
hooks, usingShrine.with_file
, so long asShrine.plugin :tempfile
is enabled in local app. #167 -
Helpers for characterization with exiftool #168
Kithe::CreateDerivativesJob
can take arguments for #create_derivatives, and rake taskkithe:create_derivatives
can now be used to enqueue bg jobs, one per asset. #166
- Asset#remove_derivatives should delegate extra options too. #164
- Make Kithe::BlacklightTools::SearchServiceBulkLoad / Kithe::BlacklightTools::BulkLoadingSearchService compatible with Blacklight 8.x. Remains compatible with previous BL as well. #163
- Allow attr_json 2.0, while still allowing 1.0. If you want one or the other specifically, you may want to lock in your own gemfile. https://github.com/jrochkind/attr_json/blob/master/CHANGELOG.md#200
- Severe bug in Single-Table Inheritance fix in 2.7.0 fixed, #156
- A fix for Rails 7 and Kithe::Model Single-Table Inheritance in development-mode. #154
Reverts "Work#members association is ordered by default" from 2.6.0, turns out backwards incompat. #153
- FfmpegExtractJpg defaults to frame_sample_size: false, no frame sampling. It was too RAM risky. #150
-
Fix bug in FfmpegExtractJpg where you couldn't turn off frame sampling. #150
-
Allow Kithe.indexable_settings.writer_settings to be mutated as per docs #151
-
Work#members association is ordered by default, by position column, then created_at. #146 [REVERTED in 2.6.1]
-
Allow remove_derivatives to receive string arg normalized to symbol #147
-
Support Rails 7.0. #137
-
Tools for using a standard shrine derivatives processor with kithe features, including lifecycle management and guard options. #143
-
add Kithe::FfmpegExtractJpg service for extracting frame from video #144
-
FfprobeCharacterization helper class for a/v characterization metadata #139
-
Create an Asset#file_metadata method that delegates to file.metadata for convenience #140
- Avoid making a query on every validation #134
- Allow customization of Solr indexing
batching
mode batch size. #135
-
Doc-only change, update docs fro kithe 2.0 change to define_derivative block parameter,
attacher:
notrecord:
. #124 -
Ruby 3.0 compatibility.
-
Fix nested Kithe::Indexable.index_with calls. #131
-
Spec and doc custom already-working conditional logic within define_derivative. #123
-
Documentation on local over-ride to Kithe::Model#update_index to implement local indexing customization. #132
- Removed hacky workaround to shrine missing func around lazy downloads of originals
when procesing derivatives. Can use shrine func
download:false
introduced in shrine 3.3 instead. #122
- kithe_determine_mime_type plugin keeps using
audio/flac
as in previous versions of marcel, instead ofaudio/x-flac
as in marcel 1.0. #117
-
Fix bug in obj_extract macro for cases of intermediate array values #116
-
avoid deprecated ActiveModel::Error API #118
- Reduce kithe gem release package size by eliminating accidental log files. #114
-
Indexing: Allow configurable solr_id_value_attribute values to correctly Solr delete. #109
-
Kithe::ConfigBase source file moved to ./lib a rails non-auto-loading location, to make it easier to use in non-deprecating and functioning way from a Rails app config or initialization file, which is one of it's main use cases. #112
- Fix default traject logger Rails.logger #98
We aren't aware of anyone other than Science History Institute using kithe 1.x in production, so haven't invested time in making the change notes quite as complete or migration process as painless as if we were. But if you are in this situation please get in touch via GH Issues for guidance.
- use fx gem to so schema.rb can contain pg functions, no need for structure.sql anymore, and consuming apps won't be forced to use structure.sql. They ARE forced to use fx gem's overrides of Rails schema dumping, including some local patches. https://github.com/teoljungberg/fx teoljungberg/fx#53
The main changes in kithe 2.0 are around file attachment handling: upgrading to shrine 3.x, and changing derivatives from custom implementation to be based on shrine 3.x's.
You can also now create a local shrine Uploader class for your local Kithe::Asset subclasses -- and have different ones for different local Asset classes in a local inheritance hieararchy. This lets you access the full power of shrine customization and configuration.
See #81
-
Use
set_shrine_uploader
in your local Asset class(es) to set to a local shrine uploader class. It is strongly recommended this local uploader class subclassKithe::AssetUploader
. -
The default shrine uploader no longer includes remote_url assigning functionality, add
plugin :kithe_accept_remote-url
to your local uploader to restore it. -
The default shrine uploader no longer includes fixity checksum extracting by default, add
plugin :kithe_checksum_signatures
to your local uploader to get back standard fixity checksum signature extraction. -
Kithe derivatives are now defined in your uploader class with
Attacher.define_derivative
instead of your Asset model class withdefine_derivative
. The method is mostly the same though.- but optional keyword argument on your deriv definition block is now
attacher:
instead ofrecord:
, and returns a shrine Attacher instance. You can askattacher.record
to get the model.
- but optional keyword argument on your deriv definition block is now
-
The
derivatives_created?
andmark_created
methods are gone, they werne't used that much and were incompatible with async derivative creation. You can easily check if a particular derivative is present, but there is no longer any way to know if kithe thinks it's "done" with derivative creation. -
It is no longer possible to have individual derivative definitions stored in different storage locations, they are all stored in
:kithe_derivatives
. -
On your Asset models:
- you no longer have a
derviative_for
method, use standard shrine techniques for accessing derivatives. Such asasset.file_url(derivative_key)
,asset.file(derivative_key)
,asset.file_derivatives
. - There is no longer a
derivatives
ActiveRecord association. Derivatives are inside the Asset record itself, using standard shrine technology. - There is no longer a
with_representative_derivatives
scope, it's no longer needed. Intead, you probably just want something like:asset.members.include(:leaf_representative)
, that's enough to do it.
- you no longer have a
-
The
Asset#create_derivatives
,Asset#update_derivative
(s) andAsset#remove_derivatives
methods have been slightly altered in name and signature, but they are all still there, and still can be used to mutate derivatives in concurrency-safe manner. -
See also Migrating Derivatives to Kithe 2.0 guide.