posthog-rails 3.12.3 → 3.13.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 499457f4cdb3d65001ca2052dcce6231b7f56879333a5dd5c957376460a70992
4
- data.tar.gz: e06c59907254de2d57373a167b20c21d5e54df9aca89b59bda2f138cd81e731b
3
+ metadata.gz: dbadf59825cbf2d519a1eab2aa36e56cba2bc9c395076857e50bc126e41300b0
4
+ data.tar.gz: de897b215980ee6bcbbfe54416073fed3d5b9321fce30443dacb015a7785b073
5
5
  SHA512:
6
- metadata.gz: 6c51cd064c094fc7df538a348a3faf842a873597e527eadb65e341850649beb09e18159d191b32bce744077ed54afa6c791479c74045ed018007cb647b666a05
7
- data.tar.gz: c61468861d957d4a5cc41276fdae05ce4f00d621af51320dbb05c8f9571df28aa1d89524600f25ce71e2bfe1b9864678b5340583888e7682a9da7b1cc514a847
6
+ metadata.gz: 33068f5f9b2673d0f9acf9f1acb20f50a8f99c04e1182911d9245c539e8d2566a3c42fb6da125d89853a7cadadf187754b3d49e24666a46d274800bc9badf82f
7
+ data.tar.gz: d94d7cff285e97a7769683f1349689b770d8ddb3610ceb0f21cf68067ca56b0fe2ffbb103f2c5720fd39270cc3d84f6c8fb9e9c4e39fb83e2fb65a8da35123c3
@@ -37,6 +37,12 @@ PostHog::Rails.configure do |config|
37
37
  # making it easier to identify affected users and debug user-specific issues.
38
38
  # config.current_user_method = :current_user
39
39
 
40
+ # Or provide a resolver for apps that store user context outside controllers,
41
+ # such as ActiveSupport::CurrentAttributes. The resolver takes precedence over
42
+ # current_user_method and may accept the controller as an argument.
43
+ # config.current_user_resolver = proc { Current.user }
44
+ # config.current_user_resolver = proc { |controller| controller.current_user }
45
+
40
46
  # Additional exception classes to exclude from reporting
41
47
  # These are added to the default excluded exceptions
42
48
  # config.excluded_exceptions = [
@@ -69,20 +69,40 @@ module PostHog
69
69
  def extract_distinct_id(env)
70
70
  # Prefer authenticated Rails user context. Request/tracing context is
71
71
  # applied later by the core capture path if this returns nil.
72
- if PostHog::Rails.config&.capture_user_context && env['action_controller.instance']
73
- controller = env['action_controller.instance']
74
- method_name = PostHog::Rails.config&.current_user_method || :current_user
72
+ return nil unless PostHog::Rails.config&.capture_user_context
75
73
 
76
- if controller.respond_to?(method_name, true)
77
- user = controller.send(method_name)
78
- user_id = extract_user_id(user) if user
79
- return user_id if present?(user_id)
80
- end
81
- end
74
+ user = extract_current_user(env['action_controller.instance'])
75
+ user_id = extract_user_id(user) if user
76
+ return user_id if present?(user_id)
82
77
 
83
78
  nil
84
79
  end
85
80
 
81
+ def extract_current_user(controller)
82
+ resolver = PostHog::Rails.config&.current_user_resolver
83
+ return resolve_current_user(resolver, controller) if resolver
84
+
85
+ method_name = PostHog::Rails.config&.current_user_method || :current_user
86
+ return unless controller.respond_to?(method_name, true)
87
+
88
+ controller.send(method_name)
89
+ end
90
+
91
+ def resolve_current_user(resolver, controller)
92
+ call_current_user_resolver(resolver, controller)
93
+ rescue StandardError => e
94
+ PostHog::Logging.logger.warn("current_user_resolver failed: #{e.message}")
95
+ nil
96
+ end
97
+
98
+ def call_current_user_resolver(resolver, controller)
99
+ if resolver.arity.zero?
100
+ controller ? controller.instance_exec(&resolver) : resolver.call
101
+ elsif controller
102
+ resolver.call(controller)
103
+ end
104
+ end
105
+
86
106
  def extract_user_id(user)
87
107
  # Use configured method if specified
88
108
  method_name = PostHog::Rails.config&.user_id_method
@@ -32,6 +32,10 @@ module PostHog
32
32
  # @return [Symbol] Method name to call on controller to get the current user. Defaults to :current_user.
33
33
  attr_accessor :current_user_method
34
34
 
35
+ # @return [Proc, nil] Callable used to resolve the current user. When set, this takes precedence over
36
+ # current_user_method. The callable may accept the controller instance or no arguments.
37
+ attr_accessor :current_user_resolver
38
+
35
39
  # @return [Symbol, nil] Method name to call on the user object to get distinct_id. When nil, tries:
36
40
  # posthog_distinct_id, distinct_id, id, pk, uuid in order.
37
41
  attr_accessor :user_id_method
@@ -68,6 +72,7 @@ module PostHog
68
72
  @use_tracing_headers = true
69
73
  @capture_user_context = true
70
74
  @current_user_method = :current_user
75
+ @current_user_resolver = nil
71
76
  @user_id_method = nil
72
77
  @logs_enabled = false
73
78
  @logs_forward_rails_logger = true
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posthog-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.12.3
4
+ version: 3.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - PostHog
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '3.12'
32
+ version: '3.13'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '3.12'
39
+ version: '3.13'
40
40
  description: Automatic exception tracking and instrumentation for Ruby on Rails applications
41
41
  using PostHog
42
42
  email: engineering@posthog.com