logidze 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +3 -0
  3. data/.github/ISSUE_TEMPLATE.md +20 -0
  4. data/.github/PULL_REQUEST_TEMPLATE.md +29 -0
  5. data/.rubocop.yml +30 -69
  6. data/.travis.yml +8 -5
  7. data/CHANGELOG.md +35 -1
  8. data/Gemfile +2 -0
  9. data/LICENSE.txt +1 -1
  10. data/README.md +67 -26
  11. data/Rakefile +2 -2
  12. data/assets/pg_log_data_chart.png +0 -0
  13. data/bench/performance/README.md +2 -2
  14. data/bench/performance/diff_bench.rb +15 -13
  15. data/bench/performance/insert_bench.rb +6 -4
  16. data/bench/performance/memory_profile.rb +12 -9
  17. data/bench/performance/setup.rb +35 -28
  18. data/bench/performance/update_bench.rb +8 -6
  19. data/bin/setup +2 -2
  20. data/gemfiles/rails42.gemfile +1 -0
  21. data/gemfiles/rails6.gemfile +6 -0
  22. data/lib/generators/logidze/install/install_generator.rb +3 -2
  23. data/lib/generators/logidze/model/model_generator.rb +12 -12
  24. data/lib/logidze.rb +44 -18
  25. data/lib/logidze/engine.rb +2 -1
  26. data/lib/logidze/has_logidze.rb +14 -4
  27. data/lib/logidze/history.rb +6 -5
  28. data/lib/logidze/history/type.rb +1 -1
  29. data/lib/logidze/history/version.rb +6 -5
  30. data/lib/logidze/ignore_log_data.rb +31 -4
  31. data/lib/logidze/ignore_log_data/association.rb +11 -0
  32. data/lib/logidze/ignore_log_data/default_scope_patch.rb +25 -0
  33. data/lib/logidze/ignore_log_data/ignored_columns.rb +1 -1
  34. data/lib/logidze/ignore_log_data/missing_attribute_patch.rb +3 -1
  35. data/lib/logidze/meta.rb +1 -1
  36. data/lib/logidze/migration.rb +1 -0
  37. data/lib/logidze/model.rb +14 -4
  38. data/lib/logidze/version.rb +2 -1
  39. data/lib/logidze/versioned_association.rb +0 -1
  40. data/logidze.gemspec +16 -8
  41. metadata +28 -60
  42. data/.hound.yml +0 -3
data/lib/logidze.rb CHANGED
@@ -1,40 +1,66 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "logidze/version"
3
4
 
4
5
  # Logidze provides tools for adding in-table JSON-based audit to DB tables
5
6
  # and ActiveRecord extensions to work with changes history.
6
7
  module Logidze
7
- require 'logidze/history'
8
- require 'logidze/model'
9
- require 'logidze/versioned_association'
10
- require 'logidze/ignore_log_data'
11
- require 'logidze/has_logidze'
12
- require 'logidze/meta'
8
+ require "logidze/history"
9
+ require "logidze/model"
10
+ require "logidze/versioned_association"
11
+ require "logidze/ignore_log_data"
12
+ require "logidze/has_logidze"
13
+ require "logidze/meta"
13
14
 
14
15
  extend Logidze::Meta
15
16
 
16
- require 'logidze/engine' if defined?(Rails)
17
+ require "logidze/engine" if defined?(Rails)
17
18
 
18
19
  class << self
19
20
  # Determines if Logidze should append a version to the log after updating an old version.
20
21
  attr_accessor :append_on_undo
22
+
21
23
  attr_writer :associations_versioning
22
24
 
23
25
  def associations_versioning
24
26
  @associations_versioning || false
25
27
  end
26
- end
27
28
 
28
- # Temporary disable DB triggers.
29
- #
30
- # @example
31
- # Logidze.without_logging { Post.update_all(active: true) }
32
- def self.without_logging
33
- ActiveRecord::Base.transaction do
34
- ActiveRecord::Base.connection.execute "SET LOCAL logidze.disabled TO on;"
35
- res = yield
36
- ActiveRecord::Base.connection.execute "SET LOCAL logidze.disabled TO DEFAULT;"
37
- res
29
+ # Determines if Logidze should exclude log data from SELECT statements
30
+ attr_writer :ignore_log_data_by_default
31
+
32
+ def ignore_log_data_by_default
33
+ @ignore_log_data_by_default || false
34
+ end
35
+
36
+ attr_writer :force_load_log_data
37
+
38
+ def force_load_log_data
39
+ @force_load_log_data || false
40
+ end
41
+
42
+ # Temporary disable DB triggers.
43
+ #
44
+ # @example
45
+ # Logidze.without_logging { Post.update_all(active: true) }
46
+ def without_logging
47
+ ActiveRecord::Base.transaction do
48
+ ActiveRecord::Base.connection.execute "SET LOCAL logidze.disabled TO on;"
49
+ res = yield
50
+ ActiveRecord::Base.connection.execute "SET LOCAL logidze.disabled TO DEFAULT;"
51
+ res
52
+ end
53
+ end
54
+
55
+ # Temporary turn off ignore_log_data_by_default config
56
+ #
57
+ # @example
58
+ # Logidze.with_log_data { Post.update_all(active: true) }
59
+ def with_log_data
60
+ Logidze.force_load_log_data = true
61
+ yield
62
+ ensure
63
+ Logidze.force_load_log_data = false
38
64
  end
39
65
  end
40
66
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'logidze'
2
+
3
+ require "logidze"
3
4
 
4
5
  module Logidze
5
6
  class Engine < Rails::Engine # :nodoc:
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'active_support'
2
+
3
+ require "active_support"
3
4
 
4
5
  module Logidze
5
6
  # Add `has_logidze` method to AR::Base
@@ -9,10 +10,19 @@ module Logidze
9
10
  module ClassMethods # :nodoc:
10
11
  # Include methods to work with history.
11
12
  #
12
- # rubocop:disable Naming/PredicateName
13
- def has_logidze(ignore_log_data: false)
13
+ def has_logidze(ignore_log_data: nil)
14
14
  include Logidze::Model
15
- include Logidze::IgnoreLogData if ignore_log_data
15
+ include Logidze::IgnoreLogData
16
+
17
+ @ignore_log_data = ignore_log_data
18
+ end
19
+
20
+ def ignores_log_data?
21
+ if @ignore_log_data.nil? && Logidze.ignore_log_data_by_default
22
+ !Logidze.force_load_log_data
23
+ else
24
+ @ignore_log_data
25
+ end
16
26
  end
17
27
  end
18
28
  end
@@ -1,15 +1,16 @@
1
1
  # frozen_string_literal: true
2
- require 'active_support/core_ext/module/delegation'
2
+
3
+ require "active_support/core_ext/module/delegation"
3
4
 
4
5
  module Logidze
5
6
  # Log data wrapper
6
7
  class History
7
- require 'logidze/history/version'
8
+ require "logidze/history/version"
8
9
 
9
10
  # History key
10
- HISTORY = 'h'
11
+ HISTORY = "h"
11
12
  # Version key
12
- VERSION = 'v'
13
+ VERSION = "v"
13
14
 
14
15
  attr_reader :data
15
16
 
@@ -128,7 +129,7 @@ module Logidze
128
129
 
129
130
  def build_changes(a, b)
130
131
  b.each_with_object({}) do |(k, v), acc|
131
- acc[k] = { "old" => a[k], "new" => v } unless v == a[k]
132
+ acc[k] = {"old" => a[k], "new" => v} unless v == a[k]
132
133
  end
133
134
  end
134
135
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_model/type'
3
+ require "active_model/type"
4
4
 
5
5
  module Logidze
6
6
  class History
@@ -1,18 +1,19 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Logidze
3
4
  class History
4
5
  # Represents one log item
5
6
  class Version
6
7
  # Timestamp key
7
- TS = 'ts'
8
+ TS = "ts"
8
9
  # Changes key
9
- CHANGES = 'c'
10
+ CHANGES = "c"
10
11
  # Responsible ID
11
- RESPONSIBLE = 'r'
12
+ RESPONSIBLE = "r"
12
13
  # Meta Responsible ID
13
- META_RESPONSIBLE = '_r'
14
+ META_RESPONSIBLE = "_r"
14
15
  # Meta key
15
- META = 'm'
16
+ META = "m"
16
17
 
17
18
  attr_reader :data
18
19
 
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "logidze/ignore_log_data/association"
4
+
3
5
  module Logidze
4
- # Add `has_logidze` method to AR::Base
5
- module IgnoreLogData
6
+ module IgnoreLogData # :nodoc:
6
7
  extend ActiveSupport::Concern
7
8
 
8
9
  included do
@@ -16,15 +17,41 @@ module Logidze
16
17
 
17
18
  require "logidze/ignore_log_data/missing_attribute_patch"
18
19
  include MissingAttributePatch
20
+
21
+ require "logidze/ignore_log_data/default_scope_patch"
22
+ include DefaultScopePatch
19
23
  end
20
24
 
21
25
  self.ignored_columns += ["log_data"]
26
+
27
+ scope :with_log_data, lambda {
28
+ if ignored_columns == ["log_data"]
29
+ select("*")
30
+ else
31
+ select(column_names + ["log_data"])
32
+ end
33
+ }
22
34
  end
23
35
 
24
36
  module ClassMethods # :nodoc:
25
- def with_log_data
26
- select(column_names + ["log_data"])
37
+ def self.default_scope
38
+ ignores_log_data? ? super : super.with_log_data
27
39
  end
28
40
  end
41
+
42
+ def association(name)
43
+ association = super
44
+
45
+ should_load_log_data =
46
+ attributes["log_data"] &&
47
+ association.klass.respond_to?(:has_logidze?) &&
48
+ !association.singleton_class.include?(Logidze::IgnoreLogData::Association)
49
+
50
+ return association unless should_load_log_data
51
+
52
+ association.singleton_class.prepend(Logidze::IgnoreLogData::Association)
53
+
54
+ association
55
+ end
29
56
  end
30
57
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Logidze
4
+ module IgnoreLogData
5
+ module Association # :nodoc:
6
+ def target_scope
7
+ super.with_log_data
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Logidze
4
+ module IgnoreLogData
5
+ # Since Rails caches ignored_columns, we have to patch .column_names and
6
+ # .unscoped methods to make conditional log_data loading possible
7
+ module DefaultScopePatch
8
+ extend ActiveSupport::Concern
9
+
10
+ class_methods do
11
+ def column_names
12
+ ignores_log_data? ? super : super + ["log_data"]
13
+ end
14
+
15
+ def unscoped
16
+ if ignores_log_data?
17
+ super
18
+ else
19
+ block_given? ? with_log_data.scoping { yield } : with_log_data
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -16,7 +16,7 @@ module Logidze
16
16
  private
17
17
 
18
18
  def build_select(arel)
19
- if select_values.blank? && klass.ignored_columns.any?
19
+ if select_values.blank? && klass.ignored_columns.any? && ignores_log_data?
20
20
  arel.project(*arel_columns(klass.column_names - klass.ignored_columns))
21
21
  else
22
22
  super
@@ -7,7 +7,9 @@ module Logidze
7
7
  # from Rails 4 - raise ActiveModel::MissingAttributeError
8
8
  module MissingAttributePatch
9
9
  def log_data
10
- raise ActiveModel::MissingAttributeError if attributes["log_data"].nil?
10
+ if self.class.ignores_log_data? && attributes["log_data"].nil?
11
+ raise ActiveModel::MissingAttributeError
12
+ end
11
13
 
12
14
  super
13
15
  end
data/lib/logidze/meta.rb CHANGED
@@ -10,7 +10,7 @@ module Logidze # :nodoc:
10
10
  def with_responsible(responsible_id, &block)
11
11
  return yield if responsible_id.nil?
12
12
 
13
- meta = { Logidze::History::Version::META_RESPONSIBLE => responsible_id }
13
+ meta = {Logidze::History::Version::META_RESPONSIBLE => responsible_id}
14
14
  with_meta(meta, &block)
15
15
  end
16
16
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Logidze
3
4
  # Contains helpers for handling different PG versions
4
5
  module Migration
data/lib/logidze/model.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'active_support'
2
+
3
+ require "active_support"
3
4
 
4
5
  module Logidze
5
6
  module Deprecations # :nodoc:
@@ -12,9 +13,8 @@ module Logidze
12
13
  end
13
14
 
14
15
  # Extends model with methods to browse history
15
- # rubocop: disable Metrics/ModuleLength
16
16
  module Model
17
- require 'logidze/history/type' if Rails::VERSION::MAJOR >= 5
17
+ require "logidze/history/type" if Rails::VERSION::MAJOR >= 5
18
18
 
19
19
  extend ActiveSupport::Concern
20
20
 
@@ -53,6 +53,11 @@ module Logidze
53
53
  true
54
54
  end
55
55
  # rubocop: enable Naming/PredicateName
56
+
57
+ # Nullify log_data column for a association
58
+ def reset_log_data
59
+ without_logging { update_all(log_data: nil) }
60
+ end
56
61
  end
57
62
 
58
63
  # Use this to convert Ruby time to milliseconds
@@ -136,7 +141,7 @@ module Logidze
136
141
 
137
142
  changes.delete_if { |k, _v| deleted_column?(k) }
138
143
 
139
- { "id" => id, "changes" => changes }
144
+ {"id" => id, "changes" => changes}
140
145
  end
141
146
 
142
147
  # Restore record to the previous version.
@@ -204,6 +209,11 @@ module Logidze
204
209
  self.log_data = self.class.where(self.class.primary_key => id).pluck(:log_data).first
205
210
  end
206
211
 
212
+ # Nullify log_data column for a single record
213
+ def reset_log_data
214
+ self.class.without_logging { update_column(:log_data, nil) }
215
+ end
216
+
207
217
  protected
208
218
 
209
219
  def apply_diff(version, diff)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Logidze
3
- VERSION = "0.9.0"
4
+ VERSION = "0.10.0"
4
5
  end
@@ -12,7 +12,6 @@ end
12
12
 
13
13
  module Logidze # :nodoc: all
14
14
  module VersionedAssociation
15
- # rubocop: disable Metrics/MethodLength, Metrics/AbcSize
16
15
  def load_target
17
16
  target = super
18
17
  return unless target
data/logidze.gemspec CHANGED
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
- lib = File.expand_path('../lib', __FILE__)
2
+
3
+ lib = File.expand_path("../lib", __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'logidze/version'
5
+ require "logidze/version"
5
6
 
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = "logidze"
@@ -17,17 +18,24 @@ Gem::Specification.new do |spec|
17
18
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
19
  spec.require_paths = ["lib"]
19
20
 
21
+ spec.required_ruby_version = ">= 2.4.0"
22
+
23
+ spec.metadata = {
24
+ "bug_tracker_uri" => "http://github.com/palkan/logidze/issues",
25
+ "changelog_uri" => "https://github.com/palkan/logidze/blob/master/CHANGELOG.md",
26
+ "documentation_uri" => "http://github.com/palkan/logidze",
27
+ "homepage_uri" => "http://github.com/palkan/logidze",
28
+ "source_code_uri" => "http://github.com/palkan/logidze"
29
+ }
30
+
20
31
  spec.add_dependency "rails", ">= 4.2"
21
32
 
22
33
  spec.add_development_dependency "ammeter", "~> 1.1.3"
23
- spec.add_development_dependency "bundler", "~> 1"
24
- spec.add_development_dependency "database_cleaner", "~> 1.5"
25
- spec.add_development_dependency "pg", "~>0.18"
26
- spec.add_development_dependency "pry-byebug"
34
+ spec.add_development_dependency "bundler", ">= 1.10"
35
+ spec.add_development_dependency "pg", ">= 0.18"
27
36
  spec.add_development_dependency "rake", ">= 10.0"
28
37
  spec.add_development_dependency "rspec-rails", ">= 3.4"
29
- spec.add_development_dependency "rubocop", "~> 0.60.0"
30
38
  spec.add_development_dependency "rubocop-md", "~> 0.2.0"
31
- spec.add_development_dependency "simplecov", ">= 0.3.8"
39
+ spec.add_development_dependency "standard", "~> 0.0.39"
32
40
  spec.add_development_dependency "timecop", "~> 0.8"
33
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logidze
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - palkan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-28 00:00:00.000000000 Z
11
+ date: 2019-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -42,58 +42,30 @@ dependencies:
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1'
55
- - !ruby/object:Gem::Dependency
56
- name: database_cleaner
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
45
+ - - ">="
60
46
  - !ruby/object:Gem::Version
61
- version: '1.5'
47
+ version: '1.10'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - "~>"
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
- version: '1.5'
54
+ version: '1.10'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: pg
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '0.18'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '0.18'
83
- - !ruby/object:Gem::Dependency
84
- name: pry-byebug
85
57
  requirement: !ruby/object:Gem::Requirement
86
58
  requirements:
87
59
  - - ">="
88
60
  - !ruby/object:Gem::Version
89
- version: '0'
61
+ version: '0.18'
90
62
  type: :development
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
65
  requirements:
94
66
  - - ">="
95
67
  - !ruby/object:Gem::Version
96
- version: '0'
68
+ version: '0.18'
97
69
  - !ruby/object:Gem::Dependency
98
70
  name: rake
99
71
  requirement: !ruby/object:Gem::Requirement
@@ -122,20 +94,6 @@ dependencies:
122
94
  - - ">="
123
95
  - !ruby/object:Gem::Version
124
96
  version: '3.4'
125
- - !ruby/object:Gem::Dependency
126
- name: rubocop
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 0.60.0
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 0.60.0
139
97
  - !ruby/object:Gem::Dependency
140
98
  name: rubocop-md
141
99
  requirement: !ruby/object:Gem::Requirement
@@ -151,19 +109,19 @@ dependencies:
151
109
  - !ruby/object:Gem::Version
152
110
  version: 0.2.0
153
111
  - !ruby/object:Gem::Dependency
154
- name: simplecov
112
+ name: standard
155
113
  requirement: !ruby/object:Gem::Requirement
156
114
  requirements:
157
- - - ">="
115
+ - - "~>"
158
116
  - !ruby/object:Gem::Version
159
- version: 0.3.8
117
+ version: 0.0.39
160
118
  type: :development
161
119
  prerelease: false
162
120
  version_requirements: !ruby/object:Gem::Requirement
163
121
  requirements:
164
- - - ">="
122
+ - - "~>"
165
123
  - !ruby/object:Gem::Version
166
- version: 0.3.8
124
+ version: 0.0.39
167
125
  - !ruby/object:Gem::Dependency
168
126
  name: timecop
169
127
  requirement: !ruby/object:Gem::Requirement
@@ -185,8 +143,10 @@ executables: []
185
143
  extensions: []
186
144
  extra_rdoc_files: []
187
145
  files:
146
+ - ".gitattributes"
147
+ - ".github/ISSUE_TEMPLATE.md"
148
+ - ".github/PULL_REQUEST_TEMPLATE.md"
188
149
  - ".gitignore"
189
- - ".hound.yml"
190
150
  - ".rspec"
191
151
  - ".rubocop.yml"
192
152
  - ".travis.yml"
@@ -195,6 +155,7 @@ files:
195
155
  - LICENSE.txt
196
156
  - README.md
197
157
  - Rakefile
158
+ - assets/pg_log_data_chart.png
198
159
  - bench/performance/README.md
199
160
  - bench/performance/diff_bench.rb
200
161
  - bench/performance/insert_bench.rb
@@ -214,6 +175,7 @@ files:
214
175
  - gemfiles/rails42.gemfile
215
176
  - gemfiles/rails5.gemfile
216
177
  - gemfiles/rails52.gemfile
178
+ - gemfiles/rails6.gemfile
217
179
  - gemfiles/railsmaster.gemfile
218
180
  - lib/generators/logidze/install/USAGE
219
181
  - lib/generators/logidze/install/install_generator.rb
@@ -229,7 +191,9 @@ files:
229
191
  - lib/logidze/history/type.rb
230
192
  - lib/logidze/history/version.rb
231
193
  - lib/logidze/ignore_log_data.rb
194
+ - lib/logidze/ignore_log_data/association.rb
232
195
  - lib/logidze/ignore_log_data/cast_attribute_patch.rb
196
+ - lib/logidze/ignore_log_data/default_scope_patch.rb
233
197
  - lib/logidze/ignore_log_data/ignored_columns.rb
234
198
  - lib/logidze/ignore_log_data/missing_attribute_patch.rb
235
199
  - lib/logidze/meta.rb
@@ -241,7 +205,12 @@ files:
241
205
  homepage: http://github.com/palkan/logidze
242
206
  licenses:
243
207
  - MIT
244
- metadata: {}
208
+ metadata:
209
+ bug_tracker_uri: http://github.com/palkan/logidze/issues
210
+ changelog_uri: https://github.com/palkan/logidze/blob/master/CHANGELOG.md
211
+ documentation_uri: http://github.com/palkan/logidze
212
+ homepage_uri: http://github.com/palkan/logidze
213
+ source_code_uri: http://github.com/palkan/logidze
245
214
  post_install_message:
246
215
  rdoc_options: []
247
216
  require_paths:
@@ -250,15 +219,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
250
219
  requirements:
251
220
  - - ">="
252
221
  - !ruby/object:Gem::Version
253
- version: '0'
222
+ version: 2.4.0
254
223
  required_rubygems_version: !ruby/object:Gem::Requirement
255
224
  requirements:
256
225
  - - ">="
257
226
  - !ruby/object:Gem::Version
258
227
  version: '0'
259
228
  requirements: []
260
- rubyforge_project:
261
- rubygems_version: 2.7.7
229
+ rubygems_version: 3.0.3
262
230
  signing_key:
263
231
  specification_version: 4
264
232
  summary: PostgreSQL JSON-based auditing