Module: TypedEAV::Versioned
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/typed_eav/versioned.rb
Overview
Mixin that opts a host entity into Phase 04 versioning AFTER it has
already called has_typed_eav. Equivalent in effect to passing
versioned: true directly to has_typed_eav, but useful for:
- Codebases that group versioning concerns separately from the
`has_typed_eav` macro (e.g., audited models in a `Auditable`
mixin pattern).
- Apps that conditionally include versioning via Rails initializers
based on environment (`include TypedEAV::Versioned if Rails.env.production?`).
Usage
class Contact < ActiveRecord::Base
has_typed_eav scope_method: :tenant_id, types: %i[text integer]
include TypedEAV::Versioned
end
The order matters: has_typed_eav first, include TypedEAV::Versioned
second. The concern's included hook re-registers the entity with
versioned: true, preserving the existing types: restriction by
reading the current Registry entry. If has_typed_eav was not called
first, the included hook raises ArgumentError with a clear message.
Why post-has_typed_eav (not standalone): has_typed_eav sets up
the has_many :typed_values association, defines typed_eav_scope /
typed_eav_parent_scope accessors, and includes the InstanceMethods
mixin. Without that infrastructure, Phase 04 versioning has nothing
to version — the host model can't even hold typed values. So
Versioned is a post-step, not a replacement (Scout §2 confirmed
this design).
Equivalent to has_typed_eav versioned: true
The two forms produce identical Registry state:
has_typed_eav versioned: true
# OR
has_typed_eav
include TypedEAV::Versioned
The kwarg form is preferred for new code (one declaration, less to remember). The concern form is for codebases with established mixin-based feature wiring conventions.