paper_trail 5.2.3 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/generators/paper_trail/install/USAGE +3 -0
- data/lib/generators/paper_trail/install/install_generator.rb +75 -0
- data/lib/generators/paper_trail/{templates/add_object_changes_to_versions.rb → install/templates/add_object_changes_to_versions.rb.erb} +1 -1
- data/lib/generators/paper_trail/install/templates/create_versions.rb.erb +36 -0
- data/lib/generators/paper_trail/migration_generator.rb +38 -0
- data/lib/generators/paper_trail/update_item_subtype/USAGE +4 -0
- data/lib/generators/paper_trail/update_item_subtype/templates/update_versions_for_item_subtype.rb.erb +85 -0
- data/lib/generators/paper_trail/update_item_subtype/update_item_subtype_generator.rb +17 -0
- data/lib/paper_trail.rb +82 -130
- data/lib/paper_trail/attribute_serializers/attribute_serializer_factory.rb +27 -0
- data/lib/paper_trail/attribute_serializers/cast_attribute_serializer.rb +15 -44
- data/lib/paper_trail/attribute_serializers/object_attribute.rb +2 -0
- data/lib/paper_trail/attribute_serializers/object_changes_attribute.rb +2 -0
- data/lib/paper_trail/cleaner.rb +3 -1
- data/lib/paper_trail/compatibility.rb +51 -0
- data/lib/paper_trail/config.rb +11 -49
- data/lib/paper_trail/events/base.rb +323 -0
- data/lib/paper_trail/events/create.rb +32 -0
- data/lib/paper_trail/events/destroy.rb +42 -0
- data/lib/paper_trail/events/update.rb +60 -0
- data/lib/paper_trail/frameworks/active_record.rb +2 -1
- data/lib/paper_trail/frameworks/active_record/models/paper_trail/version.rb +8 -3
- data/lib/paper_trail/frameworks/cucumber.rb +5 -3
- data/lib/paper_trail/frameworks/rails.rb +2 -0
- data/lib/paper_trail/frameworks/rails/controller.rb +33 -43
- data/lib/paper_trail/frameworks/rails/engine.rb +34 -1
- data/lib/paper_trail/frameworks/rspec.rb +17 -4
- data/lib/paper_trail/frameworks/rspec/helpers.rb +2 -0
- data/lib/paper_trail/has_paper_trail.rb +22 -310
- data/lib/paper_trail/model_config.rb +157 -109
- data/lib/paper_trail/queries/versions/where_object.rb +65 -0
- data/lib/paper_trail/queries/versions/where_object_changes.rb +75 -0
- data/lib/paper_trail/record_history.rb +3 -9
- data/lib/paper_trail/record_trail.rb +169 -319
- data/lib/paper_trail/reifier.rb +53 -374
- data/lib/paper_trail/request.rb +166 -0
- data/lib/paper_trail/serializers/json.rb +9 -10
- data/lib/paper_trail/serializers/yaml.rb +15 -28
- data/lib/paper_trail/type_serializers/postgres_array_serializer.rb +48 -0
- data/lib/paper_trail/version_concern.rb +160 -155
- data/lib/paper_trail/version_number.rb +12 -4
- metadata +77 -372
- data/.github/CONTRIBUTING.md +0 -109
- data/.github/ISSUE_TEMPLATE.md +0 -13
- data/.gitignore +0 -23
- data/.rspec +0 -2
- data/.rubocop.yml +0 -99
- data/.rubocop_todo.yml +0 -22
- data/.travis.yml +0 -41
- data/Appraisals +0 -38
- data/CHANGELOG.md +0 -560
- data/Gemfile +0 -2
- data/MIT-LICENSE +0 -20
- data/README.md +0 -1654
- data/Rakefile +0 -30
- data/doc/bug_report_template.rb +0 -69
- data/doc/warning_about_not_setting_whodunnit.md +0 -32
- data/gemfiles/ar3.gemfile +0 -19
- data/gemfiles/ar4.gemfile +0 -8
- data/gemfiles/ar5.gemfile +0 -9
- data/lib/generators/paper_trail/USAGE +0 -2
- data/lib/generators/paper_trail/default_initializer.rb +0 -0
- data/lib/generators/paper_trail/install_generator.rb +0 -57
- data/lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb +0 -13
- data/lib/generators/paper_trail/templates/create_version_associations.rb +0 -22
- data/lib/generators/paper_trail/templates/create_versions.rb +0 -80
- data/lib/paper_trail/attribute_serializers/legacy_active_record_shim.rb +0 -48
- data/lib/paper_trail/frameworks/active_record/models/paper_trail/version_association.rb +0 -11
- data/lib/paper_trail/frameworks/sinatra.rb +0 -40
- data/lib/paper_trail/version_association_concern.rb +0 -17
- data/paper_trail.gemspec +0 -56
- data/spec/generators/install_generator_spec.rb +0 -66
- data/spec/generators/paper_trail/templates/create_versions_spec.rb +0 -51
- data/spec/models/animal_spec.rb +0 -36
- data/spec/models/boolit_spec.rb +0 -48
- data/spec/models/callback_modifier_spec.rb +0 -96
- data/spec/models/car_spec.rb +0 -13
- data/spec/models/custom_primary_key_record_spec.rb +0 -18
- data/spec/models/fluxor_spec.rb +0 -17
- data/spec/models/gadget_spec.rb +0 -68
- data/spec/models/joined_version_spec.rb +0 -47
- data/spec/models/json_version_spec.rb +0 -102
- data/spec/models/kitchen/banana_spec.rb +0 -14
- data/spec/models/not_on_update_spec.rb +0 -22
- data/spec/models/post_with_status_spec.rb +0 -50
- data/spec/models/skipper_spec.rb +0 -46
- data/spec/models/thing_spec.rb +0 -11
- data/spec/models/truck_spec.rb +0 -5
- data/spec/models/vehicle_spec.rb +0 -5
- data/spec/models/version_spec.rb +0 -272
- data/spec/models/widget_spec.rb +0 -343
- data/spec/modules/paper_trail_spec.rb +0 -27
- data/spec/modules/version_concern_spec.rb +0 -31
- data/spec/modules/version_number_spec.rb +0 -43
- data/spec/paper_trail/config_spec.rb +0 -33
- data/spec/paper_trail_spec.rb +0 -79
- data/spec/rails_helper.rb +0 -34
- data/spec/requests/articles_spec.rb +0 -34
- data/spec/spec_helper.rb +0 -114
- data/spec/support/alt_db_init.rb +0 -54
- data/test/custom_json_serializer.rb +0 -13
- data/test/dummy/Rakefile +0 -7
- data/test/dummy/app/controllers/application_controller.rb +0 -33
- data/test/dummy/app/controllers/articles_controller.rb +0 -20
- data/test/dummy/app/controllers/test_controller.rb +0 -5
- data/test/dummy/app/controllers/widgets_controller.rb +0 -32
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/models/animal.rb +0 -6
- data/test/dummy/app/models/article.rb +0 -24
- data/test/dummy/app/models/authorship.rb +0 -5
- data/test/dummy/app/models/bar_habtm.rb +0 -4
- data/test/dummy/app/models/book.rb +0 -9
- data/test/dummy/app/models/boolit.rb +0 -4
- data/test/dummy/app/models/callback_modifier.rb +0 -45
- data/test/dummy/app/models/car.rb +0 -3
- data/test/dummy/app/models/cat.rb +0 -2
- data/test/dummy/app/models/chapter.rb +0 -9
- data/test/dummy/app/models/citation.rb +0 -5
- data/test/dummy/app/models/custom_primary_key_record.rb +0 -13
- data/test/dummy/app/models/customer.rb +0 -4
- data/test/dummy/app/models/document.rb +0 -4
- data/test/dummy/app/models/dog.rb +0 -2
- data/test/dummy/app/models/editor.rb +0 -4
- data/test/dummy/app/models/editorship.rb +0 -5
- data/test/dummy/app/models/elephant.rb +0 -3
- data/test/dummy/app/models/fluxor.rb +0 -3
- data/test/dummy/app/models/foo_habtm.rb +0 -5
- data/test/dummy/app/models/foo_widget.rb +0 -2
- data/test/dummy/app/models/fruit.rb +0 -5
- data/test/dummy/app/models/gadget.rb +0 -3
- data/test/dummy/app/models/kitchen/banana.rb +0 -5
- data/test/dummy/app/models/legacy_widget.rb +0 -4
- data/test/dummy/app/models/line_item.rb +0 -4
- data/test/dummy/app/models/not_on_update.rb +0 -4
- data/test/dummy/app/models/order.rb +0 -5
- data/test/dummy/app/models/paragraph.rb +0 -5
- data/test/dummy/app/models/person.rb +0 -38
- data/test/dummy/app/models/post.rb +0 -3
- data/test/dummy/app/models/post_with_status.rb +0 -8
- data/test/dummy/app/models/protected_widget.rb +0 -3
- data/test/dummy/app/models/quotation.rb +0 -5
- data/test/dummy/app/models/section.rb +0 -6
- data/test/dummy/app/models/skipper.rb +0 -6
- data/test/dummy/app/models/song.rb +0 -41
- data/test/dummy/app/models/thing.rb +0 -3
- data/test/dummy/app/models/translation.rb +0 -4
- data/test/dummy/app/models/truck.rb +0 -4
- data/test/dummy/app/models/vehicle.rb +0 -4
- data/test/dummy/app/models/whatchamajigger.rb +0 -4
- data/test/dummy/app/models/widget.rb +0 -16
- data/test/dummy/app/models/wotsit.rb +0 -8
- data/test/dummy/app/versions/custom_primary_key_record_version.rb +0 -3
- data/test/dummy/app/versions/joined_version.rb +0 -6
- data/test/dummy/app/versions/json_version.rb +0 -3
- data/test/dummy/app/versions/kitchen/banana_version.rb +0 -5
- data/test/dummy/app/versions/post_version.rb +0 -3
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -80
- data/test/dummy/config/boot.rb +0 -10
- data/test/dummy/config/database.mysql.yml +0 -19
- data/test/dummy/config/database.postgres.yml +0 -15
- data/test/dummy/config/database.sqlite.yml +0 -15
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -41
- data/test/dummy/config/environments/production.rb +0 -74
- data/test/dummy/config/environments/test.rb +0 -51
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -9
- data/test/dummy/config/initializers/inflections.rb +0 -10
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/paper_trail.rb +0 -9
- data/test/dummy/config/initializers/secret_token.rb +0 -9
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/locales/en.yml +0 -5
- data/test/dummy/config/routes.rb +0 -4
- data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +0 -361
- data/test/dummy/db/schema.rb +0 -288
- data/test/dummy/script/rails +0 -8
- data/test/functional/controller_test.rb +0 -90
- data/test/functional/enabled_for_controller_test.rb +0 -28
- data/test/functional/modular_sinatra_test.rb +0 -46
- data/test/functional/sinatra_test.rb +0 -51
- data/test/functional/thread_safety_test.rb +0 -46
- data/test/test_helper.rb +0 -127
- data/test/time_travel_helper.rb +0 -1
- data/test/unit/associations_test.rb +0 -1016
- data/test/unit/cleaner_test.rb +0 -188
- data/test/unit/inheritance_column_test.rb +0 -43
- data/test/unit/model_test.rb +0 -1489
- data/test/unit/protected_attrs_test.rb +0 -52
- data/test/unit/serializer_test.rb +0 -119
- data/test/unit/serializers/json_test.rb +0 -95
- data/test/unit/serializers/mixin_json_test.rb +0 -37
- data/test/unit/serializers/mixin_yaml_test.rb +0 -53
- data/test/unit/serializers/yaml_test.rb +0 -54
- data/test/unit/timestamp_test.rb +0 -41
- data/test/unit/version_test.rb +0 -119
@@ -1,24 +0,0 @@
|
|
1
|
-
class Article < ActiveRecord::Base
|
2
|
-
has_paper_trail(
|
3
|
-
ignore: [
|
4
|
-
:title, {
|
5
|
-
abstract: proc { |obj|
|
6
|
-
["ignore abstract", "Other abstract"].include? obj.abstract
|
7
|
-
}
|
8
|
-
}
|
9
|
-
],
|
10
|
-
only: [:content, { abstract: proc { |obj| obj.abstract.present? } }],
|
11
|
-
skip: [:file_upload],
|
12
|
-
meta: {
|
13
|
-
answer: 42,
|
14
|
-
action: :action_data_provider_method,
|
15
|
-
question: proc { "31 + 11 = #{31 + 11}" },
|
16
|
-
article_id: proc { |article| article.id },
|
17
|
-
title: :title
|
18
|
-
}
|
19
|
-
)
|
20
|
-
|
21
|
-
def action_data_provider_method
|
22
|
-
object_id.to_s
|
23
|
-
end
|
24
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
class CallbackModifier < ActiveRecord::Base
|
2
|
-
has_paper_trail on: []
|
3
|
-
|
4
|
-
def test_destroy
|
5
|
-
transaction do
|
6
|
-
run_callbacks(:destroy) do
|
7
|
-
self.deleted = true
|
8
|
-
save!
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def flagged_deleted?
|
14
|
-
deleted?
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
class BeforeDestroyModifier < CallbackModifier
|
19
|
-
has_paper_trail on: []
|
20
|
-
paper_trail.on_destroy :before
|
21
|
-
end
|
22
|
-
|
23
|
-
class AfterDestroyModifier < CallbackModifier
|
24
|
-
has_paper_trail on: []
|
25
|
-
paper_trail.on_destroy :after
|
26
|
-
end
|
27
|
-
|
28
|
-
class NoArgDestroyModifier < CallbackModifier
|
29
|
-
has_paper_trail on: []
|
30
|
-
paper_trail.on_destroy
|
31
|
-
end
|
32
|
-
|
33
|
-
class UpdateModifier < CallbackModifier
|
34
|
-
has_paper_trail on: []
|
35
|
-
paper_trail.on_update
|
36
|
-
end
|
37
|
-
|
38
|
-
class CreateModifier < CallbackModifier
|
39
|
-
has_paper_trail on: []
|
40
|
-
paper_trail.on_create
|
41
|
-
end
|
42
|
-
|
43
|
-
class DefaultModifier < CallbackModifier
|
44
|
-
has_paper_trail
|
45
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require "securerandom"
|
2
|
-
class CustomPrimaryKeyRecord < ActiveRecord::Base
|
3
|
-
self.primary_key = :uuid
|
4
|
-
|
5
|
-
has_paper_trail class_name: "CustomPrimaryKeyRecordVersion"
|
6
|
-
# this unusual default_scope is to test the case of the Version#item association
|
7
|
-
# not returning the item due to unmatched default_scope on the model.
|
8
|
-
default_scope -> { where(name: "custom_primary_key_record") }
|
9
|
-
|
10
|
-
before_create do
|
11
|
-
self.uuid ||= SecureRandom.uuid
|
12
|
-
end
|
13
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
class Person < ActiveRecord::Base
|
2
|
-
has_many :authorships, foreign_key: :author_id, dependent: :destroy
|
3
|
-
has_many :books, through: :authorships
|
4
|
-
has_paper_trail
|
5
|
-
|
6
|
-
# Convert strings to TimeZone objects when assigned
|
7
|
-
def time_zone=(value)
|
8
|
-
if value.is_a? ActiveSupport::TimeZone
|
9
|
-
super
|
10
|
-
else
|
11
|
-
zone = ::Time.find_zone(value) # nil if can't find time zone
|
12
|
-
super zone
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# Store TimeZone objects as strings when serialized to database
|
17
|
-
class TimeZoneSerializer
|
18
|
-
class << self
|
19
|
-
def dump(zone)
|
20
|
-
zone.try(:name)
|
21
|
-
end
|
22
|
-
|
23
|
-
def load(value)
|
24
|
-
::Time.find_zone(value)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def dump(zone)
|
29
|
-
self.class.dump(zone)
|
30
|
-
end
|
31
|
-
|
32
|
-
def load(value)
|
33
|
-
self.class.load(value)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
serialize :time_zone, TimeZoneSerializer.new
|
38
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# Example from 'Overwriting default accessors' in ActiveRecord::Base.
|
2
|
-
class Song < ActiveRecord::Base
|
3
|
-
has_paper_trail
|
4
|
-
attr_accessor :name
|
5
|
-
|
6
|
-
# Uses an integer of seconds to hold the length of the song
|
7
|
-
def length=(minutes)
|
8
|
-
write_attribute(:length, minutes.to_i * 60)
|
9
|
-
end
|
10
|
-
|
11
|
-
def length
|
12
|
-
read_attribute(:length) / 60
|
13
|
-
end
|
14
|
-
|
15
|
-
# override attributes hashes like some libraries do
|
16
|
-
def attributes_with_name
|
17
|
-
if name
|
18
|
-
attributes_without_name.merge(name: name)
|
19
|
-
else
|
20
|
-
attributes_without_name
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# `alias_method_chain` is deprecated in rails 5, but we cannot use the
|
25
|
-
# suggested replacement, `Module#prepend`, because we still support ruby 1.9.
|
26
|
-
alias attributes_without_name attributes
|
27
|
-
alias attributes attributes_with_name
|
28
|
-
|
29
|
-
def changed_attributes_with_name
|
30
|
-
if name
|
31
|
-
changed_attributes_without_name.merge(name: name)
|
32
|
-
else
|
33
|
-
changed_attributes_without_name
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# `alias_method_chain` is deprecated in rails 5, but we cannot use the
|
38
|
-
# suggested replacement, `Module#prepend`, because we still support ruby 1.9.
|
39
|
-
alias changed_attributes_without_name changed_attributes
|
40
|
-
alias changed_attributes changed_attributes_with_name
|
41
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
class Widget < ActiveRecord::Base
|
2
|
-
has_paper_trail
|
3
|
-
has_one :wotsit
|
4
|
-
has_many :whatchamajiggers, as: :owner
|
5
|
-
|
6
|
-
EXCLUDED_NAME = "Biglet".freeze
|
7
|
-
|
8
|
-
validates :name, exclusion: { in: [EXCLUDED_NAME] }
|
9
|
-
|
10
|
-
# `has_many` syntax for specifying order uses a lambda in Rails 4
|
11
|
-
if ::ActiveRecord::VERSION::MAJOR >= 4
|
12
|
-
has_many :fluxors, -> { order(:name) }
|
13
|
-
else
|
14
|
-
has_many :fluxors, order: :name
|
15
|
-
end
|
16
|
-
end
|
@@ -1,6 +0,0 @@
|
|
1
|
-
# The purpose of this custom version class is to test the scope methods on the
|
2
|
-
# VersionConcern::ClassMethods module. See
|
3
|
-
# https://github.com/airblade/paper_trail/issues/295 for more details.
|
4
|
-
class JoinedVersion < PaperTrail::Version
|
5
|
-
default_scope { joins("INNER JOIN widgets ON widgets.id = versions.item_id") }
|
6
|
-
end
|