paper_trail-rails 0.5.2 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e89af0157d160e6aab5edf01697d9528223a25d583aff72d03452296967adfce
4
- data.tar.gz: 3fc1fb341feb826de4b06e78b9dec334dac3ea7d797730eb2851200bdb8ffb92
3
+ metadata.gz: 9cbd2f0eda94258a20e3a294ed155191773c27af3d91bcbd66c63971084e37e8
4
+ data.tar.gz: d59ed0df5959182a653556c3583e963ef9df5d2669821f15b4ae06c2deade834
5
5
  SHA512:
6
- metadata.gz: b8d1e399f0afbcaac11dea522ebe1988c8ab2e079f0704e2f3f8ff465c0fecbac51c14adb324bc37b2329a438b6d00ad175202af049bda6d2d8c588b8102f25a
7
- data.tar.gz: 9f372e1d62f07604002833c18ea03f18500c7aaa11679e62260dbe06ac5f700c3ec4fb4e6752b95e15b0296a1b82e6a625fc879871f5e572a5689ab3472d918f
6
+ metadata.gz: fd93b66499033e9b62bb521bd0870f81fa4a4c4fbe3f4916a5359dbd5fa04279ce5a2ec8396e474062588f70db1170f0e8810293145914dd2f25539451ef298a
7
+ data.tar.gz: 2b5bd83ee674694032247fec1212dd4ce2a3f49cddaa1ce1380235e4ed3300d3eb0af7ce126942d7beee48c1213e7faf411aff4017565afce8b039206ec1af1d
data/Changelog.md CHANGED
@@ -1,13 +1,35 @@
1
+ ## 0.6.1 (2023-06-15)
2
+ - Add `PaperTrail.metadata`, `PaperTrail.reverse_update_metadata`
3
+ - Change `set_default_metadata` to only set `command` to `default_command` if it hasn't been set yet. This
4
+ fixes bug where the command set by `RunnerCommandExtensions` got overwritten when the `whodunnit`
5
+ callback called `set_default_metadata` again.
6
+
7
+ ## 0.6.0 (2023-06-14)
8
+ - Include the rails subcommand (`'rails console'`, etc.) in the `command` metadata, not just `'rails'`
9
+ - When using `rails runner`, include the full Ruby code/file that was run in the `command` metadata.
10
+
11
+ ## 0.5.2 (2022-04-26)
12
+ - Fix: Don't update `PaperTrail.request.controller_info[:reason]` if reason is already present and we didn't even ask for a new reason
13
+
14
+ ## 0.5.1 (2022-04-26)
15
+ - Update due to upstream paper_trail defining `PaperTrail::Railtie` instead of `PaperTrail::Rails::Engine`
16
+
17
+ ## 0.5.0 (2022-04-26)
18
+ - Don't ask for reason if `PaperTrail.request.controller_info[:reason]` is already present.
19
+
20
+ For example, if you call a method that programatically sets the reason, then it shouldn't ask you to
21
+ manually type in a reason.
22
+
1
23
  ## 0.4.0 (2020-04-23)
2
24
  - Allow user to be selected by index in addition to id
3
- - Add config.select_user_inspect
4
- - Fix: Remove .default_order which may not be defined. Included as config example instead.
5
- - Fix: Replace respond.id with respond_to?(:id)
6
- - Fix: Should use require_user rather than require_reason
25
+ - Add `config.select_user_inspect`
26
+ - Fix: Remove `.default_order` which may not be defined. Included as config example instead.
27
+ - Fix: Replace `respond.id` with `respond_to?(:id)`
28
+ - Fix: Should use `require_user` rather than `require_reason`
7
29
 
8
30
  ## 0.3.0 (2019-09-16)
9
- - Fix: When running db:migrate:redo, command got recorded as "rails db:migrate:redo VERSION=2019…"
10
- instead of as "rails db:migrate: MigrationName (up)" as intended.
31
+ - Fix: When running `db:migrate:redo`, command got recorded as `"rails db:migrate:redo VERSION=2019…"`
32
+ instead of as `"rails db:migrate: MigrationName (up)"` as intended.
11
33
  - Add `config.source_location_filter`
12
34
 
13
35
  ## 0.2.2 (2019-07-18)
@@ -42,7 +42,7 @@ module PaperTrail
42
42
  end
43
43
  end
44
44
  end
45
- end
45
+ end # module Console
46
46
 
47
47
  class Configuration
48
48
  def console
@@ -1,5 +1,11 @@
1
1
  PaperTrail.class_eval do
2
2
 
3
+ unless methods.include?(:metadata)
4
+ def self.metadata
5
+ PaperTrail.request.controller_info
6
+ end
7
+ end
8
+
3
9
  unless methods.include?(:with_metadata)
4
10
  # Adds additional metadata to versions created within the given block. This will be merged with
5
11
  # (and may override) any metadata already set by your controller's info_for_paper_trail.
@@ -27,4 +33,11 @@ PaperTrail.class_eval do
27
33
  PaperTrail.request.controller_info = merged_metadata
28
34
  end
29
35
  end
36
+
37
+ unless methods.include?(:reverse_update_metadata)
38
+ def self.reverse_update_metadata(metadata)
39
+ merged_metadata = (::PaperTrail.request.controller_info || {}).reverse_merge(metadata)
40
+ PaperTrail.request.controller_info = merged_metadata
41
+ end
42
+ end
30
43
  end
@@ -0,0 +1,46 @@
1
+ # This needs to be required from lib/rails/commands/runner/runner_command.rb. Otherwise the original
2
+ # perform method gets called before we've even had a chance to modify it.
3
+ #
4
+ # To manually test this, run this from a Rails app that has this gem included:
5
+ # rails runner 'pp PaperTrail.request.controller_info'
6
+
7
+ require_relative 'railtie'
8
+
9
+ module PaperTrail
10
+ module Rails
11
+ module RunnerCommandExtensions
12
+ def perform(code_or_file = nil, *command_argv)
13
+ PaperTrail.request.whodunnit = nil
14
+ PaperTrail::Rails.set_default_metadata
15
+ PaperTrail.update_metadata(
16
+ command: "rails runner: #{code_or_file} #{command_argv.join(' ')}"
17
+ )
18
+ super
19
+ end
20
+
21
+ # Rails::Command::Base#create_command creates this alias too, and runner is what actually gets
22
+ # called so we have to override the alias too.
23
+ alias runner perform
24
+ end
25
+ end
26
+ end
27
+
28
+ module Rails
29
+ module Command
30
+ ( RunnerCommand)
31
+ class RunnerCommand
32
+ prepend ::PaperTrail::Rails::RunnerCommandExtensions
33
+ end
34
+ end
35
+ end
36
+
37
+ module PaperTrail
38
+ module Rails
39
+ class Railtie
40
+ runner do |application|
41
+ # Rails provides this callback that is invoked by RunnerCommand#peform before running the
42
+ # provided code. But it doesn't pass in the args from perform.
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,7 +1,7 @@
1
1
  module PaperTrail
2
2
  module Rails
3
3
  def self.version
4
- "0.5.2"
4
+ "0.6.1"
5
5
  end
6
6
  end
7
7
  end
@@ -1,3 +1,7 @@
1
+ require 'rails'
2
+ # When rails/commands/runner/runner_command.rb is invoked, it won't have already loaded
3
+ # active_record, so we need to load it to avoid getting uninitialized constant ActiveRecord.
4
+ require 'active_record'
1
5
  require 'paper_trail'
2
6
 
3
7
  require_relative 'rails/version'
@@ -26,8 +30,10 @@ module PaperTrail
26
30
 
27
31
  # Store some metadata about where the change came from
28
32
  def set_default_metadata
33
+ PaperTrail.reverse_update_metadata(
34
+ command: default_command,
35
+ )
29
36
  PaperTrail.update_metadata(
30
- command: "#{File.basename($PROGRAM_NAME)} #{ARGV.join ' '}",
31
37
  source_location: caller.find { |line|
32
38
  line.starts_with? ::Rails.root.to_s and
33
39
  config.source_location_filter.(line)
@@ -35,6 +41,21 @@ module PaperTrail
35
41
  )
36
42
  end
37
43
 
44
+ def default_command
45
+ program_name = File.basename($PROGRAM_NAME)
46
+ returning = program_name
47
+ returning << " #{rails_subcommand}" if program_name == 'rails'
48
+ returning << " #{ARGV.join(' ')}" if ARGV.any?
49
+ returning
50
+ end
51
+
52
+ def rails_subcommand
53
+ regexp = %r{lib/rails/commands/\w+/(\w+)_command\.rb}
54
+ if (frame = caller.detect { |f| f =~ regexp })
55
+ frame.match(regexp)[1]
56
+ end
57
+ end
58
+
38
59
  def select_user(required: false)
39
60
  other_allowed_values = config.select_user_other_allowed_values
40
61
  other_values_prompt = " (or #{other_allowed_values.join(' or ')})" if other_allowed_values.present?
@@ -0,0 +1,20 @@
1
+ # This file must be at path lib/rails/commands/runner/runner_command.rb so it overrides the file
2
+ # with the same name in the railties gem. This is the only way to modify the class (prepend a
3
+ # module) before perform is called on it.
4
+
5
+ # pp $LOAD_PATH.index($LOAD_PATH.grep(/railties/).first)
6
+ # pp $LOAD_PATH.index($LOAD_PATH.grep(/paper_trail-rails/).first)
7
+
8
+ begin
9
+ require 'paper_trail/rails'
10
+ rescue
11
+ puts $!
12
+ puts $!.backtrace
13
+ raise
14
+ end
15
+
16
+ railties_lib = Gem.loaded_specs['railties'].full_require_paths[0]
17
+
18
+ require railties_lib + '/rails/commands/runner/runner_command'
19
+
20
+ require_relative '../../../paper_trail/rails/runner_command_extensions'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paper_trail-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Rick
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-26 00:00:00.000000000 Z
11
+ date: 2023-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: paper_trail
@@ -105,7 +105,9 @@ files:
105
105
  - lib/paper_trail/rails/migration_extensions.rb
106
106
  - lib/paper_trail/rails/paper_trail_extensions.rb
107
107
  - lib/paper_trail/rails/railtie.rb
108
+ - lib/paper_trail/rails/runner_command_extensions.rb
108
109
  - lib/paper_trail/rails/version.rb
110
+ - lib/rails/commands/runner/runner_command.rb
109
111
  - paper_trail-rails.gemspec
110
112
  homepage: https://github.com/TylerRick/paper_trail-rails
111
113
  licenses: []
@@ -128,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
130
  - !ruby/object:Gem::Version
129
131
  version: '0'
130
132
  requirements: []
131
- rubygems_version: 3.3.3
133
+ rubygems_version: 3.1.6
132
134
  signing_key:
133
135
  specification_version: 4
134
136
  summary: Integrate with rails console and migrations. In rails console, ask who is