paper_trail 7.1.0 → 7.1.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.
- checksums.yaml +4 -4
- data/lib/paper_trail/record_trail.rb +1 -1
- data/lib/paper_trail/version_number.rb +1 -1
- metadata +3 -274
- data/.github/CONTRIBUTING.md +0 -151
- data/.github/ISSUE_TEMPLATE.md +0 -13
- data/.gitignore +0 -23
- data/.rspec +0 -2
- data/.rubocop.yml +0 -135
- data/.rubocop_todo.yml +0 -41
- data/.travis.yml +0 -41
- data/Appraisals +0 -26
- data/CHANGELOG.md +0 -739
- data/Gemfile +0 -2
- data/MIT-LICENSE +0 -20
- data/README.md +0 -1613
- data/Rakefile +0 -38
- data/doc/bug_report_template.rb +0 -73
- data/doc/triage.md +0 -27
- data/doc/warning_about_not_setting_whodunnit.md +0 -33
- data/gemfiles/ar_4.0.gemfile +0 -7
- data/gemfiles/ar_4.2.gemfile +0 -7
- data/gemfiles/ar_5.0.gemfile +0 -8
- data/gemfiles/ar_5.1.gemfile +0 -8
- data/gemfiles/ar_master.gemfile +0 -9
- data/lib/generators/paper_trail/default_initializer.rb +0 -0
- data/paper_trail.gemspec +0 -49
- data/spec/controllers/articles_controller_spec.rb +0 -28
- data/spec/controllers/widgets_controller_spec.rb +0 -85
- data/spec/dummy_app/Rakefile +0 -7
- data/spec/dummy_app/app/controllers/application_controller.rb +0 -30
- data/spec/dummy_app/app/controllers/articles_controller.rb +0 -16
- data/spec/dummy_app/app/controllers/test_controller.rb +0 -5
- data/spec/dummy_app/app/controllers/widgets_controller.rb +0 -28
- data/spec/dummy_app/app/models/animal.rb +0 -4
- data/spec/dummy_app/app/models/article.rb +0 -25
- data/spec/dummy_app/app/models/authorship.rb +0 -5
- data/spec/dummy_app/app/models/bar_habtm.rb +0 -4
- data/spec/dummy_app/app/models/book.rb +0 -9
- data/spec/dummy_app/app/models/boolit.rb +0 -4
- data/spec/dummy_app/app/models/callback_modifier.rb +0 -45
- data/spec/dummy_app/app/models/car.rb +0 -3
- data/spec/dummy_app/app/models/cat.rb +0 -2
- data/spec/dummy_app/app/models/chapter.rb +0 -9
- data/spec/dummy_app/app/models/citation.rb +0 -5
- data/spec/dummy_app/app/models/custom_primary_key_record.rb +0 -15
- data/spec/dummy_app/app/models/customer.rb +0 -4
- data/spec/dummy_app/app/models/document.rb +0 -8
- data/spec/dummy_app/app/models/dog.rb +0 -2
- data/spec/dummy_app/app/models/editor.rb +0 -4
- data/spec/dummy_app/app/models/editorship.rb +0 -5
- data/spec/dummy_app/app/models/elephant.rb +0 -3
- data/spec/dummy_app/app/models/fluxor.rb +0 -3
- data/spec/dummy_app/app/models/foo_habtm.rb +0 -5
- data/spec/dummy_app/app/models/foo_widget.rb +0 -2
- data/spec/dummy_app/app/models/fruit.rb +0 -5
- data/spec/dummy_app/app/models/gadget.rb +0 -3
- data/spec/dummy_app/app/models/kitchen/banana.rb +0 -5
- data/spec/dummy_app/app/models/legacy_widget.rb +0 -6
- data/spec/dummy_app/app/models/line_item.rb +0 -4
- data/spec/dummy_app/app/models/not_on_update.rb +0 -4
- data/spec/dummy_app/app/models/on/create.rb +0 -6
- data/spec/dummy_app/app/models/on/destroy.rb +0 -6
- data/spec/dummy_app/app/models/on/empty_array.rb +0 -6
- data/spec/dummy_app/app/models/on/update.rb +0 -6
- data/spec/dummy_app/app/models/order.rb +0 -5
- data/spec/dummy_app/app/models/paragraph.rb +0 -5
- data/spec/dummy_app/app/models/person.rb +0 -39
- data/spec/dummy_app/app/models/post.rb +0 -3
- data/spec/dummy_app/app/models/post_with_status.rb +0 -7
- data/spec/dummy_app/app/models/quotation.rb +0 -5
- data/spec/dummy_app/app/models/section.rb +0 -6
- data/spec/dummy_app/app/models/skipper.rb +0 -3
- data/spec/dummy_app/app/models/song.rb +0 -37
- data/spec/dummy_app/app/models/thing.rb +0 -3
- data/spec/dummy_app/app/models/translation.rb +0 -11
- data/spec/dummy_app/app/models/truck.rb +0 -4
- data/spec/dummy_app/app/models/vehicle.rb +0 -4
- data/spec/dummy_app/app/models/whatchamajigger.rb +0 -4
- data/spec/dummy_app/app/models/widget.rb +0 -8
- data/spec/dummy_app/app/models/wotsit.rb +0 -8
- data/spec/dummy_app/app/versions/custom_primary_key_record_version.rb +0 -3
- data/spec/dummy_app/app/versions/joined_version.rb +0 -6
- data/spec/dummy_app/app/versions/json_version.rb +0 -3
- data/spec/dummy_app/app/versions/kitchen/banana_version.rb +0 -5
- data/spec/dummy_app/app/versions/post_version.rb +0 -3
- data/spec/dummy_app/config.ru +0 -4
- data/spec/dummy_app/config/application.rb +0 -39
- data/spec/dummy_app/config/boot.rb +0 -24
- data/spec/dummy_app/config/database.mysql.yml +0 -19
- data/spec/dummy_app/config/database.postgres.yml +0 -15
- data/spec/dummy_app/config/database.sqlite.yml +0 -15
- data/spec/dummy_app/config/environment.rb +0 -5
- data/spec/dummy_app/config/environments/development.rb +0 -36
- data/spec/dummy_app/config/environments/production.rb +0 -74
- data/spec/dummy_app/config/environments/test.rb +0 -46
- data/spec/dummy_app/config/initializers/backtrace_silencers.rb +0 -9
- data/spec/dummy_app/config/initializers/inflections.rb +0 -10
- data/spec/dummy_app/config/initializers/mime_types.rb +0 -5
- data/spec/dummy_app/config/initializers/paper_trail.rb +0 -1
- data/spec/dummy_app/config/initializers/secret_token.rb +0 -9
- data/spec/dummy_app/config/initializers/session_store.rb +0 -8
- data/spec/dummy_app/config/locales/en.yml +0 -5
- data/spec/dummy_app/config/routes.rb +0 -4
- data/spec/dummy_app/db/migrate/20110208155312_set_up_test_tables.rb +0 -344
- data/spec/dummy_app/db/schema.rb +0 -298
- data/spec/generators/install_generator_spec.rb +0 -88
- data/spec/models/animal_spec.rb +0 -61
- data/spec/models/article_spec.rb +0 -186
- data/spec/models/boolit_spec.rb +0 -41
- data/spec/models/callback_modifier_spec.rb +0 -92
- data/spec/models/car_spec.rb +0 -13
- data/spec/models/custom_primary_key_record_spec.rb +0 -18
- data/spec/models/document_spec.rb +0 -57
- data/spec/models/gadget_spec.rb +0 -63
- data/spec/models/joined_version_spec.rb +0 -41
- data/spec/models/json_version_spec.rb +0 -101
- data/spec/models/kitchen/banana_spec.rb +0 -14
- data/spec/models/legacy_widget_spec.rb +0 -40
- data/spec/models/not_on_update_spec.rb +0 -22
- data/spec/models/on/create_spec.rb +0 -27
- data/spec/models/on/destroy_spec.rb +0 -27
- data/spec/models/on/empty_array_spec.rb +0 -30
- data/spec/models/on/update_spec.rb +0 -27
- data/spec/models/post_with_status_spec.rb +0 -46
- data/spec/models/skipper_spec.rb +0 -42
- data/spec/models/thing_spec.rb +0 -11
- data/spec/models/translation_spec.rb +0 -70
- data/spec/models/vehicle_spec.rb +0 -5
- data/spec/models/version_spec.rb +0 -282
- data/spec/models/widget_spec.rb +0 -338
- data/spec/modules/paper_trail_spec.rb +0 -27
- data/spec/modules/version_concern_spec.rb +0 -28
- data/spec/modules/version_number_spec.rb +0 -18
- data/spec/paper_trail/associations_spec.rb +0 -965
- data/spec/paper_trail/cleaner_spec.rb +0 -152
- data/spec/paper_trail/config_spec.rb +0 -45
- data/spec/paper_trail/model_spec.rb +0 -992
- data/spec/paper_trail/serializer_spec.rb +0 -85
- data/spec/paper_trail/serializers/custom_json_serializer_spec.rb +0 -18
- data/spec/paper_trail/serializers/custom_yaml_serializer_spec.rb +0 -45
- data/spec/paper_trail/serializers/json_spec.rb +0 -57
- data/spec/paper_trail/serializers/yaml_spec.rb +0 -42
- data/spec/paper_trail/thread_safety_spec.rb +0 -44
- data/spec/paper_trail/version_limit_spec.rb +0 -55
- data/spec/paper_trail/version_spec.rb +0 -96
- data/spec/paper_trail_spec.rb +0 -122
- data/spec/requests/articles_spec.rb +0 -34
- data/spec/spec_helper.rb +0 -78
- data/spec/support/alt_db_init.rb +0 -54
- data/spec/support/custom_json_serializer.rb +0 -13
data/spec/paper_trail_spec.rb
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
|
|
3
|
-
RSpec.describe PaperTrail do
|
|
4
|
-
describe ".gem_version" do
|
|
5
|
-
it "returns a Gem::Version" do
|
|
6
|
-
v = described_class.gem_version
|
|
7
|
-
expect(v).to be_a(::Gem::Version)
|
|
8
|
-
expect(v.to_s).to eq(::PaperTrail::VERSION::STRING)
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
context "when enabled" do
|
|
13
|
-
it "affects all threads" do
|
|
14
|
-
Thread.new { described_class.enabled = false }.join
|
|
15
|
-
assert_equal false, described_class.enabled?
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
after do
|
|
19
|
-
described_class.enabled = true
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
context "default" do
|
|
24
|
-
it "has versioning off by default" do
|
|
25
|
-
expect(described_class).not_to be_enabled
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "has versioning on in a `with_versioning` block" do
|
|
29
|
-
expect(described_class).not_to be_enabled
|
|
30
|
-
with_versioning do
|
|
31
|
-
expect(described_class).to be_enabled
|
|
32
|
-
end
|
|
33
|
-
expect(described_class).not_to be_enabled
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
context "error within `with_versioning` block" do
|
|
37
|
-
it "reverts the value of `PaperTrail.enabled?` to its previous state" do
|
|
38
|
-
expect(described_class).not_to be_enabled
|
|
39
|
-
expect { with_versioning { raise } }.to raise_error(RuntimeError)
|
|
40
|
-
expect(described_class).not_to be_enabled
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
context "`versioning: true`", versioning: true do
|
|
46
|
-
it "has versioning on by default" do
|
|
47
|
-
expect(described_class).to be_enabled
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "keeps versioning on after a with_versioning block" do
|
|
51
|
-
expect(described_class).to be_enabled
|
|
52
|
-
with_versioning do
|
|
53
|
-
expect(described_class).to be_enabled
|
|
54
|
-
end
|
|
55
|
-
expect(described_class).to be_enabled
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
context "`with_versioning` block at class level" do
|
|
60
|
-
it { expect(described_class).not_to be_enabled }
|
|
61
|
-
|
|
62
|
-
with_versioning do
|
|
63
|
-
it "has versioning on by default" do
|
|
64
|
-
expect(described_class).to be_enabled
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
it "does not leak the `enabled?` state into successive tests" do
|
|
68
|
-
expect(described_class).not_to be_enabled
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
describe ".version" do
|
|
73
|
-
it { expect(described_class).to respond_to(:version) }
|
|
74
|
-
it { expect(described_class.version).to eq(described_class::VERSION::STRING) }
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
describe ".whodunnit" do
|
|
78
|
-
context "when set globally" do
|
|
79
|
-
before(:all) { described_class.whodunnit = "foobar" }
|
|
80
|
-
|
|
81
|
-
it "is set to `nil` by default" do
|
|
82
|
-
expect(described_class.whodunnit).to be_nil
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
context "with block passed" do
|
|
87
|
-
it "sets whodunnit only for the block passed" do
|
|
88
|
-
described_class.whodunnit("foo") do
|
|
89
|
-
expect(described_class.whodunnit).to eq("foo")
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
expect(described_class.whodunnit).to be_nil
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "sets whodunnit only for the current thread" do
|
|
96
|
-
described_class.whodunnit("foo") do
|
|
97
|
-
expect(described_class.whodunnit).to eq("foo")
|
|
98
|
-
Thread.new { expect(described_class.whodunnit).to be_nil }.join
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
expect(described_class.whodunnit).to be_nil
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
context "when set to a proc" do
|
|
106
|
-
it "evaluates the proc each time a version is made" do
|
|
107
|
-
call_count = 0
|
|
108
|
-
described_class.whodunnit = proc { call_count += 1 }
|
|
109
|
-
expect(described_class.whodunnit).to eq(1)
|
|
110
|
-
expect(described_class.whodunnit).to eq(2)
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
describe ".controller_info" do
|
|
116
|
-
before(:all) { described_class.controller_info = { foo: "bar" } }
|
|
117
|
-
|
|
118
|
-
it "is set to an empty hash before each test" do
|
|
119
|
-
expect(described_class.controller_info).to eq({})
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
|
|
3
|
-
RSpec.describe "Articles management", type: :request, order: :defined do
|
|
4
|
-
let(:valid_params) { { article: { title: "Doh", content: FFaker::Lorem.sentence } } }
|
|
5
|
-
|
|
6
|
-
context "versioning disabled" do
|
|
7
|
-
specify { expect(PaperTrail).not_to be_enabled }
|
|
8
|
-
|
|
9
|
-
it "does not create a version" do
|
|
10
|
-
expect(PaperTrail).to be_enabled_for_controller
|
|
11
|
-
expect {
|
|
12
|
-
post articles_path, params_wrapper(valid_params)
|
|
13
|
-
}.not_to change(PaperTrail::Version, :count)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "does not leak the state of the `PaperTrail.enabled_for_controller?` into the next test" do
|
|
17
|
-
expect(PaperTrail).to be_enabled_for_controller
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
with_versioning do
|
|
22
|
-
let(:article) { Article.last }
|
|
23
|
-
|
|
24
|
-
context "`current_user` method returns a `String`" do
|
|
25
|
-
it "sets that value as the `whodunnit`" do
|
|
26
|
-
expect {
|
|
27
|
-
post articles_path, params_wrapper(valid_params)
|
|
28
|
-
}.to change(PaperTrail::Version, :count).by(1)
|
|
29
|
-
expect(article.title).to eq("Doh")
|
|
30
|
-
expect(article.versions.last.whodunnit).to eq("foobar")
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
data/spec/spec_helper.rb
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
require "pry"
|
|
2
|
-
|
|
3
|
-
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
|
4
|
-
ENV["RAILS_ENV"] ||= "test"
|
|
5
|
-
ENV["DB"] ||= "sqlite"
|
|
6
|
-
|
|
7
|
-
unless File.exist?(File.expand_path("dummy_app/config/database.yml", __dir__))
|
|
8
|
-
warn "WARNING: No database.yml detected for the dummy app, please run `rake prepare` first"
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
RSpec.configure do |config|
|
|
12
|
-
config.expect_with :rspec do |expectations|
|
|
13
|
-
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
config.mock_with :rspec do |mocks|
|
|
17
|
-
mocks.verify_partial_doubles = true
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# Support for disabling `verify_partial_doubles` on specific examples.
|
|
21
|
-
config.around(:each, verify_stubs: false) do |ex|
|
|
22
|
-
config.mock_with :rspec do |mocks|
|
|
23
|
-
mocks.verify_partial_doubles = false
|
|
24
|
-
ex.run
|
|
25
|
-
mocks.verify_partial_doubles = true
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
config.filter_run :focus
|
|
30
|
-
config.run_all_when_everything_filtered = true
|
|
31
|
-
config.disable_monkey_patching!
|
|
32
|
-
config.warnings = false
|
|
33
|
-
if config.files_to_run.one?
|
|
34
|
-
config.default_formatter = "doc"
|
|
35
|
-
end
|
|
36
|
-
config.order = :random
|
|
37
|
-
Kernel.srand config.seed
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def active_record_gem_version
|
|
41
|
-
Gem::Version.new(ActiveRecord::VERSION::STRING)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Wrap args in a hash to support the ActionController::TestCase and
|
|
45
|
-
# ActionDispatch::Integration HTTP request method switch to keyword args
|
|
46
|
-
# (see https://github.com/rails/rails/blob/master/actionpack/CHANGELOG.md)
|
|
47
|
-
def params_wrapper(args)
|
|
48
|
-
if defined?(::Rails) && active_record_gem_version >= Gem::Version.new("5.0.0.beta1")
|
|
49
|
-
{ params: args }
|
|
50
|
-
else
|
|
51
|
-
args
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
require File.expand_path("../dummy_app/config/environment", __FILE__)
|
|
56
|
-
require "rspec/rails"
|
|
57
|
-
require "paper_trail/frameworks/rspec"
|
|
58
|
-
require "ffaker"
|
|
59
|
-
require "timecop"
|
|
60
|
-
|
|
61
|
-
# Run any available migration
|
|
62
|
-
ActiveRecord::Migrator.migrate File.expand_path("dummy_app/db/migrate/", __dir__)
|
|
63
|
-
|
|
64
|
-
require "database_cleaner"
|
|
65
|
-
DatabaseCleaner.strategy = :truncation
|
|
66
|
-
|
|
67
|
-
RSpec.configure do |config|
|
|
68
|
-
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
|
69
|
-
config.use_transactional_fixtures = active_record_gem_version >= ::Gem::Version.new("5")
|
|
70
|
-
|
|
71
|
-
# In rails < 5, some tests seem to require DatabaseCleaner-truncation.
|
|
72
|
-
# Truncation is about three times slower than transaction rollback, so it'll
|
|
73
|
-
# be nice when we can drop support for rails < 5.
|
|
74
|
-
if active_record_gem_version < ::Gem::Version.new("5")
|
|
75
|
-
config.before(:each) { DatabaseCleaner.start }
|
|
76
|
-
config.after(:each) { DatabaseCleaner.clean }
|
|
77
|
-
end
|
|
78
|
-
end
|
data/spec/support/alt_db_init.rb
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# This file copies the test database into locations for the `Foo` and `Bar` namespace,
|
|
2
|
-
# then defines those namespaces, then establishes the sqlite3 connection for the namespaces
|
|
3
|
-
# to simulate an application with multiple database connections.
|
|
4
|
-
|
|
5
|
-
# Load database yaml to use
|
|
6
|
-
configs = YAML.load_file("#{Rails.root}/config/database.yml")
|
|
7
|
-
|
|
8
|
-
# If we are testing with sqlite make it quick
|
|
9
|
-
db_directory = "#{Rails.root}/db"
|
|
10
|
-
|
|
11
|
-
# Set up alternate databases
|
|
12
|
-
if ENV["DB"] == "sqlite"
|
|
13
|
-
FileUtils.cp "#{db_directory}/test.sqlite3", "#{db_directory}/test-foo.sqlite3"
|
|
14
|
-
FileUtils.cp "#{db_directory}/test.sqlite3", "#{db_directory}/test-bar.sqlite3"
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
module Foo
|
|
18
|
-
class Base < ActiveRecord::Base
|
|
19
|
-
self.abstract_class = true
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
class Version < Base
|
|
23
|
-
include PaperTrail::VersionConcern
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
class Document < Base
|
|
27
|
-
has_paper_trail class_name: "Foo::Version"
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
Foo::Base.configurations = configs
|
|
32
|
-
Foo::Base.establish_connection(:foo)
|
|
33
|
-
ActiveRecord::Base.establish_connection(:foo)
|
|
34
|
-
ActiveRecord::Migrator.migrate File.expand_path("#{db_directory}/migrate/", __FILE__)
|
|
35
|
-
|
|
36
|
-
module Bar
|
|
37
|
-
class Base < ActiveRecord::Base
|
|
38
|
-
self.abstract_class = true
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
class Version < Base
|
|
42
|
-
include PaperTrail::VersionConcern
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
class Document < Base
|
|
46
|
-
has_paper_trail class_name: "Bar::Version"
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
Bar::Base.configurations = configs
|
|
51
|
-
Bar::Base.establish_connection(:bar)
|
|
52
|
-
ActiveRecord::Base.establish_connection(:bar)
|
|
53
|
-
|
|
54
|
-
ActiveRecord::Migrator.migrate File.expand_path("#{db_directory}/migrate/", __FILE__)
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# This custom serializer excludes nil values
|
|
2
|
-
module CustomJsonSerializer
|
|
3
|
-
extend PaperTrail::Serializers::JSON
|
|
4
|
-
|
|
5
|
-
def self.load(string)
|
|
6
|
-
parsed_value = super(string)
|
|
7
|
-
parsed_value.is_a?(Hash) ? parsed_value.reject { |k, v| k.blank? || v.blank? } : parsed_value
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def self.dump(object)
|
|
11
|
-
object.is_a?(Hash) ? super(object.reject { |_k, v| v.nil? }) : super
|
|
12
|
-
end
|
|
13
|
-
end
|