Skip to content

Commit 3296abf

Browse files
authored
Fix double initialization of user authentication in ScriptTag (#357)
1 parent b9a9155 commit 3296abf

File tree

4 files changed

+48
-8
lines changed

4 files changed

+48
-8
lines changed

intercom-rails.gemspec

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,13 @@ Gem::Specification.new do |s|
1919
s.test_files = Dir["test/**/*"]
2020

2121
s.add_dependency 'activesupport', '>4.0'
22+
2223
s.add_development_dependency 'rake'
2324
s.add_development_dependency 'actionpack', '>5.0'
2425
s.add_development_dependency 'rspec', '~> 3.13'
2526
s.add_development_dependency 'rspec-rails', '~> 5.0'
2627
s.add_development_dependency 'pry'
27-
s.add_development_dependency 'sinatra', '~> 2.0'
28-
s.add_development_dependency 'thin', '~> 1.7.0'
29-
s.add_development_dependency 'bigdecimal', '1.3.5'
28+
s.add_development_dependency 'sinatra', '~> 3.0'
3029
s.add_development_dependency 'tzinfo'
3130
s.add_development_dependency 'gem-release'
3231
end

lib/intercom-rails/script_tag.rb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,20 @@ def initialize(options = {})
2525
self.controller = options[:controller]
2626
@show_everywhere = options[:show_everywhere]
2727
@session_duration = session_duration_from_config
28-
self.user_details = options[:find_current_user_details] ? find_current_user_details : options[:user_details]
28+
29+
initial_user_details = if options[:find_current_user_details]
30+
find_current_user_details
31+
else
32+
options[:user_details] || {}
33+
end
34+
35+
lead_attributes = find_lead_attributes
36+
37+
self.user_details = initial_user_details.merge(lead_attributes)
2938

3039
self.encrypted_mode_enabled = options[:encrypted_mode] || Config.encrypted_mode
3140
self.encrypted_mode = IntercomRails::EncryptedMode.new(secret, options[:initialization_vector], {:enabled => encrypted_mode_enabled})
3241

33-
# Request specific custom data for non-signed up users base on lead_attributes
34-
self.user_details = self.user_details.merge(find_lead_attributes)
35-
3642
self.company_details = if options[:find_current_company_details]
3743
find_current_company_details
3844
elsif options[:user_details]

lib/intercom-rails/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module IntercomRails
2-
VERSION = "1.0.1"
2+
VERSION = "1.0.2"
33
end

spec/script_tag_spec.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,42 @@ def user
263263
# Rejects
264264
expect(script_tag.intercom_settings[:ad_data]).to eq(nil)
265265
end
266+
end
267+
268+
context 'with lead attributes' do
269+
before do
270+
IntercomRails.config.user.lead_attributes = [:plan]
271+
IntercomRails.config.api_secret = 'abcdefgh'
272+
allow_any_instance_of(IntercomRails::ScriptTag).to receive(:controller).and_return(
273+
double(intercom_custom_data: double(user: { 'plan' => 'pro' }))
274+
)
275+
end
266276

277+
it 'merges lead attributes with user details' do
278+
script_tag = ScriptTag.new(
279+
user_details: {
280+
user_id: '1234',
281+
name: 'Test User'
282+
}
283+
)
284+
285+
expect(script_tag.intercom_settings[:plan]).to eq('pro')
286+
expect(script_tag.intercom_settings[:user_hash]).to be_present
287+
end
288+
289+
it 'preserves existing user details when merging lead attributes' do
290+
script_tag = ScriptTag.new(
291+
user_details: {
292+
user_id: '1234',
293+
name: 'Test User',
294+
295+
}
296+
)
297+
298+
expect(script_tag.intercom_settings[:plan]).to eq('pro')
299+
expect(script_tag.intercom_settings[:name]).to eq('Test User')
300+
expect(script_tag.intercom_settings[:email]).to eq('[email protected]')
301+
end
267302
end
268303

269304
end

0 commit comments

Comments
 (0)