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.
Files changed (198) hide show
  1. checksums.yaml +5 -5
  2. data/lib/generators/paper_trail/install/USAGE +3 -0
  3. data/lib/generators/paper_trail/install/install_generator.rb +75 -0
  4. data/lib/generators/paper_trail/{templates/add_object_changes_to_versions.rb → install/templates/add_object_changes_to_versions.rb.erb} +1 -1
  5. data/lib/generators/paper_trail/install/templates/create_versions.rb.erb +36 -0
  6. data/lib/generators/paper_trail/migration_generator.rb +38 -0
  7. data/lib/generators/paper_trail/update_item_subtype/USAGE +4 -0
  8. data/lib/generators/paper_trail/update_item_subtype/templates/update_versions_for_item_subtype.rb.erb +85 -0
  9. data/lib/generators/paper_trail/update_item_subtype/update_item_subtype_generator.rb +17 -0
  10. data/lib/paper_trail.rb +82 -130
  11. data/lib/paper_trail/attribute_serializers/attribute_serializer_factory.rb +27 -0
  12. data/lib/paper_trail/attribute_serializers/cast_attribute_serializer.rb +15 -44
  13. data/lib/paper_trail/attribute_serializers/object_attribute.rb +2 -0
  14. data/lib/paper_trail/attribute_serializers/object_changes_attribute.rb +2 -0
  15. data/lib/paper_trail/cleaner.rb +3 -1
  16. data/lib/paper_trail/compatibility.rb +51 -0
  17. data/lib/paper_trail/config.rb +11 -49
  18. data/lib/paper_trail/events/base.rb +323 -0
  19. data/lib/paper_trail/events/create.rb +32 -0
  20. data/lib/paper_trail/events/destroy.rb +42 -0
  21. data/lib/paper_trail/events/update.rb +60 -0
  22. data/lib/paper_trail/frameworks/active_record.rb +2 -1
  23. data/lib/paper_trail/frameworks/active_record/models/paper_trail/version.rb +8 -3
  24. data/lib/paper_trail/frameworks/cucumber.rb +5 -3
  25. data/lib/paper_trail/frameworks/rails.rb +2 -0
  26. data/lib/paper_trail/frameworks/rails/controller.rb +33 -43
  27. data/lib/paper_trail/frameworks/rails/engine.rb +34 -1
  28. data/lib/paper_trail/frameworks/rspec.rb +17 -4
  29. data/lib/paper_trail/frameworks/rspec/helpers.rb +2 -0
  30. data/lib/paper_trail/has_paper_trail.rb +22 -310
  31. data/lib/paper_trail/model_config.rb +157 -109
  32. data/lib/paper_trail/queries/versions/where_object.rb +65 -0
  33. data/lib/paper_trail/queries/versions/where_object_changes.rb +75 -0
  34. data/lib/paper_trail/record_history.rb +3 -9
  35. data/lib/paper_trail/record_trail.rb +169 -319
  36. data/lib/paper_trail/reifier.rb +53 -374
  37. data/lib/paper_trail/request.rb +166 -0
  38. data/lib/paper_trail/serializers/json.rb +9 -10
  39. data/lib/paper_trail/serializers/yaml.rb +15 -28
  40. data/lib/paper_trail/type_serializers/postgres_array_serializer.rb +48 -0
  41. data/lib/paper_trail/version_concern.rb +160 -155
  42. data/lib/paper_trail/version_number.rb +12 -4
  43. metadata +77 -372
  44. data/.github/CONTRIBUTING.md +0 -109
  45. data/.github/ISSUE_TEMPLATE.md +0 -13
  46. data/.gitignore +0 -23
  47. data/.rspec +0 -2
  48. data/.rubocop.yml +0 -99
  49. data/.rubocop_todo.yml +0 -22
  50. data/.travis.yml +0 -41
  51. data/Appraisals +0 -38
  52. data/CHANGELOG.md +0 -560
  53. data/Gemfile +0 -2
  54. data/MIT-LICENSE +0 -20
  55. data/README.md +0 -1654
  56. data/Rakefile +0 -30
  57. data/doc/bug_report_template.rb +0 -69
  58. data/doc/warning_about_not_setting_whodunnit.md +0 -32
  59. data/gemfiles/ar3.gemfile +0 -19
  60. data/gemfiles/ar4.gemfile +0 -8
  61. data/gemfiles/ar5.gemfile +0 -9
  62. data/lib/generators/paper_trail/USAGE +0 -2
  63. data/lib/generators/paper_trail/default_initializer.rb +0 -0
  64. data/lib/generators/paper_trail/install_generator.rb +0 -57
  65. data/lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb +0 -13
  66. data/lib/generators/paper_trail/templates/create_version_associations.rb +0 -22
  67. data/lib/generators/paper_trail/templates/create_versions.rb +0 -80
  68. data/lib/paper_trail/attribute_serializers/legacy_active_record_shim.rb +0 -48
  69. data/lib/paper_trail/frameworks/active_record/models/paper_trail/version_association.rb +0 -11
  70. data/lib/paper_trail/frameworks/sinatra.rb +0 -40
  71. data/lib/paper_trail/version_association_concern.rb +0 -17
  72. data/paper_trail.gemspec +0 -56
  73. data/spec/generators/install_generator_spec.rb +0 -66
  74. data/spec/generators/paper_trail/templates/create_versions_spec.rb +0 -51
  75. data/spec/models/animal_spec.rb +0 -36
  76. data/spec/models/boolit_spec.rb +0 -48
  77. data/spec/models/callback_modifier_spec.rb +0 -96
  78. data/spec/models/car_spec.rb +0 -13
  79. data/spec/models/custom_primary_key_record_spec.rb +0 -18
  80. data/spec/models/fluxor_spec.rb +0 -17
  81. data/spec/models/gadget_spec.rb +0 -68
  82. data/spec/models/joined_version_spec.rb +0 -47
  83. data/spec/models/json_version_spec.rb +0 -102
  84. data/spec/models/kitchen/banana_spec.rb +0 -14
  85. data/spec/models/not_on_update_spec.rb +0 -22
  86. data/spec/models/post_with_status_spec.rb +0 -50
  87. data/spec/models/skipper_spec.rb +0 -46
  88. data/spec/models/thing_spec.rb +0 -11
  89. data/spec/models/truck_spec.rb +0 -5
  90. data/spec/models/vehicle_spec.rb +0 -5
  91. data/spec/models/version_spec.rb +0 -272
  92. data/spec/models/widget_spec.rb +0 -343
  93. data/spec/modules/paper_trail_spec.rb +0 -27
  94. data/spec/modules/version_concern_spec.rb +0 -31
  95. data/spec/modules/version_number_spec.rb +0 -43
  96. data/spec/paper_trail/config_spec.rb +0 -33
  97. data/spec/paper_trail_spec.rb +0 -79
  98. data/spec/rails_helper.rb +0 -34
  99. data/spec/requests/articles_spec.rb +0 -34
  100. data/spec/spec_helper.rb +0 -114
  101. data/spec/support/alt_db_init.rb +0 -54
  102. data/test/custom_json_serializer.rb +0 -13
  103. data/test/dummy/Rakefile +0 -7
  104. data/test/dummy/app/controllers/application_controller.rb +0 -33
  105. data/test/dummy/app/controllers/articles_controller.rb +0 -20
  106. data/test/dummy/app/controllers/test_controller.rb +0 -5
  107. data/test/dummy/app/controllers/widgets_controller.rb +0 -32
  108. data/test/dummy/app/helpers/application_helper.rb +0 -2
  109. data/test/dummy/app/models/animal.rb +0 -6
  110. data/test/dummy/app/models/article.rb +0 -24
  111. data/test/dummy/app/models/authorship.rb +0 -5
  112. data/test/dummy/app/models/bar_habtm.rb +0 -4
  113. data/test/dummy/app/models/book.rb +0 -9
  114. data/test/dummy/app/models/boolit.rb +0 -4
  115. data/test/dummy/app/models/callback_modifier.rb +0 -45
  116. data/test/dummy/app/models/car.rb +0 -3
  117. data/test/dummy/app/models/cat.rb +0 -2
  118. data/test/dummy/app/models/chapter.rb +0 -9
  119. data/test/dummy/app/models/citation.rb +0 -5
  120. data/test/dummy/app/models/custom_primary_key_record.rb +0 -13
  121. data/test/dummy/app/models/customer.rb +0 -4
  122. data/test/dummy/app/models/document.rb +0 -4
  123. data/test/dummy/app/models/dog.rb +0 -2
  124. data/test/dummy/app/models/editor.rb +0 -4
  125. data/test/dummy/app/models/editorship.rb +0 -5
  126. data/test/dummy/app/models/elephant.rb +0 -3
  127. data/test/dummy/app/models/fluxor.rb +0 -3
  128. data/test/dummy/app/models/foo_habtm.rb +0 -5
  129. data/test/dummy/app/models/foo_widget.rb +0 -2
  130. data/test/dummy/app/models/fruit.rb +0 -5
  131. data/test/dummy/app/models/gadget.rb +0 -3
  132. data/test/dummy/app/models/kitchen/banana.rb +0 -5
  133. data/test/dummy/app/models/legacy_widget.rb +0 -4
  134. data/test/dummy/app/models/line_item.rb +0 -4
  135. data/test/dummy/app/models/not_on_update.rb +0 -4
  136. data/test/dummy/app/models/order.rb +0 -5
  137. data/test/dummy/app/models/paragraph.rb +0 -5
  138. data/test/dummy/app/models/person.rb +0 -38
  139. data/test/dummy/app/models/post.rb +0 -3
  140. data/test/dummy/app/models/post_with_status.rb +0 -8
  141. data/test/dummy/app/models/protected_widget.rb +0 -3
  142. data/test/dummy/app/models/quotation.rb +0 -5
  143. data/test/dummy/app/models/section.rb +0 -6
  144. data/test/dummy/app/models/skipper.rb +0 -6
  145. data/test/dummy/app/models/song.rb +0 -41
  146. data/test/dummy/app/models/thing.rb +0 -3
  147. data/test/dummy/app/models/translation.rb +0 -4
  148. data/test/dummy/app/models/truck.rb +0 -4
  149. data/test/dummy/app/models/vehicle.rb +0 -4
  150. data/test/dummy/app/models/whatchamajigger.rb +0 -4
  151. data/test/dummy/app/models/widget.rb +0 -16
  152. data/test/dummy/app/models/wotsit.rb +0 -8
  153. data/test/dummy/app/versions/custom_primary_key_record_version.rb +0 -3
  154. data/test/dummy/app/versions/joined_version.rb +0 -6
  155. data/test/dummy/app/versions/json_version.rb +0 -3
  156. data/test/dummy/app/versions/kitchen/banana_version.rb +0 -5
  157. data/test/dummy/app/versions/post_version.rb +0 -3
  158. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  159. data/test/dummy/config.ru +0 -4
  160. data/test/dummy/config/application.rb +0 -80
  161. data/test/dummy/config/boot.rb +0 -10
  162. data/test/dummy/config/database.mysql.yml +0 -19
  163. data/test/dummy/config/database.postgres.yml +0 -15
  164. data/test/dummy/config/database.sqlite.yml +0 -15
  165. data/test/dummy/config/environment.rb +0 -5
  166. data/test/dummy/config/environments/development.rb +0 -41
  167. data/test/dummy/config/environments/production.rb +0 -74
  168. data/test/dummy/config/environments/test.rb +0 -51
  169. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -9
  170. data/test/dummy/config/initializers/inflections.rb +0 -10
  171. data/test/dummy/config/initializers/mime_types.rb +0 -5
  172. data/test/dummy/config/initializers/paper_trail.rb +0 -9
  173. data/test/dummy/config/initializers/secret_token.rb +0 -9
  174. data/test/dummy/config/initializers/session_store.rb +0 -8
  175. data/test/dummy/config/locales/en.yml +0 -5
  176. data/test/dummy/config/routes.rb +0 -4
  177. data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +0 -361
  178. data/test/dummy/db/schema.rb +0 -288
  179. data/test/dummy/script/rails +0 -8
  180. data/test/functional/controller_test.rb +0 -90
  181. data/test/functional/enabled_for_controller_test.rb +0 -28
  182. data/test/functional/modular_sinatra_test.rb +0 -46
  183. data/test/functional/sinatra_test.rb +0 -51
  184. data/test/functional/thread_safety_test.rb +0 -46
  185. data/test/test_helper.rb +0 -127
  186. data/test/time_travel_helper.rb +0 -1
  187. data/test/unit/associations_test.rb +0 -1016
  188. data/test/unit/cleaner_test.rb +0 -188
  189. data/test/unit/inheritance_column_test.rb +0 -43
  190. data/test/unit/model_test.rb +0 -1489
  191. data/test/unit/protected_attrs_test.rb +0 -52
  192. data/test/unit/serializer_test.rb +0 -119
  193. data/test/unit/serializers/json_test.rb +0 -95
  194. data/test/unit/serializers/mixin_json_test.rb +0 -37
  195. data/test/unit/serializers/mixin_yaml_test.rb +0 -53
  196. data/test/unit/serializers/yaml_test.rb +0 -54
  197. data/test/unit/timestamp_test.rb +0 -41
  198. 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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