Skip to content

Commit bd2bbac

Browse files
committed
Fix context shim override behavior
1 parent d29e26a commit bd2bbac

3 files changed

Lines changed: 32 additions & 14 deletions

File tree

lib/split/encapsulated_helper.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ def initialize(context)
2323
@context = context
2424
end
2525

26+
def params
27+
request.params if request_present?
28+
end
29+
30+
def request
31+
@context.request if @context.respond_to?(:request)
32+
end
33+
2634
def ab_user
2735
@ab_user ||= Split::User.new(@context)
2836
end

lib/split/helper.rb

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,11 @@ def override_alternative(experiment_name)
121121
end
122122

123123
def override_alternative_by_params(experiment_name)
124-
defined?(params) && params[OVERRIDE_PARAM_NAME] && params[OVERRIDE_PARAM_NAME][experiment_name]
124+
params_present? && params[OVERRIDE_PARAM_NAME] && params[OVERRIDE_PARAM_NAME][experiment_name]
125125
end
126126

127127
def override_alternative_by_cookies(experiment_name)
128-
return unless defined?(request)
128+
return unless request_present?
129129

130130
if request.cookies && request.cookies.key?("split_override")
131131
experiments = JSON.parse(request.cookies["split_override"]) rescue {}
@@ -134,34 +134,42 @@ def override_alternative_by_cookies(experiment_name)
134134
end
135135

136136
def split_generically_disabled?
137-
defined?(params) && params["SPLIT_DISABLE"]
137+
params_present? && params["SPLIT_DISABLE"]
138138
end
139139

140140
def ab_user
141141
@ab_user ||= User.new(self)
142142
end
143143

144144
def exclude_visitor?
145-
defined?(request) && (instance_exec(request, &Split.configuration.ignore_filter) || is_ignored_ip_address? || is_robot? || is_preview?)
145+
request_present? && (instance_exec(request, &Split.configuration.ignore_filter) || is_ignored_ip_address? || is_robot? || is_preview?)
146146
end
147147

148148
def is_robot?
149-
defined?(request) && request.user_agent =~ Split.configuration.robot_regex
149+
request_present? && request.user_agent =~ Split.configuration.robot_regex
150150
end
151151

152152
def is_preview?
153-
defined?(request) && defined?(request.headers) && request.headers["x-purpose"] == "preview"
153+
request_present? && defined?(request.headers) && request.headers["x-purpose"] == "preview"
154154
end
155155

156156
def is_ignored_ip_address?
157157
return false if Split.configuration.ignore_ip_addresses.empty?
158158

159159
Split.configuration.ignore_ip_addresses.each do |ip|
160-
return true if defined?(request) && (request.ip == ip || (ip.class == Regexp && request.ip =~ ip))
160+
return true if request_present? && (request.ip == ip || (ip.class == Regexp && request.ip =~ ip))
161161
end
162162
false
163163
end
164164

165+
def params_present?
166+
defined?(params) && params != nil
167+
end
168+
169+
def request_present?
170+
defined?(request) && request != nil
171+
end
172+
165173
def active_experiments
166174
ab_user.active_experiments
167175
end

spec/encapsulated_helper_spec.rb

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,21 @@
55
describe Split::EncapsulatedHelper do
66
include Split::EncapsulatedHelper
77

8-
def params
9-
raise NoMethodError, "This method is not really defined"
10-
end
11-
128
describe "ab_test" do
139
before do
1410
allow_any_instance_of(Split::EncapsulatedHelper::ContextShim).to receive(:ab_user)
1511
.and_return(mock_user)
1612
end
1713

18-
it "should not raise an error when params raises an error" do
19-
expect { params }.to raise_error(NoMethodError)
20-
expect { ab_test("link_color", "blue", "red") }.not_to raise_error
14+
context "when params raises an error" do
15+
before do
16+
allow(self).to receive(:params).and_raise(NoMethodError)
17+
end
18+
19+
it "should not raise an error " do
20+
expect { params }.to raise_error(NoMethodError)
21+
expect { ab_test("link_color", "blue", "red") }.not_to raise_error
22+
end
2123
end
2224

2325
it "calls the block with selected alternative" do

0 commit comments

Comments
 (0)