paper_trail-association_tracking 0.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 (29) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +8 -0
  3. data/LICENSE +20 -0
  4. data/README.md +252 -0
  5. data/Rakefile +61 -0
  6. data/lib/generators/paper_trail_association_tracking/install_generator.rb +64 -0
  7. data/lib/generators/paper_trail_association_tracking/templates/add_transaction_id_column_to_versions.rb.erb +13 -0
  8. data/lib/generators/paper_trail_association_tracking/templates/create_version_associations.rb.erb +22 -0
  9. data/lib/paper_trail-association_tracking.rb +68 -0
  10. data/lib/paper_trail_association_tracking/config.rb +26 -0
  11. data/lib/paper_trail_association_tracking/frameworks/active_record.rb +5 -0
  12. data/lib/paper_trail_association_tracking/frameworks/active_record/models/paper_trail/version_association.rb +13 -0
  13. data/lib/paper_trail_association_tracking/frameworks/rails.rb +3 -0
  14. data/lib/paper_trail_association_tracking/frameworks/rails/engine.rb +10 -0
  15. data/lib/paper_trail_association_tracking/frameworks/rspec.rb +20 -0
  16. data/lib/paper_trail_association_tracking/model_config.rb +76 -0
  17. data/lib/paper_trail_association_tracking/paper_trail.rb +38 -0
  18. data/lib/paper_trail_association_tracking/record_trail.rb +200 -0
  19. data/lib/paper_trail_association_tracking/reifier.rb +125 -0
  20. data/lib/paper_trail_association_tracking/reifiers/belongs_to.rb +50 -0
  21. data/lib/paper_trail_association_tracking/reifiers/has_and_belongs_to_many.rb +52 -0
  22. data/lib/paper_trail_association_tracking/reifiers/has_many.rb +112 -0
  23. data/lib/paper_trail_association_tracking/reifiers/has_many_through.rb +92 -0
  24. data/lib/paper_trail_association_tracking/reifiers/has_one.rb +135 -0
  25. data/lib/paper_trail_association_tracking/request.rb +32 -0
  26. data/lib/paper_trail_association_tracking/version.rb +5 -0
  27. data/lib/paper_trail_association_tracking/version_association_concern.rb +13 -0
  28. data/lib/paper_trail_association_tracking/version_concern.rb +37 -0
  29. metadata +260 -0
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PaperTrailAssociationTracking
4
+ module Request
5
+ module ClassMethods
6
+ # @api private
7
+ def clear_transaction_id
8
+ self.transaction_id = nil
9
+ end
10
+
11
+ # @api private
12
+ def transaction_id
13
+ store[:transaction_id]
14
+ end
15
+
16
+ # @api private
17
+ def transaction_id=(id)
18
+ store[:transaction_id] = id
19
+ end
20
+
21
+ private
22
+
23
+ def validate_public_options(options)
24
+ if options.keys.include?(:transaction_id)
25
+ raise ::PaperTrail::Request::InvalidOption, "Cannot set private option: transaction_id"
26
+ else
27
+ super
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PaperTrailAssociationTracking
4
+ VERSION = "0.0.1"
5
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PaperTrailAssociationTracking
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
+ end
12
+ end
13
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PaperTrailAssociationTracking
4
+ # Originally, PaperTrail did not provide this module, and all of this
5
+ # functionality was in `PaperTrail::Version`. That model still exists (and is
6
+ # used by most apps) but by moving the functionality to this module, people
7
+ # can include this concern instead of sub-classing the `Version` model.
8
+ module VersionConcern
9
+ extend ::ActiveSupport::Concern
10
+
11
+ included do
12
+ # Since the test suite has test coverage for this, we want to declare the association when the test suite is running.
13
+ # This makes it pass when DB is not initialized prior to test runs such as when we run on Travis CI
14
+ # Ex. (there won't be a db in `spec/dummy_app/db/`).
15
+ if ::PaperTrail.config.track_associations?
16
+ has_many :version_associations, dependent: :destroy
17
+ end
18
+
19
+ scope(:within_transaction, ->(id) { where transaction_id: id })
20
+ end
21
+
22
+ # Restore the item from this version.
23
+ #
24
+ # In addition to the options provided by PaperTrail core. This Plugin provides the following Options:
25
+ #
26
+ # - :has_one
27
+ # - `true` - Also reify has_one associations.
28
+ # - `false - Default.
29
+ # - :has_many
30
+ # - `true` - Also reify has_many and has_many :through associations.
31
+ # - `false` - Default.
32
+ #
33
+ #def reify(options = {})
34
+ # super
35
+ #end
36
+ end
37
+ end
metadata ADDED
@@ -0,0 +1,260 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: paper_trail-association_tracking
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Weston Ganger
8
+ - Jared Beck
9
+ - Ben Atkins
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2018-06-03 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: appraisal
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '2.2'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '2.2'
29
+ - !ruby/object:Gem::Dependency
30
+ name: byebug
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '9.1'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '9.1'
43
+ - !ruby/object:Gem::Dependency
44
+ name: ffaker
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '2.7'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '2.7'
57
+ - !ruby/object:Gem::Dependency
58
+ name: generator_spec
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: 0.9.4
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: 0.9.4
71
+ - !ruby/object:Gem::Dependency
72
+ name: mysql2
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: 0.4.10
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: 0.4.10
85
+ - !ruby/object:Gem::Dependency
86
+ name: pg
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: 0.21.0
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: 0.21.0
99
+ - !ruby/object:Gem::Dependency
100
+ name: rack-test
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: 0.6.3
106
+ - - "<"
107
+ - !ruby/object:Gem::Version
108
+ version: '0.9'
109
+ type: :development
110
+ prerelease: false
111
+ version_requirements: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: 0.6.3
116
+ - - "<"
117
+ - !ruby/object:Gem::Version
118
+ version: '0.9'
119
+ - !ruby/object:Gem::Dependency
120
+ name: rake
121
+ requirement: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '12.3'
126
+ type: :development
127
+ prerelease: false
128
+ version_requirements: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '12.3'
133
+ - !ruby/object:Gem::Dependency
134
+ name: rspec-rails
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: 3.7.2
140
+ type: :development
141
+ prerelease: false
142
+ version_requirements: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: 3.7.2
147
+ - !ruby/object:Gem::Dependency
148
+ name: rubocop
149
+ requirement: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 0.51.0
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: 0.51.0
161
+ - !ruby/object:Gem::Dependency
162
+ name: rubocop-rspec
163
+ requirement: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: 1.19.0
168
+ type: :development
169
+ prerelease: false
170
+ version_requirements: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: 1.19.0
175
+ - !ruby/object:Gem::Dependency
176
+ name: sqlite3
177
+ requirement: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '1.3'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: '1.3'
189
+ - !ruby/object:Gem::Dependency
190
+ name: timecop
191
+ requirement: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: 0.9.1
196
+ type: :development
197
+ prerelease: false
198
+ version_requirements: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: 0.9.1
203
+ description: Plugin for the PaperTrail gem to track and reify associations
204
+ email: weston@westonganger.com
205
+ executables: []
206
+ extensions: []
207
+ extra_rdoc_files: []
208
+ files:
209
+ - CHANGELOG.md
210
+ - LICENSE
211
+ - README.md
212
+ - Rakefile
213
+ - lib/generators/paper_trail_association_tracking/install_generator.rb
214
+ - lib/generators/paper_trail_association_tracking/templates/add_transaction_id_column_to_versions.rb.erb
215
+ - lib/generators/paper_trail_association_tracking/templates/create_version_associations.rb.erb
216
+ - lib/paper_trail-association_tracking.rb
217
+ - lib/paper_trail_association_tracking/config.rb
218
+ - lib/paper_trail_association_tracking/frameworks/active_record.rb
219
+ - lib/paper_trail_association_tracking/frameworks/active_record/models/paper_trail/version_association.rb
220
+ - lib/paper_trail_association_tracking/frameworks/rails.rb
221
+ - lib/paper_trail_association_tracking/frameworks/rails/engine.rb
222
+ - lib/paper_trail_association_tracking/frameworks/rspec.rb
223
+ - lib/paper_trail_association_tracking/model_config.rb
224
+ - lib/paper_trail_association_tracking/paper_trail.rb
225
+ - lib/paper_trail_association_tracking/record_trail.rb
226
+ - lib/paper_trail_association_tracking/reifier.rb
227
+ - lib/paper_trail_association_tracking/reifiers/belongs_to.rb
228
+ - lib/paper_trail_association_tracking/reifiers/has_and_belongs_to_many.rb
229
+ - lib/paper_trail_association_tracking/reifiers/has_many.rb
230
+ - lib/paper_trail_association_tracking/reifiers/has_many_through.rb
231
+ - lib/paper_trail_association_tracking/reifiers/has_one.rb
232
+ - lib/paper_trail_association_tracking/request.rb
233
+ - lib/paper_trail_association_tracking/version.rb
234
+ - lib/paper_trail_association_tracking/version_association_concern.rb
235
+ - lib/paper_trail_association_tracking/version_concern.rb
236
+ homepage: https://github.com/westonganger/paper_trail-association_tracking
237
+ licenses:
238
+ - MIT
239
+ metadata: {}
240
+ post_install_message:
241
+ rdoc_options: []
242
+ require_paths:
243
+ - lib
244
+ required_ruby_version: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - ">="
247
+ - !ruby/object:Gem::Version
248
+ version: 2.3.0
249
+ required_rubygems_version: !ruby/object:Gem::Requirement
250
+ requirements:
251
+ - - ">="
252
+ - !ruby/object:Gem::Version
253
+ version: 1.3.6
254
+ requirements: []
255
+ rubyforge_project:
256
+ rubygems_version: 2.7.6
257
+ signing_key:
258
+ specification_version: 4
259
+ summary: Plugin for the PaperTrail gem to track and reify associations
260
+ test_files: []