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,17 +0,0 @@
|
|
1
|
-
require "active_support/concern"
|
2
|
-
|
3
|
-
module PaperTrail
|
4
|
-
# Functionality for `PaperTrail::VersionAssociation`. Exists in a module
|
5
|
-
# for the same reasons outlined in version_concern.rb.
|
6
|
-
module VersionAssociationConcern
|
7
|
-
extend ::ActiveSupport::Concern
|
8
|
-
|
9
|
-
included do
|
10
|
-
belongs_to :version
|
11
|
-
|
12
|
-
if PaperTrail.active_record_protected_attributes?
|
13
|
-
attr_accessible :version_id, :foreign_key_name, :foreign_key_id
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/paper_trail.gemspec
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
2
|
-
require "paper_trail/version_number"
|
3
|
-
|
4
|
-
Gem::Specification.new do |s|
|
5
|
-
s.name = "paper_trail"
|
6
|
-
s.version = PaperTrail::VERSION::STRING.dup # The `dup` is for ruby 1.9.3
|
7
|
-
s.platform = Gem::Platform::RUBY
|
8
|
-
s.summary = "Track changes to your models' data. Good for auditing or versioning."
|
9
|
-
s.description = s.summary
|
10
|
-
s.homepage = "https://github.com/airblade/paper_trail"
|
11
|
-
s.authors = ["Andy Stewart", "Ben Atkins"]
|
12
|
-
s.email = "batkinz@gmail.com"
|
13
|
-
s.license = "MIT"
|
14
|
-
|
15
|
-
s.files = `git ls-files`.split("\n")
|
16
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
18
|
-
s.require_paths = ["lib"]
|
19
|
-
|
20
|
-
s.required_rubygems_version = ">= 1.3.6"
|
21
|
-
s.required_ruby_version = ">= 1.9.3"
|
22
|
-
|
23
|
-
s.add_dependency "activerecord", [">= 3.0", "< 6.0"]
|
24
|
-
s.add_dependency "request_store", "~> 1.1"
|
25
|
-
|
26
|
-
s.add_development_dependency "appraisal", "~> 2.1"
|
27
|
-
s.add_development_dependency "rake", "~> 10.4.2"
|
28
|
-
s.add_development_dependency "shoulda", "~> 3.5.0"
|
29
|
-
s.add_development_dependency "ffaker", "~> 2.1.0"
|
30
|
-
s.add_development_dependency "railties", [">= 3.0", "< 6.0"]
|
31
|
-
s.add_development_dependency "rack-test", "~> 0.6.3"
|
32
|
-
s.add_development_dependency "rspec-rails", "~> 3.5"
|
33
|
-
s.add_development_dependency "generator_spec", "~> 0.9.3"
|
34
|
-
s.add_development_dependency "database_cleaner", "~> 1.2"
|
35
|
-
s.add_development_dependency "pry-nav", "~> 0.2.4"
|
36
|
-
s.add_development_dependency "rubocop", "~> 0.41.1"
|
37
|
-
s.add_development_dependency "timecop", "~> 0.8.0"
|
38
|
-
|
39
|
-
if defined?(JRUBY_VERSION)
|
40
|
-
s.add_development_dependency "activerecord-jdbcsqlite3-adapter", "~> 1.3.15"
|
41
|
-
s.add_development_dependency "activerecord-jdbcpostgresql-adapter", "~> 1.3.15"
|
42
|
-
s.add_development_dependency "activerecord-jdbcmysql-adapter", "~> 1.3.15"
|
43
|
-
else
|
44
|
-
s.add_development_dependency "sqlite3", "~> 1.2"
|
45
|
-
|
46
|
-
# pg 0.19 requires ruby >= 2.0.0
|
47
|
-
if ::Gem.ruby_version >= ::Gem::Version.new("2.0.0")
|
48
|
-
s.add_development_dependency "pg", "~> 0.19.0"
|
49
|
-
else
|
50
|
-
s.add_development_dependency "pg", [">= 0.17", "< 0.19"]
|
51
|
-
end
|
52
|
-
|
53
|
-
# activerecord >= 4.2.5 may use mysql2 >= 0.4
|
54
|
-
s.add_development_dependency "mysql2", "~> 0.4.2"
|
55
|
-
end
|
56
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
require "generator_spec/test_case"
|
3
|
-
require File.expand_path("../../../lib/generators/paper_trail/install_generator", __FILE__)
|
4
|
-
|
5
|
-
describe PaperTrail::InstallGenerator, type: :generator do
|
6
|
-
include GeneratorSpec::TestCase
|
7
|
-
destination File.expand_path("../tmp", __FILE__)
|
8
|
-
|
9
|
-
after(:all) { prepare_destination } # cleanup the tmp directory
|
10
|
-
|
11
|
-
describe "no options" do
|
12
|
-
before(:all) do
|
13
|
-
prepare_destination
|
14
|
-
run_generator
|
15
|
-
end
|
16
|
-
|
17
|
-
it "generates a migration for creating the 'versions' table" do
|
18
|
-
expect(destination_root).to have_structure {
|
19
|
-
directory "db" do
|
20
|
-
directory "migrate" do
|
21
|
-
migration "create_versions" do
|
22
|
-
contains "class CreateVersions"
|
23
|
-
contains "def change"
|
24
|
-
contains "create_table :versions"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
}
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe "`--with-changes` option set to `true`" do
|
33
|
-
before(:all) do
|
34
|
-
prepare_destination
|
35
|
-
run_generator %w(--with-changes)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "generates a migration for creating the 'versions' table" do
|
39
|
-
expect(destination_root).to have_structure {
|
40
|
-
directory "db" do
|
41
|
-
directory "migrate" do
|
42
|
-
migration "create_versions" do
|
43
|
-
contains "class CreateVersions"
|
44
|
-
contains "def change"
|
45
|
-
contains "create_table :versions"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
}
|
50
|
-
end
|
51
|
-
|
52
|
-
it "generates a migration for adding the 'object_changes' column to the 'versions' table" do
|
53
|
-
expect(destination_root).to have_structure {
|
54
|
-
directory "db" do
|
55
|
-
directory "migrate" do
|
56
|
-
migration "add_object_changes_to_versions" do
|
57
|
-
contains "class AddObjectChangesToVersions"
|
58
|
-
contains "def change"
|
59
|
-
contains "add_column :versions, :object_changes, :text"
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
}
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
require "generators/paper_trail/templates/create_versions"
|
3
|
-
|
4
|
-
RSpec.describe CreateVersions do
|
5
|
-
describe "#change", verify_stubs: false do
|
6
|
-
let(:migration) { described_class.new }
|
7
|
-
|
8
|
-
before do
|
9
|
-
allow(migration).to receive(:add_index)
|
10
|
-
allow(migration).to receive(:create_table)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "creates the versions table" do
|
14
|
-
migration.change
|
15
|
-
expect(migration).to have_received(:create_table) do |arg1|
|
16
|
-
expect(arg1).to eq(:versions)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
case ENV["DB"]
|
21
|
-
when "mysql"
|
22
|
-
it "uses InnoDB engine" do
|
23
|
-
migration.change
|
24
|
-
expect(migration).to have_received(:create_table) do |_, arg2|
|
25
|
-
expect(arg2[:options]).to match(/ENGINE=InnoDB/)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
it "uses utf8mb4 character set" do
|
30
|
-
migration.change
|
31
|
-
expect(migration).to have_received(:create_table) do |_, arg2|
|
32
|
-
expect(arg2[:options]).to match(/DEFAULT CHARSET=utf8mb4/)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
it "uses utf8mb4_col collation" do
|
37
|
-
migration.change
|
38
|
-
expect(migration).to have_received(:create_table) do |_, arg2|
|
39
|
-
expect(arg2[:options]).to match(/COLLATE=utf8mb4_general_ci/)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
else
|
43
|
-
it "passes an empty options hash to create_table" do
|
44
|
-
migration.change
|
45
|
-
expect(migration).to have_received(:create_table) do |_, arg2|
|
46
|
-
expect(arg2).to eq({})
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/spec/models/animal_spec.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Animal, type: :model do
|
4
|
-
it { is_expected.to be_versioned }
|
5
|
-
|
6
|
-
describe "STI", versioning: true do
|
7
|
-
it { expect(Animal.inheritance_column).to eq("species") }
|
8
|
-
|
9
|
-
describe "updates to the `inheritance_column`" do
|
10
|
-
subject { Cat.create!(name: "Leo") }
|
11
|
-
|
12
|
-
it "should be allowed" do
|
13
|
-
subject.update_attributes(name: "Spike", species: "Dog")
|
14
|
-
dog = Animal.find(subject.id)
|
15
|
-
expect(dog).to be_instance_of(Dog)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "with callback-methods" do
|
20
|
-
context "when only has_paper_trail set in super class" do
|
21
|
-
let(:callback_cat) { Cat.create(name: "Markus") }
|
22
|
-
|
23
|
-
it "trails all events" do
|
24
|
-
callback_cat.update_attributes(name: "Billie")
|
25
|
-
callback_cat.destroy
|
26
|
-
expect(callback_cat.versions.collect(&:event)).to eq %w(create update destroy)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "does not break reify" do
|
30
|
-
callback_cat.destroy
|
31
|
-
expect { callback_cat.versions.last.reify }.not_to raise_error
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
data/spec/models/boolit_spec.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
require Rails.root.join("..", "custom_json_serializer")
|
3
|
-
|
4
|
-
describe Boolit, type: :model do
|
5
|
-
it { is_expected.to be_versioned }
|
6
|
-
|
7
|
-
it "has a default scope" do
|
8
|
-
expect(subject.default_scopes).to_not be_empty
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "Versioning", versioning: true do
|
12
|
-
subject { Boolit.create! }
|
13
|
-
before { subject.update_attributes!(name: FFaker::Name.name) }
|
14
|
-
|
15
|
-
it "should have versions" do
|
16
|
-
expect(subject.versions.size).to eq(2)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should be able to be reified and persisted" do
|
20
|
-
expect { subject.versions.last.reify.save! }.to_not raise_error
|
21
|
-
end
|
22
|
-
|
23
|
-
context "Instance falls out of default scope" do
|
24
|
-
before { subject.update_attributes!(scoped: false) }
|
25
|
-
|
26
|
-
it "is NOT scoped" do
|
27
|
-
expect(Boolit.first).to be_nil
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should still be able to be reified and persisted" do
|
31
|
-
expect { subject.paper_trail.previous_version.save! }.to_not raise_error
|
32
|
-
end
|
33
|
-
|
34
|
-
context "with `nil` attributes on the live instance" do
|
35
|
-
before do
|
36
|
-
PaperTrail.serializer = CustomJsonSerializer
|
37
|
-
subject.update_attributes!(name: nil)
|
38
|
-
subject.update_attributes!(name: FFaker::Name.name)
|
39
|
-
end
|
40
|
-
after { PaperTrail.serializer = PaperTrail::Serializers::YAML }
|
41
|
-
|
42
|
-
it "should not overwrite that attribute during the reification process" do
|
43
|
-
expect(subject.paper_trail.previous_version.name).to be_nil
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,96 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe CallbackModifier, type: :model do
|
4
|
-
with_versioning do
|
5
|
-
describe "callback-methods", versioning: true do
|
6
|
-
describe "paper_trail_on_destroy" do
|
7
|
-
it "should add :destroy to paper_trail_options[:on]" do
|
8
|
-
modifier = NoArgDestroyModifier.create!(some_content: FFaker::Lorem.sentence)
|
9
|
-
expect(modifier.paper_trail_options[:on]).to eq [:destroy]
|
10
|
-
end
|
11
|
-
|
12
|
-
context "when :before" do
|
13
|
-
it "should create the version before destroy" do
|
14
|
-
modifier = BeforeDestroyModifier.create!(some_content: FFaker::Lorem.sentence)
|
15
|
-
modifier.test_destroy
|
16
|
-
expect(modifier.versions.last.reify).not_to be_flagged_deleted
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context "when :after" do
|
21
|
-
it "should create the version after destroy" do
|
22
|
-
modifier = AfterDestroyModifier.create!(some_content: FFaker::Lorem.sentence)
|
23
|
-
modifier.test_destroy
|
24
|
-
expect(modifier.versions.last.reify).to be_flagged_deleted
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context "when no argument" do
|
29
|
-
it "should default to before destroy" do
|
30
|
-
modifier = NoArgDestroyModifier.create!(some_content: FFaker::Lorem.sentence)
|
31
|
-
modifier.test_destroy
|
32
|
-
expect(modifier.versions.last.reify).not_to be_flagged_deleted
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "paper_trail_on_update" do
|
38
|
-
it "should add :update to paper_trail_options[:on]" do
|
39
|
-
modifier = UpdateModifier.create!(some_content: FFaker::Lorem.sentence)
|
40
|
-
expect(modifier.paper_trail_options[:on]).to eq [:update]
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should create a version" do
|
44
|
-
modifier = UpdateModifier.create!(some_content: FFaker::Lorem.sentence)
|
45
|
-
modifier.update_attributes! some_content: "modified"
|
46
|
-
expect(modifier.versions.last.event).to eq "update"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe "paper_trail_on_create" do
|
51
|
-
it "should add :create to paper_trail_options[:on]" do
|
52
|
-
modifier = CreateModifier.create!(some_content: FFaker::Lorem.sentence)
|
53
|
-
expect(modifier.paper_trail_options[:on]).to eq [:create]
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should create a version" do
|
57
|
-
modifier = CreateModifier.create!(some_content: FFaker::Lorem.sentence)
|
58
|
-
expect(modifier.versions.last.event).to eq "create"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
context "when no callback-method used" do
|
63
|
-
it "should set paper_trail_options[:on] to [:create, :update, :destroy]" do
|
64
|
-
modifier = DefaultModifier.create!(some_content: FFaker::Lorem.sentence)
|
65
|
-
expect(modifier.paper_trail_options[:on]).to eq [:create, :update, :destroy]
|
66
|
-
end
|
67
|
-
|
68
|
-
it "should default to track destroy" do
|
69
|
-
modifier = DefaultModifier.create!(some_content: FFaker::Lorem.sentence)
|
70
|
-
modifier.destroy
|
71
|
-
expect(modifier.versions.last.event).to eq "destroy"
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should default to track update" do
|
75
|
-
modifier = DefaultModifier.create!(some_content: FFaker::Lorem.sentence)
|
76
|
-
modifier.update_attributes! some_content: "modified"
|
77
|
-
expect(modifier.versions.last.event).to eq "update"
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should default to track create" do
|
81
|
-
modifier = DefaultModifier.create!(some_content: FFaker::Lorem.sentence)
|
82
|
-
expect(modifier.versions.last.event).to eq "create"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
context "when only one callback-method" do
|
87
|
-
it "does only track the corresponding event" do
|
88
|
-
modifier = CreateModifier.create!(some_content: FFaker::Lorem.sentence)
|
89
|
-
modifier.update_attributes!(some_content: "modified")
|
90
|
-
modifier.test_destroy
|
91
|
-
expect(modifier.versions.collect(&:event)).to eq ["create"]
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
data/spec/models/car_spec.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Car, type: :model do
|
4
|
-
it { is_expected.to be_versioned }
|
5
|
-
|
6
|
-
describe "changeset", versioning: true do
|
7
|
-
it "has the expected keys (see issue 738)" do
|
8
|
-
car = Car.create!(name: "Alice")
|
9
|
-
car.update_attributes(name: "Bob")
|
10
|
-
assert_includes car.versions.last.changeset.keys, "name"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe CustomPrimaryKeyRecord, type: :model do
|
4
|
-
it { is_expected.to be_versioned }
|
5
|
-
|
6
|
-
describe "#versions" do
|
7
|
-
it "returns instances of CustomPrimaryKeyRecordVersion", versioning: true do
|
8
|
-
custom_primary_key_record = described_class.create!
|
9
|
-
custom_primary_key_record.update_attributes!(name: "bob")
|
10
|
-
version = custom_primary_key_record.versions.last
|
11
|
-
expect(version).to be_a(CustomPrimaryKeyRecordVersion)
|
12
|
-
version_from_db = CustomPrimaryKeyRecordVersion.last
|
13
|
-
expect(version_from_db.reify).to be_a(CustomPrimaryKeyRecord)
|
14
|
-
custom_primary_key_record.destroy
|
15
|
-
expect(CustomPrimaryKeyRecordVersion.last.reify).to be_a(CustomPrimaryKeyRecord)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
data/spec/models/fluxor_spec.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Fluxor, type: :model do
|
4
|
-
describe "`be_versioned` matcher" do
|
5
|
-
it { is_expected.to_not be_versioned }
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "Methods" do
|
9
|
-
describe "Class" do
|
10
|
-
describe ".paper_trail.enabled?" do
|
11
|
-
it "returns false" do
|
12
|
-
expect(Fluxor.paper_trail.enabled?).to eq(false)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/spec/models/gadget_spec.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
describe Gadget, type: :model do
|
4
|
-
it { is_expected.to be_versioned }
|
5
|
-
|
6
|
-
let(:gadget) { Gadget.create!(name: "Wrench", brand: "Acme") }
|
7
|
-
|
8
|
-
describe "updates", versioning: true do
|
9
|
-
it "should generate a version for updates to `name` attribute" do
|
10
|
-
expect { gadget.update_attribute(:name, "Hammer").to change { gadget.versions.size }.by(1) }
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should ignore for updates to `brand` attribute" do
|
14
|
-
expect { gadget.update_attribute(:brand, "Stanley") }.to_not change { gadget.versions.size }
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should still generate a version when only the `updated_at` attribute is updated" do
|
18
|
-
# Plus 1 second because MySQL lacks sub-second resolution
|
19
|
-
expect {
|
20
|
-
gadget.update_attribute(:updated_at, Time.now + 1)
|
21
|
-
}.to change { gadget.versions.size }.by(1)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "Methods" do
|
26
|
-
describe "Instance", versioning: true do
|
27
|
-
describe "private" do
|
28
|
-
describe "#changed_notably?" do
|
29
|
-
subject { Gadget.new(created_at: Time.now) }
|
30
|
-
|
31
|
-
context "create events" do
|
32
|
-
it { expect(subject.paper_trail.changed_notably?).to be true }
|
33
|
-
end
|
34
|
-
|
35
|
-
context "update events" do
|
36
|
-
before { subject.save! }
|
37
|
-
|
38
|
-
context "without update timestamps" do
|
39
|
-
it "should only acknowledge non-ignored attrs" do
|
40
|
-
subject.name = "Wrench"
|
41
|
-
expect(subject.paper_trail.changed_notably?).to be true
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should not acknowledge ignored attr (brand)" do
|
45
|
-
subject.brand = "Acme"
|
46
|
-
expect(subject.paper_trail.changed_notably?).to be false
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "with update timestamps" do
|
51
|
-
it "should only acknowledge non-ignored attrs" do
|
52
|
-
subject.name = "Wrench"
|
53
|
-
subject.updated_at = Time.now
|
54
|
-
expect(subject.paper_trail.changed_notably?).to be true
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should not acknowledge ignored attrs and timestamps only" do
|
58
|
-
subject.brand = "Acme"
|
59
|
-
subject.updated_at = Time.now
|
60
|
-
expect(subject.paper_trail.changed_notably?).to be false
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|