- #758 -
PaperTrail.config.track_associationsgetter method removed, usetrack_associations?instead. - #723 -
PaperTrail.enabled=now affects all threads - #556 /
#301 -
If you are tracking who is responsible for changes with
whodunnit, be aware that PaperTrail no longer adds theset_paper_trail_whodunnitbefore_filter for you. Please add this before_filter to your ApplicationController to continue recording whodunnit. See the readme for an example. - #683 /
#682 -
Destroy callback default changed to :before to accommodate ActiveRecord 5
option
belongs_to_required_by_defaultand new Rails 5 default.
- #741 / #681 MySQL unicode support in migration generator
- #689 - Rails 5 compatibility
- Added a rails config option:
config.paper_trail.enabled - #503 - Support for reifying belongs_to associations.
- #731 -
Map enums to database values before storing in
object_changescolumn. - #715 - Optimize post-rollback association reset.
- #701 / #699 - Cleaning old versions explicitly preserves the most recent versions instead of relying on database result ordering.
- #635 - A bug where it was not possible to disable PT when using a multi-threaded webserver.
- #584 - Fixed deprecation warning for Active Record after_callback / after_commit
- None
- None
- None
- None
- None
- None
- #636 - Should compile assets without a db connection
- #589 / #588 - Fixes timestamp for "create" versions
This major release adds JSON column support in PostgreSQL, limited support for versioning associations, various new configuration options, and a year's worth of bug fixes. Thanks to everyone who helped test the two betas and two release candidates.
- Using a Rails initializer to reopen PaperTrail::Version or otherwise extend PaperTrail is no longer recommended. An alternative is described in the readme. See paper-trail-gem#557 and paper-trail-gem#492.
- If you depend on the
RSpecorCucumberhelpers, you must require them in your test helper. - #566 - Removed deprecated
methods
paper_trail_onandpaper_trail_off. Usepaper_trail_on!andpaper_trail_off!instead. - #458 - Version metadata
(the
:metaoption) from AR attributes forcreateevents will now save the current value instead ofnil. - #391 -
object_changesvalue should dump toYAMLas a normalHashinstead of anActiveSupport::HashWithIndifferentAccess. - #375 /
#374 /
#354 /
#131 -
Versions are now saved with an
after_callback, instead of abefore_callback. This ensures that the timestamp field for a version matches the corresponding timestamp in the model. 3da1f104-PaperTrail.configandPaperTrail.configureare now identical: both return thePaperTrail::Configinstance and also yield it if a block is provided.
- #525 / #512 - Support for virtual accessors and redefined setter and getter methods.
- #518 - Support for
querying against PostgreSQL's
JSONandJSONBcolumn types viaPaperTrail::VersionConcern#where_objectandPaperTrail::VersionConcern#where_object_changes - #507 -
New option:
:save_changescontrols whether or not to save changes to theobject_changescolumn (if it exists). - #500 - Support for
passing an empty array to the
onoption (on: []) to disable all automatic versioning. - #494 - The install generator will warn the user if the migration they are attempting to generate already exists.
- #484 - Support for
PostgreSQL's
JSONBType for storingobjectandobject_changes. - #439 / #12 - Support for versioning associations (has many, has one, etc.) one level deep.
- #420 - Add
VersionConcern#where_object_changesinstance method; acts as a helper for querying against theobject_changescolumn in versions table. - #416 - Added a
configoption for enabling/disabling utilization ofserialized_attributesforActiveRecord, necessary becauseserialized_attributeshas been deprecated inActiveRecordversion4.2and will be removed in version5.0 - #399 - Add
:dupargument for options hash toreifywhich forces a new model instance. - #394 - Add RSpec matcher
have_a_version_withfor easier testing. - #347 - Autoload
ActiveRecordmodels in via aRails::Enginewhen the gem is used withRails.
- #563 - Fixed a bug in
touch_with_versionso that it will still create a version even when theonoption is, e.g.[:create]. - #541 -
PaperTrail.config.enabledshould be Thread Safe - #451 - Fix
reifymethod in context of model where the base class has a default scope, and the live instance is not scoped within that default scope. - #440 -
versionsassociation should clear/reload after a transaction rollback. - #438 -
ModelKlass.paper_trail_enabled_for_model?should returnfalseifhas_paper_trailhas not been declared on the class. - #404 /
#428 -
model_instance.dupdoes not need to be invoked when examining what the instance looked like before changes were persisted, which avoids issues if a 3rd party has overriden thedupbehavior. Also fixes errors occuring when a user attempts to update the inheritance column on an STI model instance inActiveRecord4.1.x - #427 - Fix
reifymethod in context of model where a column has been removed. - #414 - Fix
functionality
ignoreargument tohas_paper_trailinActiveRecord4. - #413 - Utilize
RequestStore to ensure that
the
PaperTrail.whodunnitis set in a thread safe manner within Rails and Sinatra. - #381 - Fix
irbwarning:can't alias context from irb_context.RspecandCucumberhelpers should not be loaded by default, regardless of whether those libraries are loaded. - #248 - In MySQL, to
prevent truncation, generated migrations now use
longtextinstead oftext. - Methods handling serialized attributes should fallback to the currently set
Serializer instead of always falling back to
PaperTrail::Serializers::YAML.
- #479 - Deprecated
originatormethod, usepaper_trail_originator.
- #479 - Deprecated
originatormethod in favor ofpaper_trail_originatorDeprecation warning informs users that theoriginatorof the methods will be removed in version4.0. (Backported from v4) - Updated deprecation warnings for
Model.paper_trail_onandModel.paper_trail_offto have display correct version number the methods will be removed (4.0)
- #404 / #428 -
Fix errors occuring when a user attempts to update the inheritance column on an STI model instance in
ActiveRecord4.1.x
- #414 - Backport fix for
ignoreargument tohas_paper_trailinActiveRecord4.
- #401 / #406 -
PaperTrail::Versionclass is not loaded via aRails::Engine, even when the gem is used with in Rails. This feature has will be re-introduced in version4.0. - #398 - Only require the
RSpechelper ifRSpec::Coreis required.
This version was yanked from RubyGems and has been replaced by version 3.0.5, which is almost identical, but does not eager load
in the PaperTrail::Version class through a Rails::Engine when the gem is used on Rails since it was causing issues for some users.
- #386 - Fix eager loading of
versionsassociation with custom class name inActiveRecord4.1. - #384 - Fix
VersionConcern#originatorinstance method. - #383 - Make gem compatible with
ActiveRecord::Enum(available inActiveRecord4.1+). - #380 / #377 -
Add
VersionConcern#where_objectinstance method; acts as a helper for querying against theobjectcolumn in versions table. - #373 - Fix default sort order for the
versionsassociation inActiveRecord4.1. - #372 - Use Arel for SQL construction.
- #365 -
VersionConcern#version_atshould returnnilwhen receiving a timestamp that occured after the object was destroyed. - Expand
PaperTrail::VERSIONinto a module, mimicking the form used by Rails to give it some additional modularity & versatility. - Fixed
VersionConcern#indexinstance method so that it conforms to using the primary key for ordering when possible.
- #357 - If a
Versioninstance is reified and then persisted at that state, it's timestamp attributes for update should still gettouched. - #351 / #352 -
PaperTrail::Rails::Controllershould hook into all controller types, and should not get loaded unlessActionControlleris. - #346 -
user_for_paper_trailmethod should accommodate different types for return values fromcurrent_usermethod. - #344 - Gem is now tested against
MySQLandPostgreSQLin addition toSQLite. - #317 / #314 -
versionsshould default to ordering via the primary key if it is an integer to avoid timestamp comparison issues. PaperTrail::Cleaner.clean_versions!should group versions byPaperTrail.timestamp_fieldwhen deciding which ones to keep / destroy, instead of always grouping by thecreated_atfield.- If a
Versioninstance is reified and then persisted at that state, it's source version (model_instance#version_association_name, usuallymodel_instance#version) will get cleared since persisting it causes it to become the live instance. - If
destroyactions are tracked for a versioned model, invokingdestroyon the model will cause the corresponding version that gets generated to be assigned as the source version (model_instance#version_association_name, usuallymodel_instance#version).
- #340 - Prevent potential error encountered when using the
InstallGeneratorwith Rails4.1.0.rc1. - #334 - Add small-scope
whodunnitmethod toPaperTrail::Model::InstanceMethods. - #329 - Add
touch_with_versionmethod toPaperTrail::Model::InstanceMethods, to allow for generating a version whiletouching a model. - #328 / #326 /
#307 -
Model.paper_trail_enabled_for_model?andmodel_instance.without_versioningis now thread-safe. - #316 -
user_for_paper_trailshould default tocurrent_user.try(:id)instead ofcurrent_user(ifcurrent_useris defined). - #313 - Make the
Rails::Controllerhelper compatible withActionController::APIfor compatibility with therails-apigem. - #312 - Fix RSpec
with_versioningclass level helper method. model_instance.without_versioningnow yields themodel_instance, enabling syntax like this:model_instance.without_versioning { |obj| obj.update_attributes(:name => 'value') }.- Deprecated
Model.paper_trail_onandModel.paper_trail_offin favor of bang versions of the methods. Deprecation warning informs users that the non-bang versions of the methods will be removed in version4.0
- #305 -
PaperTrail::VERSIONshould be loaded at runtime. - #295 - Explicitly specify table name for version class when
querying attributes. Prevents
AmbiguousColumnerrors on certainJOINstatements. - #289 - Use
ActiveSupport::Concernfor implementation of base functionality onPaperTrail::Versionclass. Increases flexibility and makes it easier to use custom version classes with multipleActiveRecordconnections. - #288 - Change all scope declarations to class methods on the
PaperTrail::Versionclass. Fixes usability whenPaperTrail::Version.abstract_class? == true. - #287 - Support for
PostgreSQL's JSON Type for storing
objectandobject_changes. - #281 -
Rails::Controllerhelper will returnfalsefor thepaper_trail_enabled_for_controllermethod ifPaperTrail.enabled? == false. - #280 - Don't track virtual timestamp attributes.
- #278 / #272 - Make RSpec and Cucumber helpers usable with Spork and Zeus.
- #273 - Make the
onlyandignoreoptions acceptHasharguments; allows for conditional tracking. - #264 - Allow unwrapped symbol to be passed in to the
onoption. - #224/#236 - Fixed compatibility with ActsAsTaggableOn.
- #235 - Dropped unnecessary secondary sort on
versionsassociation. - #216 - Added helper & extension for RSpec, and helper for Cucumber.
- #212 - Added
PaperTrail::Cleanermodule, useful for discarding draft versions. - #207 - Versions for
'create'events are now created withcreate!instead ofcreateso that an exception gets raised if it is appropriate to do so. - #199 - Rails 4 compatibility.
- #165 - Namespaced the
Versionclass under thePaperTrailmodule. - #119 - Support for Sinatra; decoupled gem from
Rails. - Renamed the default serializers from
PaperTrail::Serializers::YamlandPaperTrail::Serializers::Jsonto the capitalized forms,PaperTrail::Serializers::YAMLandPaperTrail::Serializers::JSON. - Removed deprecated
set_whodunnitmethod from Rails Controller scope.
- #228 - Refactored default
user_for_paper_trailmethod implementation so thatcurrent_useronly gets invoked if it is defined. - #219 - Fixed issue where attributes stored with
nilvalue might not get reified properly depending on the way the serializer worked. - #213 - Added a
version_limitoption to thePaperTrail::Configoptions that can be used to restrict the number of versions PaperTrail will store per object instance. - #187 - Confirmed JRuby support.
- #174 - The
eventfield on the versions table can now be customized.
- #206 - Fixed Ruby 1.8.7 compatibility for tracking
object_changes. - #200 - Fixed
next_versionmethod so that it returns the live model when called on latest reified version of a model prior to the live model. - #197 - PaperTrail now falls back on using YAML for serialization of
serialized model attributes for storage in the
objectandobject_changescolumns in theVersiontable. This fixes compatibility forRails 3.0.xfor projects that employ theserializedeclaration on a model. - #194 - A JSON serializer is now included in the gem.
- #192 -
object_changesshould store serialized representation of serialized attributes forcreateactions (in addition toupdateactions, which had already been patched by #180). - #190 - Fixed compatibility with SerializedAttributes gem.
- #189 - Provided support for a
configureblock initializer. - Added
settermethod for theserializerconfig option.
- #183 - Fully qualify the
Versionclass to help prevent namespace resolution errors within other gems / plugins. - #180 - Store serialized representation of serialized attributes
on the
objectandobject_changescolumns in theVersiontable. - #164 - Allow usage of custom serializer for storage of object attributes.
- #181/#182 -
Controller metadata methods should only be evaluated when
paper_trail_enabled_for_controller == true. - #177/#178 -
Factored out
version_keyinto it's own method to preventConnectionNotEstablishederror from getting thrown in instances wherehas_paper_trailis declared on class prior to ActiveRecord establishing a connection. - #176 - Force metadata calls for attributes to use current value if attribute value is changing.
- #173 - Update link to diff-lcs.
- #172 - Save
object_changeson creation. - #168 - Respect conditional
:ifor:unlessarguments to thehas_paper_trailmethod fordestroyevents. - #167 - Fix
originatormethod so that it works with subclasses and STI. - #160 - Fixed failing tests and resolved out of date dependency issues.
- #157 - Refactored
class_attributenames on theClassMethodsmodule for names that are not obviously pertaining to PaperTrail to prevent method name collision.