logidze 0.8.1 → 0.9.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/README.md +16 -0
- data/lib/logidze.rb +1 -0
- data/lib/logidze/has_logidze.rb +2 -1
- data/lib/logidze/ignore_log_data.rb +30 -0
- data/lib/logidze/ignore_log_data/cast_attribute_patch.rb +17 -0
- data/lib/logidze/ignore_log_data/ignored_columns.rb +46 -0
- data/lib/logidze/ignore_log_data/missing_attribute_patch.rb +16 -0
- data/lib/logidze/model.rb +5 -0
- data/lib/logidze/version.rb +1 -1
- data/logidze.gemspec +1 -1
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f853c7aed1f6d284150d85530b3fdc0fb8f59b856a4d962e35004507cb8c7f7
|
4
|
+
data.tar.gz: 513c193a93b6ff059a27463ee96ab754cb88d995b74a8c73b2abf16441aad346
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54443a9ddd4b9bea05a9f6e8acd5f0549c359f2476e93d6cb11452597ba8d0b2580b4ac3db78a0bc78e0ec01f368e9e8c6c0de08868e4d6e7679641515c22329
|
7
|
+
data.tar.gz: 27f28a1e2b8be8b9eb8095ef8ffd192e4397ff3389298cf290991fc76de7998f9c512fe1d153505dfdd6a69186b06365d5085c71d03472b573ec3c6cb3f523b3
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,30 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 0.9.0 (2018-11-28)
|
6
|
+
|
7
|
+
- PR [#98](https://github.com/palkan/logidze/pull/98) Add `:ignore_log_data` option to `#has_logidze` ([@dmitrytsepelev][])
|
8
|
+
|
9
|
+
Usage:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
class User < ActiveRecord::Base
|
13
|
+
has_logidze ignore_log_data: true
|
14
|
+
end
|
15
|
+
|
16
|
+
User.all #=> SELECT id, name FROM users
|
17
|
+
|
18
|
+
User.with_log_data #=> SELECT id, name, log_data FROM users
|
19
|
+
|
20
|
+
user = User.find(params[:id])
|
21
|
+
user.log_data #=> ActiveModel::MissingAttributeError
|
22
|
+
user.reload_log_data #=> Logidze::History
|
23
|
+
```
|
24
|
+
|
25
|
+
## 0.8.1 (2018-10-22)
|
26
|
+
|
27
|
+
- [PR #93](https://github.com/palkan/logidze/pull/93)] Return 0 for log size when log_data is nil ([@duderman][])
|
28
|
+
|
5
29
|
## 0.8.0 (2018-10-01)
|
6
30
|
|
7
31
|
- [PR [#87](https://github.com/palkan/logidze/pull/87)] Adding debounce time to avoid spamming changelog creation ([@zocoi][])
|
@@ -211,3 +235,4 @@ This is a quick fix for a more general problem (see [#59](https://github.com/pal
|
|
211
235
|
[@ankursethi-uscis]: https://github.com/ankursethi-uscis
|
212
236
|
[@dmitrytsepelev]: https://github.com/DmitryTsepelev
|
213
237
|
[@zocoi]: https://github.com/zocoi
|
238
|
+
[@duderman]: https://github.com/duderman
|
data/README.md
CHANGED
@@ -186,6 +186,12 @@ post.redo!
|
|
186
186
|
post.switch_to!(2)
|
187
187
|
```
|
188
188
|
|
189
|
+
You can initiate reloading of `log_data` from the DB:
|
190
|
+
|
191
|
+
```ruby
|
192
|
+
post.reload_log_data # => returns the latest log data value
|
193
|
+
```
|
194
|
+
|
189
195
|
Normally, if you update record after `#undo!` or `#switch_to!` you lose all "future" versions and `#redo!` is no
|
190
196
|
longer possible. However, you can provide an `append: true` option to `#undo!` or `#switch_to!`, which will
|
191
197
|
create a new version with old data. Caveat: when switching to a newer version, `append` will have no effect.
|
@@ -204,6 +210,16 @@ Alternatively, you can configure Logidze to always default to `append: true`.
|
|
204
210
|
Logidze.append_on_undo = true
|
205
211
|
```
|
206
212
|
|
213
|
+
If you want to reduce the data loaded from the DB, you can turn off automatic loading of `log_data` column in the following way:
|
214
|
+
|
215
|
+
```ruby
|
216
|
+
class User < ActiveRecord::Base
|
217
|
+
has_logidze ignore_log_data: true
|
218
|
+
end
|
219
|
+
```
|
220
|
+
|
221
|
+
After that, each time you use `User.all` (or any other relation method) `log_data` won't be loaded from the DB. If you try to call `#log_data` on the model loaded in a such way, you'll get `ActiveModel::MissingAttributeError`, but if you really need it (e.g. during the console debugging) - use `user.reload_log_data`, which forces loading the column from the DB. If you need to select `log_data` during the initial load - use a special scope `User.with_log_data`.
|
222
|
+
|
207
223
|
|
208
224
|
## Track meta information
|
209
225
|
|
data/lib/logidze.rb
CHANGED
data/lib/logidze/has_logidze.rb
CHANGED
@@ -10,8 +10,9 @@ module Logidze
|
|
10
10
|
# Include methods to work with history.
|
11
11
|
#
|
12
12
|
# rubocop:disable Naming/PredicateName
|
13
|
-
def has_logidze
|
13
|
+
def has_logidze(ignore_log_data: false)
|
14
14
|
include Logidze::Model
|
15
|
+
include Logidze::IgnoreLogData if ignore_log_data
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Logidze
|
4
|
+
# Add `has_logidze` method to AR::Base
|
5
|
+
module IgnoreLogData
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
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
|
19
|
+
end
|
20
|
+
|
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
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Logidze
|
4
|
+
module IgnoreLogData
|
5
|
+
# Fixes unexpected behavior (see more https://github.com/rails/rails/pull/34528):
|
6
|
+
# instead of using a type passed to `attribute` call, ignored column uses
|
7
|
+
# a type coming from the DB (in this case `.log_data` would return a plain hash
|
8
|
+
# instead of `Logidze::History`)
|
9
|
+
module CastAttributePatch
|
10
|
+
def log_data
|
11
|
+
return attributes["log_data"] if attributes["log_data"].is_a?(Logidze::History)
|
12
|
+
|
13
|
+
self.log_data = Logidze::History::Type.new.cast_value(super)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Logidze
|
4
|
+
module IgnoreLogData
|
5
|
+
# Backports ignored_columns functionality to Rails < 5
|
6
|
+
module IgnoredColumns
|
7
|
+
module Base # :nodoc:
|
8
|
+
attr_writer :ignored_columns
|
9
|
+
|
10
|
+
def ignored_columns
|
11
|
+
@ignored_columns ||= []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module Relation # :nodoc:
|
16
|
+
private
|
17
|
+
|
18
|
+
def build_select(arel)
|
19
|
+
if select_values.blank? && klass.ignored_columns.any?
|
20
|
+
arel.project(*arel_columns(klass.column_names - klass.ignored_columns))
|
21
|
+
else
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module Table # :nodoc:
|
28
|
+
def columns
|
29
|
+
super.reject { |column| ignored_columns.include?(column.name) }
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def ignored_columns
|
35
|
+
node.base_klass.ignored_columns
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
ActiveRecord::Base.extend(Logidze::IgnoreLogData::IgnoredColumns::Base)
|
43
|
+
ActiveRecord::Relation.include(Logidze::IgnoreLogData::IgnoredColumns::Relation)
|
44
|
+
ActiveRecord::Associations::JoinDependency::Aliases::Table.prepend(
|
45
|
+
Logidze::IgnoreLogData::IgnoredColumns::Table
|
46
|
+
)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Logidze
|
4
|
+
module IgnoreLogData
|
5
|
+
# Rails attribute API defines attributes in a way, that it returns nil
|
6
|
+
# when data has not been loaded from the DB. We want it to imitate the behavior
|
7
|
+
# from Rails 4 - raise ActiveModel::MissingAttributeError
|
8
|
+
module MissingAttributePatch
|
9
|
+
def log_data
|
10
|
+
raise ActiveModel::MissingAttributeError if attributes["log_data"].nil?
|
11
|
+
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/logidze/model.rb
CHANGED
@@ -199,6 +199,11 @@ module Logidze
|
|
199
199
|
log_data&.size || 0
|
200
200
|
end
|
201
201
|
|
202
|
+
# Loads log_data field from the database, stores to the attributes hash and returns it
|
203
|
+
def reload_log_data
|
204
|
+
self.log_data = self.class.where(self.class.primary_key => id).pluck(:log_data).first
|
205
|
+
end
|
206
|
+
|
202
207
|
protected
|
203
208
|
|
204
209
|
def apply_diff(version, diff)
|
data/lib/logidze/version.rb
CHANGED
data/logidze.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency "pry-byebug"
|
27
27
|
spec.add_development_dependency "rake", ">= 10.0"
|
28
28
|
spec.add_development_dependency "rspec-rails", ">= 3.4"
|
29
|
-
spec.add_development_dependency "rubocop", "~> 0.
|
29
|
+
spec.add_development_dependency "rubocop", "~> 0.60.0"
|
30
30
|
spec.add_development_dependency "rubocop-md", "~> 0.2.0"
|
31
31
|
spec.add_development_dependency "simplecov", ">= 0.3.8"
|
32
32
|
spec.add_development_dependency "timecop", "~> 0.8"
|
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.
|
4
|
+
version: 0.9.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
|
+
date: 2018-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -128,14 +128,14 @@ dependencies:
|
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.
|
131
|
+
version: 0.60.0
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.
|
138
|
+
version: 0.60.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rubocop-md
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -228,6 +228,10 @@ files:
|
|
228
228
|
- lib/logidze/history.rb
|
229
229
|
- lib/logidze/history/type.rb
|
230
230
|
- lib/logidze/history/version.rb
|
231
|
+
- lib/logidze/ignore_log_data.rb
|
232
|
+
- 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
|
231
235
|
- lib/logidze/meta.rb
|
232
236
|
- lib/logidze/migration.rb
|
233
237
|
- lib/logidze/model.rb
|