Skip to content

Commit ac30fdd

Browse files
committed
refactor: Improve Env-based specs setup
1 parent b372e90 commit ac30fdd

File tree

13 files changed

+46
-36
lines changed

13 files changed

+46
-36
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,14 @@ If it concerns you, you may configure Logidze to store history data in a separat
213213
bundle exec rails logidze:model Post --detached
214214
```
215215

216+
You can also configure Logidze to always store history data in a separate table for all models:
217+
218+
```ruby
219+
# config/initializers/logidze.rb
220+
221+
Logidze.log_data_placement = :detached
222+
```
223+
216224
**IMPORTANT:** Using `--detached` mode for storing historic data slightly decreases performance. Check [bench results] for the details.
217225

218226
## Usage

lib/generators/logidze/model/model_generator.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,11 @@ def inject_logidze_to_model
6363
return if update?
6464

6565
indents = " " * (class_name.scan("::").count + 1)
66-
macros_name = (detached? && !Logidze.treat_models_as_detached) ? "has_logidze detached: true\n" : "has_logidze\n"
66+
macros_name = detached? ? "has_logidze detached: true\n" : "has_logidze\n"
6767

68-
inject_into_class(model_file_path, class_name.demodulize, indents + macros_name)
68+
if File.readlines("#{destination_root}/#{model_file_path}").grep(/has_logidze/).empty?
69+
inject_into_class(model_file_path, class_name.demodulize, indents + macros_name)
70+
end
6971
end
7072

7173
no_tasks do
@@ -97,7 +99,7 @@ def backfill?
9799
end
98100

99101
def detached?
100-
options[:detached]
102+
options[:detached] || Logidze.detached_log_placement?
101103
end
102104

103105
def only_trigger?

lib/generators/logidze/model/templates/migration.rb.erb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ class <%= @migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::M
5858
end
5959
<%- end -%>
6060
<%- if backfill? -%>
61-
6261
reversible do |dir|
6362
dir.up do
6463
<%- if detached? %>

lib/logidze.rb

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,12 @@ class << self
3030
attr_accessor :sort_triggers_by_name
3131
# Determines what Logidze should do when upgrade is needed (:raise | :warn | :ignore)
3232
attr_reader :on_pending_upgrade
33-
# Determines if we should treat all models as detached regardless of the +detached: true+ macros presence
34-
# Usable for gem specs setup
35-
attr_accessor :treat_models_as_detached
33+
# Determines where to store +log_data+:
34+
# - +:inline+ - force Logidze to store it in the origin table in the +log_data+ column
35+
# - +:detached+ - force Logidze to store it in the +logidze_data+ table in the +log_data+ column
36+
#
37+
# By default we do not set +log_data_placement+ value and rely on `has_logidze` macros
38+
attr_accessor :log_data_placement
3639

3740
# Temporary disable DB triggers.
3841
#
@@ -57,6 +60,14 @@ def on_pending_upgrade=(mode)
5760
@on_pending_upgrade = mode
5861
end
5962

63+
def detached_log_placement?
64+
@log_data_placement == :detached
65+
end
66+
67+
def inline_log_placement?
68+
@log_data_placement == :inline
69+
end
70+
6071
private
6172

6273
def with_logidze_setting(name, value)
@@ -75,5 +86,5 @@ def with_logidze_setting(name, value)
7586
self.return_self_if_log_data_is_empty = true
7687
self.on_pending_upgrade = :ignore
7788
self.sort_triggers_by_name = false
78-
self.treat_models_as_detached = false
89+
self.log_data_placement = nil
7990
end

lib/logidze/has_logidze.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ module HasLogidze
99

1010
module ClassMethods # :nodoc:
1111
# Include methods to work with history.
12-
def has_logidze(ignore_log_data: Logidze.ignore_log_data_by_default, detached: false)
12+
def has_logidze(ignore_log_data: Logidze.ignore_log_data_by_default, detached: Logidze.detached_log_placement?)
1313
include Logidze::IgnoreLogData
1414
include Logidze::Model
15-
if detached || Logidze.treat_models_as_detached
15+
if detached && !Logidze.inline_log_placement?
1616
# Adds needed behavior to models and alters behavior of some methods from +Logidze::Model+ to
1717
# work with detached table for `log_data`
1818
include Logidze::Detachable

spec/dummy/config/application.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
# Store all table log data separately or in the origin table depending on the ENV variable.
2929
# Used to simplify testing
3030
LOGIDZE_DETACHED = ENV["LOGIDZE_DETACHED"] == "true"
31-
Logidze.treat_models_as_detached = LOGIDZE_DETACHED
31+
Logidze.log_data_placement = LOGIDZE_DETACHED ? :detached : :inline
3232

3333
if AFTER_TRIGGER
3434
require "generators/logidze/model/model_generator"

spec/generators/model_generator_spec.rb

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,6 @@ class User < ActiveRecord::Base
6464
context "with detached" do
6565
let(:base_args) { ["user", "--no-after-trigger", "--detached"] }
6666

67-
around(:example) do |example|
68-
old_value = Logidze.treat_models_as_detached
69-
Logidze.treat_models_as_detached = false
70-
example.run
71-
Logidze.treat_models_as_detached = old_value
72-
end
73-
7467
it "creates migration w/o `log_data` column and with correct arguments", :aggregate_failures do
7568
is_expected.to be_a_file
7669
is_expected.to contain(/execute procedure logidze_logger\(null, 'updated_at', null, null, null, 'User', #{Logidze::LogidzeData.quoted_table_name}\);/i)

spec/integration/debounce_time_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
before(:all) do
99
Dir.chdir("#{File.dirname(__FILE__)}/../dummy") do
10-
successfully "rails generate logidze:model post --debounce_time=5000 #{LOGIDZE_DETACHED ? " --detached" : ""}"
10+
successfully "rails generate logidze:model post --debounce_time=5000"
1111
successfully "rake db:migrate"
1212

1313
# Close active connections to handle db variables

spec/integration/filtering_spec.rb

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
it "cannot be used with both only and except options" do
77
Dir.chdir("#{File.dirname(__FILE__)}/../dummy") do
88
unsuccessfully "rails generate logidze:model post " \
9-
"--only=title --except=created_at #{LOGIDZE_DETACHED ? " --detached" : ""}"
9+
"--only=title --except=created_at"
1010
end
1111
end
1212

@@ -18,7 +18,7 @@
1818

1919
Dir.chdir("#{File.dirname(__FILE__)}/../dummy") do
2020
successfully "rails generate logidze:model post " \
21-
"--except=#{@except.join(" ")} #{LOGIDZE_DETACHED ? " --detached" : ""}"
21+
"--except=#{@except.join(" ")}"
2222
successfully "rake db:migrate"
2323

2424
# Close active connections to handle db variables
@@ -73,8 +73,7 @@
7373
@only = %w[title meta]
7474

7575
Dir.chdir("#{File.dirname(__FILE__)}/../dummy") do
76-
successfully "rails generate logidze:model post " \
77-
"--only=#{@only.join(" ")} #{LOGIDZE_DETACHED ? " --detached" : ""}"
76+
successfully "rails generate logidze:model post --only=#{@only.join(" ")}"
7877
successfully "rake db:migrate"
7978

8079
# Close active connections to handle db variables
@@ -128,8 +127,7 @@
128127
@only = %w[title rating]
129128

130129
Dir.chdir("#{File.dirname(__FILE__)}/../dummy") do
131-
successfully "rails generate logidze:model post " \
132-
"--only=#{@only.join(" ")} #{LOGIDZE_DETACHED ? " --detached" : ""}"
130+
successfully "rails generate logidze:model post --only=#{@only.join(" ")}"
133131
successfully "rake db:migrate"
134132

135133
# Close active connections to handle db variables
@@ -150,8 +148,7 @@
150148
ActiveRecord::Base.connection_pool.disconnect!
151149

152150
Dir.chdir("#{File.dirname(__FILE__)}/../dummy") do
153-
successfully "rails generate logidze:model post --except=updated_at #{LOGIDZE_DETACHED ? " --detached" : ""} " \
154-
"--update"
151+
successfully "rails generate logidze:model post --except=updated_at --update"
155152
successfully "rake db:migrate"
156153

157154
ActiveRecord::Base.connection_pool.disconnect!

spec/integration/meta_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
before(:all) do
99
Dir.chdir("#{File.dirname(__FILE__)}/../dummy") do
10-
successfully "rails generate logidze:model user --only-trigger --limit=5 #{LOGIDZE_DETACHED ? " --detached" : ""}"
10+
successfully "rails generate logidze:model user --only-trigger --limit=5"
1111
successfully "rake db:migrate"
1212

1313
# Close active connections to handle db variables

0 commit comments

Comments
 (0)