mongo_trails 10.3.1 → 14.0.1

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +53 -0
  3. data/.gitignore +2 -0
  4. data/.rubocop.yml +19 -0
  5. data/.ruby-version +1 -0
  6. data/Appraisals +10 -4
  7. data/Gemfile +8 -1
  8. data/README.md +28 -6
  9. data/Rakefile +17 -0
  10. data/bin/bump-version +67 -0
  11. data/gemfiles/rails_7.gemfile +15 -0
  12. data/gemfiles/rails_7.gemfile.lock +212 -0
  13. data/gemfiles/rails_8.gemfile +15 -0
  14. data/gemfiles/rails_8.gemfile.lock +213 -0
  15. data/gemfiles/rails_8_1.gemfile +15 -0
  16. data/gemfiles/rails_8_1.gemfile.lock +143 -0
  17. data/lib/mongo_trails/callback_propagation.rb +77 -0
  18. data/lib/mongo_trails/config.rb +7 -24
  19. data/lib/mongo_trails/events/base.rb +5 -308
  20. data/lib/mongo_trails/model_config.rb +1 -232
  21. data/lib/mongo_trails/mongo_support/config.rb +7 -1
  22. data/lib/mongo_trails/mongo_support/criteria.rb +7 -0
  23. data/lib/mongo_trails/mongo_support/version.rb +249 -19
  24. data/lib/mongo_trails/mongo_support/version_commit_wrap.rb +37 -0
  25. data/lib/mongo_trails/mongo_support/write_version_worker.rb +11 -0
  26. data/lib/mongo_trails/record_trail.rb +21 -262
  27. data/lib/mongo_trails/version.rb +5 -0
  28. data/lib/mongo_trails/version_concern.rb +4 -293
  29. data/lib/mongo_trails.rb +13 -149
  30. data/mongo_trails.gemspec +19 -20
  31. metadata +51 -85
  32. data/.travis.yml +0 -13
  33. data/Gemfile.lock +0 -62
  34. data/gemfiles/rails_5.gemfile +0 -9
  35. data/gemfiles/rails_5.gemfile.lock +0 -63
  36. data/gemfiles/rails_6.gemfile +0 -9
  37. data/gemfiles/rails_6.gemfile.lock +0 -63
  38. data/lib/mongo_trails/attribute_serializers/README.md +0 -10
  39. data/lib/mongo_trails/attribute_serializers/attribute_serializer_factory.rb +0 -27
  40. data/lib/mongo_trails/attribute_serializers/cast_attribute_serializer.rb +0 -51
  41. data/lib/mongo_trails/attribute_serializers/object_attribute.rb +0 -41
  42. data/lib/mongo_trails/attribute_serializers/object_changes_attribute.rb +0 -44
  43. data/lib/mongo_trails/cleaner.rb +0 -60
  44. data/lib/mongo_trails/compatibility.rb +0 -51
  45. data/lib/mongo_trails/events/create.rb +0 -32
  46. data/lib/mongo_trails/events/destroy.rb +0 -42
  47. data/lib/mongo_trails/events/update.rb +0 -60
  48. data/lib/mongo_trails/frameworks/cucumber.rb +0 -33
  49. data/lib/mongo_trails/frameworks/rails/controller.rb +0 -109
  50. data/lib/mongo_trails/frameworks/rails/engine.rb +0 -43
  51. data/lib/mongo_trails/frameworks/rails.rb +0 -4
  52. data/lib/mongo_trails/frameworks/rspec/helpers.rb +0 -29
  53. data/lib/mongo_trails/frameworks/rspec.rb +0 -43
  54. data/lib/mongo_trails/has_paper_trail.rb +0 -86
  55. data/lib/mongo_trails/queries/versions/where_object.rb +0 -65
  56. data/lib/mongo_trails/queries/versions/where_object_changes.rb +0 -75
  57. data/lib/mongo_trails/record_history.rb +0 -51
  58. data/lib/mongo_trails/reifier.rb +0 -130
  59. data/lib/mongo_trails/request.rb +0 -166
  60. data/lib/mongo_trails/serializers/json.rb +0 -46
  61. data/lib/mongo_trails/serializers/yaml.rb +0 -43
  62. data/lib/mongo_trails/type_serializers/postgres_array_serializer.rb +0 -48
  63. data/lib/mongo_trails/version_number.rb +0 -23
metadata CHANGED
@@ -1,101 +1,84 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo_trails
3
3
  version: !ruby/object:Gem::Version
4
- version: 10.3.1
4
+ version: 14.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Tsirel
8
8
  - Ivan Romanyuk
9
- autorequire:
10
9
  bindir: exe
11
10
  cert_chain: []
12
- date: 2020-08-29 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: activerecord
14
+ name: mongoid
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
17
  - - ">="
19
18
  - !ruby/object:Gem::Version
20
- version: '5.2'
21
- type: :runtime
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- version: '5.2'
28
- - !ruby/object:Gem::Dependency
29
- name: request_store
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - "~>"
33
- - !ruby/object:Gem::Version
34
- version: '1.1'
35
- type: :runtime
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - "~>"
40
- - !ruby/object:Gem::Version
41
- version: '1.1'
42
- - !ruby/object:Gem::Dependency
43
- name: mongoid
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
19
+ version: '7'
46
20
  - - "<"
47
21
  - !ruby/object:Gem::Version
48
- version: '8'
22
+ version: '10'
49
23
  type: :runtime
50
24
  prerelease: false
51
25
  version_requirements: !ruby/object:Gem::Requirement
52
26
  requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '7'
53
30
  - - "<"
54
31
  - !ruby/object:Gem::Version
55
- version: '8'
32
+ version: '10'
56
33
  - !ruby/object:Gem::Dependency
57
- name: mongoid-autoinc
34
+ name: ostruct
58
35
  requirement: !ruby/object:Gem::Requirement
59
36
  requirements:
60
- - - "<"
37
+ - - ">="
61
38
  - !ruby/object:Gem::Version
62
- version: '7'
39
+ version: '0'
63
40
  type: :runtime
64
41
  prerelease: false
65
42
  version_requirements: !ruby/object:Gem::Requirement
66
43
  requirements:
67
- - - "<"
44
+ - - ">="
68
45
  - !ruby/object:Gem::Version
69
- version: '7'
46
+ version: '0'
70
47
  - !ruby/object:Gem::Dependency
71
- name: sqlite3
48
+ name: paper_trail
72
49
  requirement: !ruby/object:Gem::Requirement
73
50
  requirements:
74
51
  - - "~>"
75
52
  - !ruby/object:Gem::Version
76
- version: '1.4'
77
- type: :development
53
+ version: '16'
54
+ type: :runtime
78
55
  prerelease: false
79
56
  version_requirements: !ruby/object:Gem::Requirement
80
57
  requirements:
81
58
  - - "~>"
82
59
  - !ruby/object:Gem::Version
83
- version: '1.4'
60
+ version: '16'
84
61
  - !ruby/object:Gem::Dependency
85
- name: appraisal
62
+ name: sidekiq
86
63
  requirement: !ruby/object:Gem::Requirement
87
64
  requirements:
88
- - - "~>"
65
+ - - ">="
89
66
  - !ruby/object:Gem::Version
90
- version: '2.3'
91
- type: :development
67
+ version: '6.5'
68
+ - - "<"
69
+ - !ruby/object:Gem::Version
70
+ version: '9'
71
+ type: :runtime
92
72
  prerelease: false
93
73
  version_requirements: !ruby/object:Gem::Requirement
94
74
  requirements:
95
- - - "~>"
75
+ - - ">="
96
76
  - !ruby/object:Gem::Version
97
- version: '2.3'
98
- description: 'PaperTrail DropIn replacement to store version in MongoDB
77
+ version: '6.5'
78
+ - - "<"
79
+ - !ruby/object:Gem::Version
80
+ version: '9'
81
+ description: 'PaperTrail addon to store versions in MongoDB
99
82
 
100
83
  '
101
84
  email:
@@ -105,52 +88,35 @@ extensions: []
105
88
  extra_rdoc_files: []
106
89
  files:
107
90
  - ".gitattributes"
91
+ - ".github/workflows/test.yml"
108
92
  - ".gitignore"
109
- - ".travis.yml"
93
+ - ".rubocop.yml"
94
+ - ".ruby-version"
110
95
  - Appraisals
111
96
  - Gemfile
112
- - Gemfile.lock
113
97
  - LICENSE
114
98
  - README.md
115
99
  - Rakefile
116
- - gemfiles/rails_5.gemfile
117
- - gemfiles/rails_5.gemfile.lock
118
- - gemfiles/rails_6.gemfile
119
- - gemfiles/rails_6.gemfile.lock
100
+ - bin/bump-version
101
+ - gemfiles/rails_7.gemfile
102
+ - gemfiles/rails_7.gemfile.lock
103
+ - gemfiles/rails_8.gemfile
104
+ - gemfiles/rails_8.gemfile.lock
105
+ - gemfiles/rails_8_1.gemfile
106
+ - gemfiles/rails_8_1.gemfile.lock
120
107
  - lib/mongo_trails.rb
121
- - lib/mongo_trails/attribute_serializers/README.md
122
- - lib/mongo_trails/attribute_serializers/attribute_serializer_factory.rb
123
- - lib/mongo_trails/attribute_serializers/cast_attribute_serializer.rb
124
- - lib/mongo_trails/attribute_serializers/object_attribute.rb
125
- - lib/mongo_trails/attribute_serializers/object_changes_attribute.rb
126
- - lib/mongo_trails/cleaner.rb
127
- - lib/mongo_trails/compatibility.rb
108
+ - lib/mongo_trails/callback_propagation.rb
128
109
  - lib/mongo_trails/config.rb
129
110
  - lib/mongo_trails/events/base.rb
130
- - lib/mongo_trails/events/create.rb
131
- - lib/mongo_trails/events/destroy.rb
132
- - lib/mongo_trails/events/update.rb
133
- - lib/mongo_trails/frameworks/cucumber.rb
134
- - lib/mongo_trails/frameworks/rails.rb
135
- - lib/mongo_trails/frameworks/rails/controller.rb
136
- - lib/mongo_trails/frameworks/rails/engine.rb
137
- - lib/mongo_trails/frameworks/rspec.rb
138
- - lib/mongo_trails/frameworks/rspec/helpers.rb
139
- - lib/mongo_trails/has_paper_trail.rb
140
111
  - lib/mongo_trails/model_config.rb
141
112
  - lib/mongo_trails/mongo_support/config.rb
113
+ - lib/mongo_trails/mongo_support/criteria.rb
142
114
  - lib/mongo_trails/mongo_support/version.rb
143
- - lib/mongo_trails/queries/versions/where_object.rb
144
- - lib/mongo_trails/queries/versions/where_object_changes.rb
145
- - lib/mongo_trails/record_history.rb
115
+ - lib/mongo_trails/mongo_support/version_commit_wrap.rb
116
+ - lib/mongo_trails/mongo_support/write_version_worker.rb
146
117
  - lib/mongo_trails/record_trail.rb
147
- - lib/mongo_trails/reifier.rb
148
- - lib/mongo_trails/request.rb
149
- - lib/mongo_trails/serializers/json.rb
150
- - lib/mongo_trails/serializers/yaml.rb
151
- - lib/mongo_trails/type_serializers/postgres_array_serializer.rb
118
+ - lib/mongo_trails/version.rb
152
119
  - lib/mongo_trails/version_concern.rb
153
- - lib/mongo_trails/version_number.rb
154
120
  - mongo_trails.gemspec
155
121
  homepage: https://github.com/noma4i/mongo_trails
156
122
  licenses:
@@ -158,7 +124,8 @@ licenses:
158
124
  metadata:
159
125
  homepage_uri: https://github.com/noma4i/mongo_trails
160
126
  source_code_uri: https://github.com/noma4i/mongo_trails
161
- post_install_message:
127
+ allowed_push_host: https://rubygems.org
128
+ rubygems_mfa_required: 'true'
162
129
  rdoc_options: []
163
130
  require_paths:
164
131
  - lib
@@ -166,15 +133,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
166
133
  requirements:
167
134
  - - ">="
168
135
  - !ruby/object:Gem::Version
169
- version: '0'
136
+ version: '3.2'
170
137
  required_rubygems_version: !ruby/object:Gem::Requirement
171
138
  requirements:
172
139
  - - ">="
173
140
  - !ruby/object:Gem::Version
174
141
  version: '0'
175
142
  requirements: []
176
- rubygems_version: 3.0.8
177
- signing_key:
143
+ rubygems_version: 4.0.16
178
144
  specification_version: 4
179
- summary: PaperTrail DropIn replacement to store versions in MongoDB
145
+ summary: PaperTrail addon to store versions in MongoDB
180
146
  test_files: []
data/.travis.yml DELETED
@@ -1,13 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.5.3
6
- before_install: gem install bundler -v 2.1.4
7
- gemfile:
8
- - gemfiles/rails_5.gemfile
9
- - gemfiles/rails_6.gemfile
10
-
11
- services: mongodb
12
-
13
- script: 'bundle exec rake test'
data/Gemfile.lock DELETED
@@ -1,62 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- mongo_trails (10.3.1)
5
- activerecord (>= 5.2)
6
- mongoid (< 8)
7
- mongoid-autoinc (< 7)
8
- request_store (~> 1.1)
9
-
10
- GEM
11
- remote: https://rubygems.org/
12
- specs:
13
- activemodel (6.0.3.2)
14
- activesupport (= 6.0.3.2)
15
- activerecord (6.0.3.2)
16
- activemodel (= 6.0.3.2)
17
- activesupport (= 6.0.3.2)
18
- activesupport (6.0.3.2)
19
- concurrent-ruby (~> 1.0, >= 1.0.2)
20
- i18n (>= 0.7, < 2)
21
- minitest (~> 5.1)
22
- tzinfo (~> 1.1)
23
- zeitwerk (~> 2.2, >= 2.2.2)
24
- appraisal (2.3.0)
25
- bundler
26
- rake
27
- thor (>= 0.14.0)
28
- bson (4.10.0)
29
- concurrent-ruby (1.1.7)
30
- i18n (1.8.5)
31
- concurrent-ruby (~> 1.0)
32
- minitest (5.14.1)
33
- mongo (2.13.0)
34
- bson (>= 4.8.2, < 5.0.0)
35
- mongoid (7.1.2)
36
- activemodel (>= 5.1, < 6.1)
37
- mongo (>= 2.7.0, < 3.0.0)
38
- mongoid-autoinc (6.0.3)
39
- mongoid (>= 6.0, < 8.0)
40
- rack (2.2.3)
41
- rake (12.3.3)
42
- request_store (1.5.0)
43
- rack (>= 1.4)
44
- sqlite3 (1.4.2)
45
- thor (1.0.1)
46
- thread_safe (0.3.6)
47
- tzinfo (1.2.7)
48
- thread_safe (~> 0.1)
49
- zeitwerk (2.4.0)
50
-
51
- PLATFORMS
52
- ruby
53
-
54
- DEPENDENCIES
55
- appraisal (~> 2.3)
56
- minitest (~> 5.0)
57
- mongo_trails!
58
- rake (~> 12.0)
59
- sqlite3 (~> 1.4)
60
-
61
- BUNDLED WITH
62
- 1.17.3
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rake", "~> 12.0"
6
- gem "minitest", "~> 5.0"
7
- gem "activerecord", "~> 5.0"
8
-
9
- gemspec path: "../"
@@ -1,63 +0,0 @@
1
- PATH
2
- remote: ..
3
- specs:
4
- mongo_trails (10.3.1)
5
- activerecord (>= 5.2)
6
- mongoid (< 8)
7
- mongoid-autoinc (< 7)
8
- request_store (~> 1.1)
9
-
10
- GEM
11
- remote: https://rubygems.org/
12
- specs:
13
- activemodel (5.2.4.3)
14
- activesupport (= 5.2.4.3)
15
- activerecord (5.2.4.3)
16
- activemodel (= 5.2.4.3)
17
- activesupport (= 5.2.4.3)
18
- arel (>= 9.0)
19
- activesupport (5.2.4.3)
20
- concurrent-ruby (~> 1.0, >= 1.0.2)
21
- i18n (>= 0.7, < 2)
22
- minitest (~> 5.1)
23
- tzinfo (~> 1.1)
24
- appraisal (2.3.0)
25
- bundler
26
- rake
27
- thor (>= 0.14.0)
28
- arel (9.0.0)
29
- bson (4.10.0)
30
- concurrent-ruby (1.1.7)
31
- i18n (1.8.5)
32
- concurrent-ruby (~> 1.0)
33
- minitest (5.14.1)
34
- mongo (2.13.0)
35
- bson (>= 4.8.2, < 5.0.0)
36
- mongoid (7.1.2)
37
- activemodel (>= 5.1, < 6.1)
38
- mongo (>= 2.7.0, < 3.0.0)
39
- mongoid-autoinc (6.0.3)
40
- mongoid (>= 6.0, < 8.0)
41
- rack (2.2.3)
42
- rake (12.3.3)
43
- request_store (1.5.0)
44
- rack (>= 1.4)
45
- sqlite3 (1.4.2)
46
- thor (1.0.1)
47
- thread_safe (0.3.6)
48
- tzinfo (1.2.7)
49
- thread_safe (~> 0.1)
50
-
51
- PLATFORMS
52
- ruby
53
-
54
- DEPENDENCIES
55
- activerecord (~> 5.0)
56
- appraisal (~> 2.3)
57
- minitest (~> 5.0)
58
- mongo_trails!
59
- rake (~> 12.0)
60
- sqlite3 (~> 1.4)
61
-
62
- BUNDLED WITH
63
- 1.17.3
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rake", "~> 12.0"
6
- gem "minitest", "~> 5.0"
7
- gem "activerecord", "~> 6.0"
8
-
9
- gemspec path: "../"
@@ -1,63 +0,0 @@
1
- PATH
2
- remote: ..
3
- specs:
4
- mongo_trails (10.3.1)
5
- activerecord (>= 5.2)
6
- mongoid (< 8)
7
- mongoid-autoinc (< 7)
8
- request_store (~> 1.1)
9
-
10
- GEM
11
- remote: https://rubygems.org/
12
- specs:
13
- activemodel (6.0.3.2)
14
- activesupport (= 6.0.3.2)
15
- activerecord (6.0.3.2)
16
- activemodel (= 6.0.3.2)
17
- activesupport (= 6.0.3.2)
18
- activesupport (6.0.3.2)
19
- concurrent-ruby (~> 1.0, >= 1.0.2)
20
- i18n (>= 0.7, < 2)
21
- minitest (~> 5.1)
22
- tzinfo (~> 1.1)
23
- zeitwerk (~> 2.2, >= 2.2.2)
24
- appraisal (2.3.0)
25
- bundler
26
- rake
27
- thor (>= 0.14.0)
28
- bson (4.10.0)
29
- concurrent-ruby (1.1.7)
30
- i18n (1.8.5)
31
- concurrent-ruby (~> 1.0)
32
- minitest (5.14.1)
33
- mongo (2.13.0)
34
- bson (>= 4.8.2, < 5.0.0)
35
- mongoid (7.1.2)
36
- activemodel (>= 5.1, < 6.1)
37
- mongo (>= 2.7.0, < 3.0.0)
38
- mongoid-autoinc (6.0.3)
39
- mongoid (>= 6.0, < 8.0)
40
- rack (2.2.3)
41
- rake (12.3.3)
42
- request_store (1.5.0)
43
- rack (>= 1.4)
44
- sqlite3 (1.4.2)
45
- thor (1.0.1)
46
- thread_safe (0.3.6)
47
- tzinfo (1.2.7)
48
- thread_safe (~> 0.1)
49
- zeitwerk (2.4.0)
50
-
51
- PLATFORMS
52
- ruby
53
-
54
- DEPENDENCIES
55
- activerecord (~> 6.0)
56
- appraisal (~> 2.3)
57
- minitest (~> 5.0)
58
- mongo_trails!
59
- rake (~> 12.0)
60
- sqlite3 (~> 1.4)
61
-
62
- BUNDLED WITH
63
- 1.17.3
@@ -1,10 +0,0 @@
1
- Attribute Serializers
2
- =====================
3
-
4
- "Serialization" here refers to the preparation of data for insertion into a
5
- database, particularly the `object` and `object_changes` columns in the
6
- `versions` table.
7
-
8
- Likewise, "deserialization" refers to any processing of data after they
9
- have been read from the database, for example preparing the result of
10
- `VersionConcern#changeset`.
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "mongo_trails/type_serializers/postgres_array_serializer"
4
-
5
- module PaperTrail
6
- module AttributeSerializers
7
- # Values returned by some Active Record serializers are
8
- # not suited for writing JSON to a text column. This factory
9
- # replaces certain default Active Record serializers
10
- # with custom PaperTrail ones.
11
- module AttributeSerializerFactory
12
- AR_PG_ARRAY_CLASS = "ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Array"
13
-
14
- def self.for(klass, attr)
15
- active_record_serializer = klass.type_for_attribute(attr)
16
- if active_record_serializer.class.name == AR_PG_ARRAY_CLASS
17
- TypeSerializers::PostgresArraySerializer.new(
18
- active_record_serializer.subtype,
19
- active_record_serializer.delimiter
20
- )
21
- else
22
- active_record_serializer
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "mongo_trails/attribute_serializers/attribute_serializer_factory"
4
-
5
- module PaperTrail
6
- # :nodoc:
7
- module AttributeSerializers
8
- # The `CastAttributeSerializer` (de)serializes model attribute values. For
9
- # example, the string "1.99" serializes into the integer `1` when assigned
10
- # to an attribute of type `ActiveRecord::Type::Integer`.
11
- #
12
- # This implementation depends on the `type_for_attribute` method, which was
13
- # introduced in rails 4.2. As of PT 8, we no longer support rails < 4.2.
14
- class CastAttributeSerializer
15
- def initialize(klass)
16
- @klass = klass
17
- end
18
-
19
- private
20
-
21
- # Returns a hash mapping attributes to hashes that map strings to
22
- # integers. Example:
23
- #
24
- # ```
25
- # { "status" => { "draft"=>0, "published"=>1, "archived"=>2 } }
26
- # ```
27
- #
28
- # ActiveRecord::Enum was added in AR 4.1
29
- # http://edgeguides.rubyonrails.org/4_1_release_notes.html#active-record-enums
30
- def defined_enums
31
- @defined_enums ||= (@klass.respond_to?(:defined_enums) ? @klass.defined_enums : {})
32
- end
33
- end
34
-
35
- # Uses AR 5's `serialize` and `deserialize`.
36
- class CastAttributeSerializer
37
- def serialize(attr, val)
38
- AttributeSerializerFactory.for(@klass, attr).serialize(val)
39
- end
40
-
41
- def deserialize(attr, val)
42
- if defined_enums[attr] && val.is_a?(::String)
43
- # Because PT 4 used to save the string version of enums to `object_changes`
44
- val
45
- else
46
- AttributeSerializerFactory.for(@klass, attr).deserialize(val)
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "mongo_trails/attribute_serializers/cast_attribute_serializer"
4
-
5
- module PaperTrail
6
- module AttributeSerializers
7
- # Serialize or deserialize the `version.object` column.
8
- class ObjectAttribute
9
- def initialize(model_class)
10
- @model_class = model_class
11
- end
12
-
13
- def serialize(attributes)
14
- alter(attributes, :serialize)
15
- end
16
-
17
- def deserialize(attributes)
18
- alter(attributes, :deserialize)
19
- end
20
-
21
- private
22
-
23
- # Modifies `attributes` in place.
24
- # TODO: Return a new hash instead.
25
- def alter(attributes, serialization_method)
26
- # Don't serialize before values before inserting into columns of type
27
- # `JSON` on `PostgreSQL` databases.
28
- return attributes if object_col_is_json?
29
-
30
- serializer = CastAttributeSerializer.new(@model_class)
31
- attributes.each do |key, value|
32
- attributes[key] = serializer.send(serialization_method, key, value)
33
- end
34
- end
35
-
36
- def object_col_is_json?
37
- @model_class.paper_trail.version_class.object_col_is_json?
38
- end
39
- end
40
- end
41
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "mongo_trails/attribute_serializers/cast_attribute_serializer"
4
-
5
- module PaperTrail
6
- module AttributeSerializers
7
- # Serialize or deserialize the `version.object_changes` column.
8
- class ObjectChangesAttribute
9
- def initialize(item_class)
10
- @item_class = item_class
11
- end
12
-
13
- def serialize(changes)
14
- alter(changes, :serialize)
15
- end
16
-
17
- def deserialize(changes)
18
- alter(changes, :deserialize)
19
- end
20
-
21
- private
22
-
23
- # Modifies `changes` in place.
24
- # TODO: Return a new hash instead.
25
- def alter(changes, serialization_method)
26
- # Don't serialize before values before inserting into columns of type
27
- # `JSON` on `PostgreSQL` databases.
28
- return changes if object_changes_col_is_json?
29
-
30
- serializer = CastAttributeSerializer.new(@item_class)
31
- changes.clone.each do |key, change|
32
- # `change` is an Array with two elements, representing before and after.
33
- changes[key] = Array(change).map do |value|
34
- serializer.send(serialization_method, key, value)
35
- end
36
- end
37
- end
38
-
39
- def object_changes_col_is_json?
40
- @item_class.paper_trail.version_class.object_changes_col_is_json?
41
- end
42
- end
43
- end
44
- end
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PaperTrail
4
- # Utilities for deleting version records.
5
- module Cleaner
6
- # Destroys all but the most recent version(s) for items on a given date
7
- # (or on all dates). Useful for deleting drafts.
8
- #
9
- # Options:
10
- #
11
- # - :keeping - An `integer` indicating the number of versions to be kept for
12
- # each item per date. Defaults to `1`. The most recent matching versions
13
- # are kept.
14
- # - :date - Should either be a `Date` object specifying which date to
15
- # destroy versions for or `:all`, which will specify that all dates
16
- # should be cleaned. Defaults to `:all`.
17
- # - :item_id - The `id` for the item to be cleaned on, or `nil`, which
18
- # causes all items to be cleaned. Defaults to `nil`.
19
- #
20
- def clean_versions!(options = {})
21
- options = { keeping: 1, date: :all }.merge(options)
22
- gather_versions(options[:item_id], options[:date]).each do |_item_id, item_versions|
23
- group_versions_by_date(item_versions).each do |_date, date_versions|
24
- # Remove the number of versions we wish to keep from the collection
25
- # of versions prior to destruction.
26
- date_versions.pop(options[:keeping])
27
- date_versions.map(&:destroy)
28
- end
29
- end
30
- end
31
-
32
- private
33
-
34
- # Returns a hash of versions grouped by the `item_id` attribute formatted
35
- # like this: {:item_id => PaperTrail::Version}. If `item_id` or `date` is
36
- # set, versions will be narrowed to those pointing at items with those ids
37
- # that were created on specified date. Versions are returned in
38
- # chronological order.
39
- def gather_versions(item_id = nil, date = :all)
40
- unless date == :all || date.respond_to?(:to_date)
41
- raise ArgumentError, "Expected date to be a Timestamp or :all"
42
- end
43
- versions = item_id ? PaperTrail::Version.where(item_id: item_id) : PaperTrail::Version
44
- versions = versions.order(PaperTrail::Version.timestamp_sort_order)
45
- versions = versions.between(date.to_date, date.to_date + 1.day) unless date == :all
46
-
47
- # If `versions` has not been converted to an ActiveRecord::Relation yet,
48
- # do so now.
49
- versions = PaperTrail::Version.all if versions == PaperTrail::Version
50
- versions.group_by(&:item_id)
51
- end
52
-
53
- # Given an array of versions, returns a hash mapping dates to arrays of
54
- # versions.
55
- # @api private
56
- def group_versions_by_date(versions)
57
- versions.group_by { |v| v.created_at.to_date }
58
- end
59
- end
60
- end