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,343 +0,0 @@
1
- require "rails_helper"
2
-
3
- describe Widget, type: :model do
4
- describe "`be_versioned` matcher" do
5
- it { is_expected.to be_versioned }
6
- end
7
-
8
- let(:widget) { Widget.create! name: "Bob", an_integer: 1 }
9
-
10
- describe "`have_a_version_with` matcher", versioning: true do
11
- before do
12
- widget.update_attributes!(name: "Leonard", an_integer: 1)
13
- widget.update_attributes!(name: "Tom")
14
- widget.update_attributes!(name: "Bob")
15
- end
16
-
17
- it "is possible to do assertions on versions" do
18
- expect(widget).to have_a_version_with name: "Leonard", an_integer: 1
19
- expect(widget).to have_a_version_with an_integer: 1
20
- expect(widget).to have_a_version_with name: "Tom"
21
- end
22
- end
23
-
24
- describe "versioning option" do
25
- context "enabled", versioning: true do
26
- it "should enable versioning" do
27
- expect(widget.versions.size).to eq(1)
28
- end
29
- end
30
-
31
- context "disabled (default)" do
32
- it "should not enable versioning" do
33
- expect(widget.versions.size).to eq(0)
34
- end
35
- end
36
- end
37
-
38
- describe "Callbacks", versioning: true do
39
- describe :before_save do
40
- context ":on => :update" do
41
- before { widget.update_attributes!(name: "Foobar") }
42
-
43
- subject { widget.versions.last.reify }
44
-
45
- it "resets value for timestamp attrs for update so that value gets updated properly" do
46
- # Travel 1 second because MySQL lacks sub-second resolution
47
- Timecop.travel(1) do
48
- expect { subject.save! }.to change(subject, :updated_at)
49
- end
50
- end
51
- end
52
- end
53
-
54
- describe :after_create do
55
- let(:widget) { Widget.create!(name: "Foobar", created_at: Time.now - 1.week) }
56
-
57
- it "corresponding version should use the widget's `updated_at`" do
58
- expect(widget.versions.last.created_at.to_i).to eq(widget.updated_at.to_i)
59
- end
60
- end
61
-
62
- describe :after_update do
63
- before { widget.update_attributes!(name: "Foobar", updated_at: Time.now + 1.week) }
64
-
65
- subject { widget.versions.last.reify }
66
-
67
- it { expect(subject.paper_trail).not_to be_live }
68
-
69
- it "should clear the `versions_association_name` virtual attribute" do
70
- subject.save!
71
- expect(subject.paper_trail).to be_live
72
- end
73
-
74
- it "corresponding version should use the widget updated_at" do
75
- expect(widget.versions.last.created_at.to_i).to eq(widget.updated_at.to_i)
76
- end
77
- end
78
-
79
- describe :after_destroy do
80
- it "should create a version for that event" do
81
- expect { widget.destroy }.to change(widget.versions, :count).by(1)
82
- end
83
-
84
- it "should assign the version into the `versions_association_name`" do
85
- expect(widget.version).to be_nil
86
- widget.destroy
87
- expect(widget.version).not_to be_nil
88
- expect(widget.version).to eq(widget.versions.last)
89
- end
90
- end
91
-
92
- describe :after_rollback do
93
- let(:rolled_back_name) { "Big Moo" }
94
-
95
- before do
96
- begin
97
- widget.transaction do
98
- widget.update_attributes!(name: rolled_back_name)
99
- widget.update_attributes!(name: Widget::EXCLUDED_NAME)
100
- end
101
- rescue ActiveRecord::RecordInvalid
102
- widget.reload
103
- widget.name = nil
104
- widget.save
105
- end
106
- end
107
-
108
- it "does not create an event for changes that did not happen" do
109
- widget.versions.map(&:changeset).each do |changeset|
110
- expect(changeset.fetch("name", [])).to_not include(rolled_back_name)
111
- end
112
- end
113
-
114
- it "has not yet loaded the assocation" do
115
- expect(widget.versions).to_not be_loaded
116
- end
117
- end
118
- end
119
-
120
- describe "Association", versioning: true do
121
- describe "sort order" do
122
- it "should sort by the timestamp order from the `VersionConcern`" do
123
- expect(widget.versions.to_sql).to eq(
124
- widget.versions.reorder(PaperTrail::Version.timestamp_sort_order).to_sql
125
- )
126
- end
127
- end
128
- end
129
-
130
- if defined?(ActiveRecord::IdentityMap) && ActiveRecord::IdentityMap.respond_to?(:without)
131
- describe "IdentityMap", versioning: true do
132
- it "should not clobber the IdentityMap when reifying" do
133
- widget.update_attributes name: "Henry", created_at: Time.now - 1.day
134
- widget.update_attributes name: "Harry"
135
- expect(ActiveRecord::IdentityMap).to receive(:without).once
136
- widget.versions.last.reify
137
- end
138
- end
139
- end
140
-
141
- describe "Methods" do
142
- describe "Instance", versioning: true do
143
- describe "#create" do
144
- it "creates a version record" do
145
- wordget = Widget.create
146
- assert_equal 1, wordget.versions.length
147
- end
148
- end
149
-
150
- describe "#destroy" do
151
- it "creates a version record" do
152
- widget = Widget.create
153
- assert_equal 1, widget.versions.length
154
- widget.destroy
155
- versions_for_widget = PaperTrail::Version.with_item_keys("Widget", widget.id)
156
- assert_equal 2, versions_for_widget.length
157
- end
158
-
159
- it "can have multiple destruction records" do
160
- versions = lambda { |widget|
161
- # Workaround for AR 3. When we drop AR 3 support, we can simply use
162
- # the `widget.versions` association, instead of `with_item_keys`.
163
- PaperTrail::Version.with_item_keys("Widget", widget.id)
164
- }
165
- widget = Widget.create
166
- assert_equal 1, widget.versions.length
167
- widget.destroy
168
- assert_equal 2, versions.call(widget).length
169
- widget = widget.version.reify
170
- widget.save
171
- assert_equal 3, versions.call(widget).length
172
- widget.destroy
173
- assert_equal 4, versions.call(widget).length
174
- assert_equal 2, versions.call(widget).where(event: "destroy").length
175
- end
176
- end
177
-
178
- describe "#paper_trail.originator" do
179
- describe "return value" do
180
- let(:orig_name) { FFaker::Name.name }
181
- let(:new_name) { FFaker::Name.name }
182
- before { PaperTrail.whodunnit = orig_name }
183
-
184
- context "accessed from live model instance" do
185
- specify { expect(widget.paper_trail).to be_live }
186
-
187
- it "should return the originator for the model at a given state" do
188
- expect(widget.paper_trail.originator).to eq(orig_name)
189
- widget.paper_trail.whodunnit(new_name) { |w|
190
- w.update_attributes(name: "Elizabeth")
191
- }
192
- expect(widget.paper_trail.originator).to eq(new_name)
193
- end
194
- end
195
-
196
- context "accessed from a reified model instance" do
197
- before do
198
- widget.update_attributes(name: "Andy")
199
- PaperTrail.whodunnit = new_name
200
- widget.update_attributes(name: "Elizabeth")
201
- end
202
-
203
- context "default behavior (no `options[:dup]` option passed in)" do
204
- let(:reified_widget) { widget.versions[1].reify }
205
-
206
- it "should return the appropriate originator" do
207
- expect(reified_widget.paper_trail.originator).to eq(orig_name)
208
- end
209
-
210
- it "should not create a new model instance" do
211
- expect(reified_widget).not_to be_new_record
212
- end
213
- end
214
-
215
- context "creating a new instance (`options[:dup] == true`)" do
216
- let(:reified_widget) { widget.versions[1].reify(dup: true) }
217
-
218
- it "should return the appropriate originator" do
219
- expect(reified_widget.paper_trail.originator).to eq(orig_name)
220
- end
221
-
222
- it "should not create a new model instance" do
223
- expect(reified_widget).to be_new_record
224
- end
225
- end
226
- end
227
- end
228
- end
229
-
230
- describe "#version_at" do
231
- context "Timestamp argument is AFTER object has been destroyed" do
232
- it "should return `nil`" do
233
- widget.update_attribute(:name, "foobar")
234
- widget.destroy
235
- expect(widget.paper_trail.version_at(Time.now)).to be_nil
236
- end
237
- end
238
- end
239
-
240
- describe "#whodunnit" do
241
- it { is_expected.to respond_to(:whodunnit) }
242
-
243
- context "no block given" do
244
- it "should raise an error" do
245
- expect {
246
- widget.paper_trail.whodunnit("Ben")
247
- }.to raise_error(ArgumentError, "expected to receive a block")
248
- end
249
- end
250
-
251
- context "block given" do
252
- let(:orig_name) { FFaker::Name.name }
253
- let(:new_name) { FFaker::Name.name }
254
-
255
- before do
256
- PaperTrail.whodunnit = orig_name
257
- expect(widget.versions.last.whodunnit).to eq(orig_name) # persist `widget`
258
- end
259
-
260
- it "should modify value of `PaperTrail.whodunnit` while executing the block" do
261
- widget.paper_trail.whodunnit(new_name) do
262
- expect(PaperTrail.whodunnit).to eq(new_name)
263
- widget.update_attributes(name: "Elizabeth")
264
- end
265
- expect(widget.versions.last.whodunnit).to eq(new_name)
266
- end
267
-
268
- context "after executing the block" do
269
- it "reverts value of whodunnit to previous value" do
270
- widget.paper_trail.whodunnit(new_name) { |w|
271
- w.update_attributes(name: "Elizabeth")
272
- }
273
- expect(PaperTrail.whodunnit).to eq(orig_name)
274
- end
275
- end
276
-
277
- context "error within block" do
278
- it "still reverts the whodunnit value to previous value" do
279
- expect {
280
- widget.paper_trail.whodunnit(new_name) { raise }
281
- }.to raise_error(RuntimeError)
282
- expect(PaperTrail.whodunnit).to eq(orig_name)
283
- end
284
- end
285
- end
286
- end
287
-
288
- describe "#touch_with_version" do
289
- it "creates a version" do
290
- count = widget.versions.size
291
- # Travel 1 second because MySQL lacks sub-second resolution
292
- Timecop.travel(1) do
293
- widget.paper_trail.touch_with_version
294
- end
295
- expect(widget.versions.size).to eq(count + 1)
296
- end
297
-
298
- it "increments the `:updated_at` timestamp" do
299
- time_was = widget.updated_at
300
- # Travel 1 second because MySQL lacks sub-second resolution
301
- Timecop.travel(1) do
302
- widget.paper_trail.touch_with_version
303
- end
304
- expect(widget.updated_at).to be > time_was
305
- end
306
- end
307
-
308
- describe "#update" do
309
- it "creates a version record" do
310
- widget = Widget.create
311
- assert_equal 1, widget.versions.length
312
- widget.update_attributes(name: "Bugle")
313
- assert_equal 2, widget.versions.length
314
- end
315
- end
316
- end
317
-
318
- describe "Class" do
319
- describe ".paper_trail.enabled?" do
320
- it "returns true" do
321
- expect(Widget.paper_trail.enabled?).to eq(true)
322
- end
323
- end
324
-
325
- describe ".disable" do
326
- it "should set the `paper_trail.enabled?` to `false`" do
327
- expect(Widget.paper_trail.enabled?).to eq(true)
328
- Widget.paper_trail.disable
329
- expect(Widget.paper_trail.enabled?).to eq(false)
330
- end
331
- end
332
-
333
- describe ".enable" do
334
- it "should set the `paper_trail.enabled?` to `true`" do
335
- Widget.paper_trail.disable
336
- expect(Widget.paper_trail.enabled?).to eq(false)
337
- Widget.paper_trail.enable
338
- expect(Widget.paper_trail.enabled?).to eq(true)
339
- end
340
- end
341
- end
342
- end
343
- end
@@ -1,27 +0,0 @@
1
- require "rails_helper"
2
-
3
- describe PaperTrail, type: :module, versioning: true do
4
- describe "#config" do
5
- it { is_expected.to respond_to(:config) }
6
-
7
- it "should allow for config values to be set" do
8
- expect(subject.config.enabled).to eq(true)
9
- subject.config.enabled = false
10
- expect(subject.config.enabled).to eq(false)
11
- end
12
-
13
- it "should accept blocks and yield the config instance" do
14
- expect(subject.config.enabled).to eq(true)
15
- subject.config { |c| c.enabled = false }
16
- expect(subject.config.enabled).to eq(false)
17
- end
18
- end
19
-
20
- describe "#configure" do
21
- it { is_expected.to respond_to(:configure) }
22
-
23
- it "should be an alias for the `config` method" do
24
- expect(subject.method(:configure)).to eq(subject.method(:config))
25
- end
26
- end
27
- end
@@ -1,31 +0,0 @@
1
- require "rails_helper"
2
-
3
- describe PaperTrail::VersionConcern do
4
- before(:all) { require "support/alt_db_init" }
5
-
6
- it "allows included class to have different connections" do
7
- expect(Foo::Version.connection).not_to eq(Bar::Version.connection)
8
- end
9
-
10
- it "allows custom version class to share connection with superclass" do
11
- expect(Foo::Version.connection).to eq(Foo::Document.connection)
12
- expect(Bar::Version.connection).to eq(Bar::Document.connection)
13
- end
14
-
15
- it "can be used with class_name option" do
16
- expect(Foo::Document.version_class_name).to eq("Foo::Version")
17
- expect(Bar::Document.version_class_name).to eq("Bar::Version")
18
- end
19
-
20
- describe "persistence", versioning: true do
21
- before do
22
- @foo_doc = Foo::Document.create!(name: "foobar")
23
- @bar_doc = Bar::Document.create!(name: "raboof")
24
- end
25
-
26
- it "should store versions in the correct corresponding db location" do
27
- expect(@foo_doc.versions.first).to be_instance_of(Foo::Version)
28
- expect(@bar_doc.versions.first).to be_instance_of(Bar::Version)
29
- end
30
- end
31
- end
@@ -1,43 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe PaperTrail::VERSION do
4
- describe "Constants" do
5
- subject { PaperTrail::VERSION }
6
-
7
- describe :MAJOR do
8
- it { is_expected.to be_const_defined(:MAJOR) }
9
- it { expect(subject::MAJOR).to be_a(Integer) }
10
- end
11
- describe :MINOR do
12
- it { is_expected.to be_const_defined(:MINOR) }
13
- it { expect(subject::MINOR).to be_a(Integer) }
14
- end
15
- describe :TINY do
16
- it { is_expected.to be_const_defined(:TINY) }
17
- it { expect(subject::TINY).to be_a(Integer) }
18
- end
19
- describe :PRE do
20
- it { is_expected.to be_const_defined(:PRE) }
21
- if PaperTrail::VERSION::PRE
22
- it { expect(subject::PRE).to be_instance_of(String) }
23
- end
24
- end
25
- describe :STRING do
26
- it { is_expected.to be_const_defined(:STRING) }
27
- it { expect(subject::STRING).to be_instance_of(String) }
28
-
29
- it "should join the numbers into a period separated string" do
30
- expect(subject::STRING).to eq(
31
- [subject::MAJOR, subject::MINOR, subject::TINY, subject::PRE].compact.join(".")
32
- )
33
- end
34
- end
35
- end
36
- end
37
-
38
- describe PaperTrail do
39
- describe "#version" do
40
- it { is_expected.to respond_to(:version) }
41
- it { expect(subject.version).to eq(PaperTrail::VERSION::STRING) }
42
- end
43
- end
@@ -1,33 +0,0 @@
1
- require "rails_helper"
2
-
3
- module PaperTrail
4
- RSpec.describe Config do
5
- describe ".instance" do
6
- it "returns the singleton instance" do
7
- expect { described_class.instance }.to_not raise_error
8
- end
9
- end
10
-
11
- describe ".new" do
12
- it "raises NoMethodError" do
13
- expect { described_class.new }.to raise_error(NoMethodError)
14
- end
15
- end
16
-
17
- describe "track_associations?" do
18
- context "@track_associations is nil" do
19
- after do
20
- PaperTrail.config.track_associations = true
21
- end
22
-
23
- it "returns false and prints a deprecation warning" do
24
- config = described_class.instance
25
- config.track_associations = nil
26
- expect {
27
- expect(config.track_associations?).to eq(false)
28
- }.to output(/DEPRECATION WARNING/).to_stderr
29
- end
30
- end
31
- end
32
- end
33
- end