logidze 0.9.0 → 1.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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +101 -5
  3. data/LICENSE.txt +1 -1
  4. data/README.md +309 -89
  5. data/lib/generators/logidze/fx_helper.rb +17 -0
  6. data/lib/generators/logidze/inject_sql.rb +18 -0
  7. data/lib/generators/logidze/install/USAGE +6 -1
  8. data/lib/generators/logidze/install/functions/logidze_compact_history.sql +38 -0
  9. data/lib/generators/logidze/install/functions/logidze_filter_keys.sql +27 -0
  10. data/lib/generators/logidze/install/functions/logidze_logger.sql +150 -0
  11. data/lib/generators/logidze/install/functions/logidze_snapshot.sql +24 -0
  12. data/lib/generators/logidze/install/functions/logidze_version.sql +20 -0
  13. data/lib/generators/logidze/install/install_generator.rb +61 -3
  14. data/lib/generators/logidze/install/templates/hstore.rb.erb +1 -1
  15. data/lib/generators/logidze/install/templates/migration.rb.erb +19 -232
  16. data/lib/generators/logidze/install/templates/migration_fx.rb.erb +41 -0
  17. data/lib/generators/logidze/model/model_generator.rb +60 -20
  18. data/lib/generators/logidze/model/templates/migration.rb.erb +57 -36
  19. data/lib/generators/logidze/model/triggers/logidze.sql +6 -0
  20. data/lib/logidze.rb +43 -21
  21. data/lib/logidze/engine.rb +4 -1
  22. data/lib/logidze/has_logidze.rb +12 -4
  23. data/lib/logidze/history.rb +7 -15
  24. data/lib/logidze/history/type.rb +1 -1
  25. data/lib/logidze/history/version.rb +6 -5
  26. data/lib/logidze/ignore_log_data.rb +11 -19
  27. data/lib/logidze/meta.rb +44 -17
  28. data/lib/logidze/model.rb +63 -46
  29. data/lib/logidze/version.rb +2 -1
  30. data/lib/logidze/versioned_association.rb +0 -1
  31. metadata +43 -103
  32. data/.gitignore +0 -40
  33. data/.hound.yml +0 -3
  34. data/.rubocop.yml +0 -94
  35. data/.travis.yml +0 -39
  36. data/Gemfile +0 -13
  37. data/Rakefile +0 -28
  38. data/bench/performance/README.md +0 -109
  39. data/bench/performance/diff_bench.rb +0 -36
  40. data/bench/performance/insert_bench.rb +0 -20
  41. data/bench/performance/memory_profile.rb +0 -53
  42. data/bench/performance/setup.rb +0 -308
  43. data/bench/performance/update_bench.rb +0 -36
  44. data/bench/triggers/Makefile +0 -56
  45. data/bench/triggers/Readme.md +0 -58
  46. data/bench/triggers/bench.sql +0 -6
  47. data/bench/triggers/hstore_trigger_setup.sql +0 -38
  48. data/bench/triggers/jsonb_minus_2_setup.sql +0 -47
  49. data/bench/triggers/jsonb_minus_setup.sql +0 -49
  50. data/bench/triggers/keys2_trigger_setup.sql +0 -44
  51. data/bench/triggers/keys_trigger_setup.sql +0 -50
  52. data/bin/console +0 -8
  53. data/bin/setup +0 -9
  54. data/gemfiles/rails42.gemfile +0 -5
  55. data/gemfiles/rails5.gemfile +0 -6
  56. data/gemfiles/rails52.gemfile +0 -6
  57. data/gemfiles/railsmaster.gemfile +0 -7
  58. data/lib/logidze/ignore_log_data/ignored_columns.rb +0 -46
  59. data/lib/logidze/ignore_log_data/missing_attribute_patch.rb +0 -16
  60. data/lib/logidze/migration.rb +0 -19
  61. data/logidze.gemspec +0 -33
@@ -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,30 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Logidze
4
- # Add `has_logidze` method to AR::Base
5
- module IgnoreLogData
4
+ module IgnoreLogData # :nodoc:
6
5
  extend ActiveSupport::Concern
7
6
 
8
7
  included do
9
- if Rails::VERSION::MAJOR == 4
10
- require "logidze/ignore_log_data/ignored_columns"
11
- else
12
- if Rails::VERSION::MAJOR == 5
13
- require "logidze/ignore_log_data/cast_attribute_patch"
14
- include CastAttributePatch
15
- end
16
-
17
- require "logidze/ignore_log_data/missing_attribute_patch"
18
- include MissingAttributePatch
8
+ if Rails::VERSION::MAJOR == 5
9
+ require "logidze/ignore_log_data/cast_attribute_patch"
10
+ include CastAttributePatch
19
11
  end
20
12
 
21
- self.ignored_columns += ["log_data"]
22
- end
23
-
24
- module ClassMethods # :nodoc:
25
- def with_log_data
26
- select(column_names + ["log_data"])
27
- end
13
+ scope :with_log_data, lambda {
14
+ if ignored_columns == ["log_data"]
15
+ select(arel_table[Arel.star])
16
+ else
17
+ select(column_names + [arel_table[:log_data]])
18
+ end
19
+ }
28
20
  end
29
21
  end
30
22
  end
@@ -3,18 +3,19 @@
3
3
  module Logidze # :nodoc:
4
4
  # Provide methods to attach meta information
5
5
  module Meta
6
- def with_meta(meta, &block)
7
- MetaTransaction.wrap_with(meta, &block)
6
+ def with_meta(meta, transactional: true, &block)
7
+ wrapper = transactional ? MetaWithTransaction : MetaWithoutTransaction
8
+ wrapper.wrap_with(meta, &block)
8
9
  end
9
10
 
10
- def with_responsible(responsible_id, &block)
11
+ def with_responsible(responsible_id, transactional: true, &block)
11
12
  return yield if responsible_id.nil?
12
13
 
13
- meta = { Logidze::History::Version::META_RESPONSIBLE => responsible_id }
14
- with_meta(meta, &block)
14
+ meta = {Logidze::History::Version::META_RESPONSIBLE => responsible_id}
15
+ with_meta(meta, transactional: transactional, &block)
15
16
  end
16
17
 
17
- class MetaTransaction # :nodoc:
18
+ class MetaWrapper # :nodoc:
18
19
  def self.wrap_with(meta, &block)
19
20
  new(meta, &block).perform
20
21
  end
@@ -29,14 +30,12 @@ module Logidze # :nodoc:
29
30
  end
30
31
 
31
32
  def perform
32
- return if block.nil?
33
+ raise ArgumentError, "Block must be given" unless block
33
34
  return block.call if meta.nil?
34
35
 
35
- ActiveRecord::Base.transaction { call_block_in_meta_context }
36
+ call_block_in_meta_context
36
37
  end
37
38
 
38
- private
39
-
40
39
  def call_block_in_meta_context
41
40
  prev_meta = current_meta
42
41
 
@@ -44,10 +43,9 @@ module Logidze # :nodoc:
44
43
 
45
44
  pg_set_meta_param(current_meta)
46
45
  result = block.call
47
- pg_reset_meta_param(prev_meta)
48
-
49
46
  result
50
47
  ensure
48
+ pg_reset_meta_param(prev_meta)
51
49
  meta_stack.pop
52
50
  end
53
51
 
@@ -60,20 +58,49 @@ module Logidze # :nodoc:
60
58
  Thread.current[:meta]
61
59
  end
62
60
 
63
- def pg_set_meta_param(value)
64
- encoded_meta = connection.quote(ActiveSupport::JSON.encode(value))
65
- connection.execute("SET LOCAL logidze.meta = #{encoded_meta};")
61
+ def encode_meta(value)
62
+ connection.quote(ActiveSupport::JSON.encode(value))
66
63
  end
67
64
 
68
65
  def pg_reset_meta_param(prev_meta)
69
66
  if prev_meta.empty?
70
- connection.execute("SET LOCAL logidze.meta TO DEFAULT;")
67
+ pg_clear_meta_param
71
68
  else
72
69
  pg_set_meta_param(prev_meta)
73
70
  end
74
71
  end
75
72
  end
76
73
 
77
- private_constant :MetaTransaction
74
+ class MetaWithTransaction < MetaWrapper # :nodoc:
75
+ private
76
+
77
+ def call_block_in_meta_context
78
+ connection.transaction { super }
79
+ end
80
+
81
+ def pg_set_meta_param(value)
82
+ connection.execute("SET LOCAL logidze.meta = #{encode_meta(value)};")
83
+ end
84
+
85
+ def pg_clear_meta_param
86
+ connection.execute("SET LOCAL logidze.meta TO DEFAULT;")
87
+ end
88
+ end
89
+
90
+ class MetaWithoutTransaction < MetaWrapper # :nodoc:
91
+ private
92
+
93
+ def pg_set_meta_param(value)
94
+ connection.execute("SET logidze.meta = #{encode_meta(value)};")
95
+ end
96
+
97
+ def pg_clear_meta_param
98
+ connection.execute("SET logidze.meta TO DEFAULT;")
99
+ end
100
+ end
101
+
102
+ private_constant :MetaWrapper
103
+ private_constant :MetaWithTransaction
104
+ private_constant :MetaWithoutTransaction
78
105
  end
79
106
  end
@@ -1,45 +1,30 @@
1
1
  # frozen_string_literal: true
2
- require 'active_support'
2
+
3
+ require "active_support"
3
4
 
4
5
  module Logidze
5
- module Deprecations # :nodoc:
6
- def self.show_ts_deprecation_for(meth)
7
- warn(
8
- "[Deprecation] Usage of #{meth}(time) will be removed in the future releases, "\
9
- "use #{meth}(time: ts) instead"
10
- )
11
- end
12
- end
6
+ using RubyNext
13
7
 
14
8
  # Extends model with methods to browse history
15
- # rubocop: disable Metrics/ModuleLength
16
9
  module Model
17
- require 'logidze/history/type' if Rails::VERSION::MAJOR >= 5
10
+ require "logidze/history/type"
18
11
 
19
12
  extend ActiveSupport::Concern
20
13
 
21
14
  included do
22
- if Rails::VERSION::MAJOR < 5
23
- serialize :log_data, Logidze::History
24
- else
25
- attribute :log_data, Logidze::History::Type.new
26
- end
15
+ attribute :log_data, Logidze::History::Type.new
27
16
 
28
17
  delegate :version, to: :log_data, prefix: "log"
29
18
  end
30
19
 
31
20
  module ClassMethods # :nodoc:
32
21
  # Return records reverted to specified time
33
- def at(ts = nil, time: nil, version: nil)
34
- Deprecations.show_ts_deprecation_for(".at") if ts
35
- time ||= ts
36
- all.map { |record| record.at(time: time, version: version) }.compact
22
+ def at(time: nil, version: nil)
23
+ all.to_a.filter_map { |record| record.at(time: time, version: version) }
37
24
  end
38
25
 
39
26
  # Return changes made to records since specified time
40
- def diff_from(ts = nil, time: nil, version: nil)
41
- Deprecations.show_ts_deprecation_for(".diff_from") if ts
42
- time ||= ts
27
+ def diff_from(time: nil, version: nil)
43
28
  all.map { |record| record.diff_from(time: time, version: version) }
44
29
  end
45
30
 
@@ -53,6 +38,33 @@ module Logidze
53
38
  true
54
39
  end
55
40
  # rubocop: enable Naming/PredicateName
41
+
42
+ # Nullify log_data column for a association
43
+ def reset_log_data
44
+ without_logging { update_all(log_data: nil) }
45
+ end
46
+
47
+ # Initialize log_data with the current state if it's null
48
+ def create_logidze_snapshot(timestamp: nil, only: nil, except: nil)
49
+ args = ["'null'"]
50
+
51
+ args[0] = "'#{timestamp}'" if timestamp
52
+
53
+ columns = only || except
54
+
55
+ if columns
56
+ args[1] = "'{#{columns.join(",")}}'"
57
+ args[2] = only ? "true" : "false"
58
+ end
59
+
60
+ without_logging do
61
+ where(log_data: nil).update_all(
62
+ <<~SQL
63
+ log_data = logidze_snapshot(to_jsonb(#{quoted_table_name}), #{args.join(", ")})
64
+ SQL
65
+ )
66
+ end
67
+ end
56
68
  end
57
69
 
58
70
  # Use this to convert Ruby time to milliseconds
@@ -64,14 +76,15 @@ module Logidze
64
76
  # If time/version is less then the first version, then return nil.
65
77
  # If time/version is greater then the last version, then return self.
66
78
  # rubocop: disable Metrics/MethodLength
67
- def at(ts = nil, time: nil, version: nil)
68
- Deprecations.show_ts_deprecation_for("#at") if ts
69
-
79
+ def at(time: nil, version: nil)
70
80
  return at_version(version) if version
71
81
 
72
- time ||= ts
73
82
  time = parse_time(time)
74
83
 
84
+ unless log_data
85
+ return Logidze.return_self_if_log_data_is_empty ? self : nil
86
+ end
87
+
75
88
  return nil unless log_data.exists_ts?(time)
76
89
 
77
90
  if log_data.current_ts?(time)
@@ -86,12 +99,11 @@ module Logidze
86
99
  # rubocop: enable Metrics/MethodLength
87
100
 
88
101
  # Revert record to the version at specified time (without saving to DB)
89
- def at!(ts = nil, time: nil, version: nil)
90
- Deprecations.show_ts_deprecation_for("#at!") if ts
91
-
102
+ def at!(time: nil, version: nil)
92
103
  return at_version!(version) if version
93
104
 
94
- time ||= ts
105
+ raise ArgumentError, "#log_data is empty" unless log_data
106
+
95
107
  time = parse_time(time)
96
108
 
97
109
  return self if log_data.current_ts?(time)
@@ -114,6 +126,8 @@ module Logidze
114
126
 
115
127
  # Revert record to the specified version (without saving to DB)
116
128
  def at_version!(version)
129
+ raise ArgumentError, "#log_data is empty" unless log_data
130
+
117
131
  return self if log_data.version == version
118
132
  return false unless log_data.find_by_version(version)
119
133
 
@@ -126,17 +140,15 @@ module Logidze
126
140
  #
127
141
  # post.diff_from(time: 2.days.ago) # or post.diff_from(version: 2)
128
142
  # #=> { "id" => 1, "changes" => { "title" => { "old" => "Hello!", "new" => "World" } } }
129
- def diff_from(ts = nil, version: nil, time: nil)
130
- Deprecations.show_ts_deprecation_for("#diff_from") if ts
131
- time ||= ts
143
+ def diff_from(version: nil, time: nil)
132
144
  time = parse_time(time) if time
133
- changes = log_data.diff_from(time: time, version: version).tap do |v|
145
+ changes = log_data&.diff_from(time: time, version: version)&.tap do |v|
134
146
  deserialize_changes!(v)
135
- end
147
+ end || {}
136
148
 
137
149
  changes.delete_if { |k, _v| deleted_column?(k) }
138
150
 
139
- { "id" => id, "changes" => changes }
151
+ {"id" => id, "changes" => changes}
140
152
  end
141
153
 
142
154
  # Restore record to the previous version.
@@ -201,7 +213,18 @@ module Logidze
201
213
 
202
214
  # Loads log_data field from the database, stores to the attributes hash and returns it
203
215
  def reload_log_data
204
- self.log_data = self.class.where(self.class.primary_key => id).pluck(:log_data).first
216
+ self.log_data = self.class.where(self.class.primary_key => id).pluck("#{self.class.table_name}.log_data").first
217
+ end
218
+
219
+ # Nullify log_data column for a single record
220
+ def reset_log_data
221
+ self.class.without_logging { update_column(:log_data, nil) }
222
+ end
223
+
224
+ def create_logidze_snapshot!(**opts)
225
+ self.class.where(self.class.primary_key => id).create_logidze_snapshot(**opts)
226
+
227
+ reload_log_data
205
228
  end
206
229
 
207
230
  protected
@@ -230,14 +253,8 @@ module Logidze
230
253
  object_at
231
254
  end
232
255
 
233
- if Rails::VERSION::MAJOR < 5
234
- def deserialize_value(column, value)
235
- @attributes[column].type.type_cast_from_database(value)
236
- end
237
- else
238
- def deserialize_value(column, value)
239
- @attributes[column].type.deserialize(value)
240
- end
256
+ def deserialize_value(column, value)
257
+ @attributes[column].type.deserialize(value)
241
258
  end
242
259
 
243
260
  def deleted_column?(column)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Logidze
3
- VERSION = "0.9.0"
4
+ VERSION = "1.0.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
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: 1.0.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: 2020-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,98 +16,98 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.2'
19
+ version: '5.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '4.2'
26
+ version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: ammeter
28
+ name: ruby-next-core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.3
34
- type: :development
33
+ version: '0.9'
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.3
40
+ version: '0.9'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: ammeter
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1'
47
+ version: 1.1.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1'
54
+ version: 1.1.3
55
55
  - !ruby/object:Gem::Dependency
56
- name: database_cleaner
56
+ name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '1.5'
61
+ version: '1.10'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '1.5'
68
+ version: '1.10'
69
69
  - !ruby/object:Gem::Dependency
70
- name: pg
70
+ name: fx
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.18'
75
+ version: '0.5'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.18'
82
+ version: '0.5'
83
83
  - !ruby/object:Gem::Dependency
84
- name: pry-byebug
84
+ name: pg
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '0.18'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '0.18'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
103
+ version: '13.0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: '10.0'
110
+ version: '13.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec-rails
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -122,48 +122,6 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  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
- - !ruby/object:Gem::Dependency
140
- name: rubocop-md
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: 0.2.0
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: 0.2.0
153
- - !ruby/object:Gem::Dependency
154
- name: simplecov
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: 0.3.8
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: 0.3.8
167
125
  - !ruby/object:Gem::Dependency
168
126
  name: timecop
169
127
  requirement: !ruby/object:Gem::Requirement
@@ -178,50 +136,32 @@ dependencies:
178
136
  - - "~>"
179
137
  - !ruby/object:Gem::Version
180
138
  version: '0.8'
181
- description: PostgreSQL JSON-based auditing
139
+ description: PostgreSQL JSONB-based model changes tracking
182
140
  email:
183
141
  - dementiev.vm@gmail.com
184
142
  executables: []
185
143
  extensions: []
186
144
  extra_rdoc_files: []
187
145
  files:
188
- - ".gitignore"
189
- - ".hound.yml"
190
- - ".rspec"
191
- - ".rubocop.yml"
192
- - ".travis.yml"
193
146
  - CHANGELOG.md
194
- - Gemfile
195
147
  - LICENSE.txt
196
148
  - README.md
197
- - Rakefile
198
- - bench/performance/README.md
199
- - bench/performance/diff_bench.rb
200
- - bench/performance/insert_bench.rb
201
- - bench/performance/memory_profile.rb
202
- - bench/performance/setup.rb
203
- - bench/performance/update_bench.rb
204
- - bench/triggers/Makefile
205
- - bench/triggers/Readme.md
206
- - bench/triggers/bench.sql
207
- - bench/triggers/hstore_trigger_setup.sql
208
- - bench/triggers/jsonb_minus_2_setup.sql
209
- - bench/triggers/jsonb_minus_setup.sql
210
- - bench/triggers/keys2_trigger_setup.sql
211
- - bench/triggers/keys_trigger_setup.sql
212
- - bin/console
213
- - bin/setup
214
- - gemfiles/rails42.gemfile
215
- - gemfiles/rails5.gemfile
216
- - gemfiles/rails52.gemfile
217
- - gemfiles/railsmaster.gemfile
149
+ - lib/generators/logidze/fx_helper.rb
150
+ - lib/generators/logidze/inject_sql.rb
218
151
  - lib/generators/logidze/install/USAGE
152
+ - lib/generators/logidze/install/functions/logidze_compact_history.sql
153
+ - lib/generators/logidze/install/functions/logidze_filter_keys.sql
154
+ - lib/generators/logidze/install/functions/logidze_logger.sql
155
+ - lib/generators/logidze/install/functions/logidze_snapshot.sql
156
+ - lib/generators/logidze/install/functions/logidze_version.sql
219
157
  - lib/generators/logidze/install/install_generator.rb
220
158
  - lib/generators/logidze/install/templates/hstore.rb.erb
221
159
  - lib/generators/logidze/install/templates/migration.rb.erb
160
+ - lib/generators/logidze/install/templates/migration_fx.rb.erb
222
161
  - lib/generators/logidze/model/USAGE
223
162
  - lib/generators/logidze/model/model_generator.rb
224
163
  - lib/generators/logidze/model/templates/migration.rb.erb
164
+ - lib/generators/logidze/model/triggers/logidze.sql
225
165
  - lib/logidze.rb
226
166
  - lib/logidze/engine.rb
227
167
  - lib/logidze/has_logidze.rb
@@ -230,18 +170,19 @@ files:
230
170
  - lib/logidze/history/version.rb
231
171
  - lib/logidze/ignore_log_data.rb
232
172
  - lib/logidze/ignore_log_data/cast_attribute_patch.rb
233
- - lib/logidze/ignore_log_data/ignored_columns.rb
234
- - lib/logidze/ignore_log_data/missing_attribute_patch.rb
235
173
  - lib/logidze/meta.rb
236
- - lib/logidze/migration.rb
237
174
  - lib/logidze/model.rb
238
175
  - lib/logidze/version.rb
239
176
  - lib/logidze/versioned_association.rb
240
- - logidze.gemspec
241
177
  homepage: http://github.com/palkan/logidze
242
178
  licenses:
243
179
  - MIT
244
- metadata: {}
180
+ metadata:
181
+ bug_tracker_uri: http://github.com/palkan/logidze/issues
182
+ changelog_uri: https://github.com/palkan/logidze/blob/master/CHANGELOG.md
183
+ documentation_uri: http://github.com/palkan/logidze
184
+ homepage_uri: http://github.com/palkan/logidze
185
+ source_code_uri: http://github.com/palkan/logidze
245
186
  post_install_message:
246
187
  rdoc_options: []
247
188
  require_paths:
@@ -250,16 +191,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
250
191
  requirements:
251
192
  - - ">="
252
193
  - !ruby/object:Gem::Version
253
- version: '0'
194
+ version: 2.5.0
254
195
  required_rubygems_version: !ruby/object:Gem::Requirement
255
196
  requirements:
256
197
  - - ">="
257
198
  - !ruby/object:Gem::Version
258
199
  version: '0'
259
200
  requirements: []
260
- rubyforge_project:
261
- rubygems_version: 2.7.7
201
+ rubygems_version: 3.0.6
262
202
  signing_key:
263
203
  specification_version: 4
264
- summary: PostgreSQL JSON-based auditing
204
+ summary: PostgreSQL JSONB-based model changes tracking
265
205
  test_files: []