Module: RailsOnboarding::AbTestable
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/models/concerns/rails_onboarding/ab_testable.rb
Overview
Concern for A/B testing capabilities on User models Provides methods to assign users to test variants and track their performance
Instance Method Summary collapse
-
#ab_test_variant(test_name) ⇒ String?
Get the variant for a specific A/B test.
-
#all_ab_test_assignments ⇒ Hash
Get all A/B test assignments for this user.
-
#assign_variant(test_name, variant_name) ⇒ Boolean
Assign a specific variant to the user (useful for manual assignment).
-
#in_variant?(test_name, variant_name) ⇒ Boolean
Check if user is in a specific variant.
-
#track_ab_conversion(test_name, event_name, metadata = {}) ⇒ Object
Track a conversion for an A/B test.
Instance Method Details
#ab_test_variant(test_name) ⇒ String?
Get the variant for a specific A/B test
43 44 45 46 47 |
# File 'app/models/concerns/rails_onboarding/ab_testable.rb', line 43 def ab_test_variant(test_name) return nil unless ab_test_assignments.is_a?(Hash) ab_test_assignments[test_name.to_s] end |
#all_ab_test_assignments ⇒ Hash
Get all A/B test assignments for this user
79 80 81 |
# File 'app/models/concerns/rails_onboarding/ab_testable.rb', line 79 def all_ab_test_assignments ab_test_assignments || {} end |
#assign_variant(test_name, variant_name) ⇒ Boolean
Assign a specific variant to the user (useful for manual assignment)
70 71 72 73 74 |
# File 'app/models/concerns/rails_onboarding/ab_testable.rb', line 70 def assign_variant(test_name, variant_name) self.ab_test_assignments ||= {} self.ab_test_assignments[test_name.to_s] = variant_name.to_s save if persisted? end |
#in_variant?(test_name, variant_name) ⇒ Boolean
Check if user is in a specific variant
58 59 60 |
# File 'app/models/concerns/rails_onboarding/ab_testable.rb', line 58 def in_variant?(test_name, variant_name) ab_test_variant(test_name) == variant_name.to_s end |
#track_ab_conversion(test_name, event_name, metadata = {}) ⇒ Object
Track a conversion for an A/B test
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'app/models/concerns/rails_onboarding/ab_testable.rb', line 91 def track_ab_conversion(test_name, event_name, = {}) variant = ab_test_variant(test_name) return unless variant # Track using analytics system if available if respond_to?(:track_analytics_event) track_analytics_event( "ab_test_conversion", { test_name: test_name.to_s, variant: variant, event_name: event_name.to_s }.merge() ) end end |