versioned
associates an ActiveRecord model with many versions. When
the object is updated, a new version containing the changes is created.
There are several options available to the versioned
method,
most of which are passed to the has_many
association itself:
:class_name
: The class name of the version model to use for
the association. By default, this is set to “VestalVersions::Version”,
representing the built-in version class. By specifying this option, you can
override the version class, to include custom version behavior. It's
recommended that a custom version inherit from VestalVersions::Version.
:dependent
: Also common to has_many
associations,
this describes the behavior of version records when the parent object is
destroyed. This defaults to :delete_all, which will permanently remove all
associated versions without triggering any destroy
callbacks. Other options are :destroy which removes the associated versions
with callbacks, or :nullify which leaves the version
records in the database, but dissociates them from the parent object by
setting the foreign key columns to nil
values.
:except
: An update will trigger version creation as long as at
least one column outside those specified here was updated. Also, upon
version creation, the columns specified here will be excluded from the
change history. This is useful when dealing with unimportant, constantly
changing, or sensitive information. This option accepts a symbol, string or
an array of either, representing column names to exclude. It is completely
optional and defaults to nil
, allowing all columns to be
versioned. This option is also ignored if the only
option is
used.
:extend
: This option allows you to extend the
has_many
association proxy with a module or an array of
modules. Any methods defined in those modules become available on the
versions
association. The VestalVersions::Versions module is essential to
the functionality of vestal_versions
and so is prepended to
any additional modules that you might specify here.
:if
: Accepts a symbol, a proc or an array of either to be
evaluated when the parent object is updated to determine whether a new
version should be created. to_proc
is called on any symbols
given and the resulting procs are called, passing in the object itself. If
an array is given, all must be evaluate to true
in order for a
version to be created.
:only
: An update will trigger version creation as long as at
least one updated column falls within those specified here. Also, upon
version creation, only the columns specified here will be included in the
change history. This option accepts a symbol, string or an array of either,
representing column names to include. It is completely optional and
defaults to nil
, allowing all columns to be versioned. This
option takes precedence over the except
option if both are
specified.
:unless
: Accepts a symbol, a proc or an array of either to be
evaluated when the parent object is updated to determine whether version
creation should be skipped. to_proc
is called on any symbols
given and the resulting procs are called, passing in the object itself. If
an array is given and any element evaluates as true
, the
version creation will be skipped.
# File lib/vestal_versions.rb, line 77 def versioned(options = {}, &block) return if versioned? include Options include Changes include Creation include Users include Reversion include Reset include Conditions include Control include Tagging include Reload prepare_versioned_options(options) has_many :versions, options, &block end