intercom-rails 0.2.33 → 0.2.34

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
  SHA1:
3
- metadata.gz: 03b50b1d5b763f0ef0a553e7d72d8daa1a3cd412
4
- data.tar.gz: 4aacec38fd8a8696f56ee130487b9519959ea946
3
+ metadata.gz: bf8138e7cf9f1c997403f95a28146cdac9404b2d
4
+ data.tar.gz: 9c551fd51c30b8416ade93d958f5e4577f96f38f
5
5
  SHA512:
6
- metadata.gz: 5d80bc1ade277f6ea62376c67abd0185c30e9730fe2ba19b3132afb193229c3cbda4128e5d51566fa0a2a8adcdc0da975444651b52851f9717ce7ed313e7e728
7
- data.tar.gz: 1a7bb15f5946f704f24a33007eda1dc19757bc78b7389c99c0f51dcb80665a73ab57f7717a5e8703338373ddfff783dd11363a12cd739623cdf659353b6237bf
6
+ metadata.gz: f03ac8ed8936cfcaac4e0c373c3e0a2a8840efddba212c7cde24fa8436707f9b07de6ff1ef4cee5e899179ef51ab41265a5d3a44e66b5a371b565ffd697ea633
7
+ data.tar.gz: 99d4081d4157c022428e1509a5130d86c8eb25e69946451f66d740284609c8fc3991bc6e70e3e9b5da346bc2ae5ff11c470e44eba919c7bd0d3861dc55051fcd
@@ -44,6 +44,10 @@ If it's not working make sure:
44
44
  ```ruby
45
45
  config.user.current = Proc.new { current_user_object }
46
46
  ```
47
+ If your users can be defined in different ways in your app you can also pass an array as follows :
48
+ ```ruby
49
+ config.user.current = [Proc.new { current_user_object }, Proc.new { @user_object }]
50
+ ```
47
51
  * If you want the Intercom Messenger to be available when there is no current user, set `config.include_for_logged_out_users = true` in your config and sign up for the [Acquire](https://www.intercom.io/live-chat) package.
48
52
 
49
53
  Feel free to mail us: team@intercom.io, if you're still having trouble.
@@ -64,23 +68,62 @@ Because of this, it’s very important to properly shutdown Intercom when a user
64
68
 
65
69
  #### Using Devise
66
70
 
67
- If your Rails application uses devise for authentication, you simply need to add the following line in your "config/initializers/session_store.rb" :
71
+ If you use devise, you can override (if not already done) the session_controller by replacing in your `config/routes.rb` file :
72
+ ```ruby
73
+ devise_for :users
74
+ ```
75
+ by
76
+ ```ruby
77
+ devise_for :users, controllers: {sessions: "sessions"}
78
+ ```
79
+
80
+ Then you can use the following code to prepare Intercom Shutdown on log out in your `app/session_controller.rb`
68
81
 
69
82
  ```ruby
70
- Rails.application.config.session_store :cookie_store, key: 'intercom-session-' + IntercomRails.config.app_id
83
+ class SessionsController < Devise::SessionsController
84
+
85
+ after_action :prepare_intercom_shutdown, only: [:destroy]
86
+
87
+ # Your logic here
88
+
89
+ protected
90
+ def prepare_intercom_shutdown
91
+ IntercomRails::ShutdownHelper.prepare_intercom_shutdown(session)
92
+ end
93
+ end
71
94
  ```
72
95
 
73
- You should not modify or remove existing configurations in this file.
96
+ Assuming that the `destroy` method of session_controller redirects to your `visitors_controller.rb#index` method, edit your `visitors_controller` as follow :
97
+
98
+
99
+ ```ruby
100
+ class VisitorsController < ApplicationController
101
+ after_action :intercom_shutdown, only: [:index]
102
+
103
+ def index
104
+ # You logic here
105
+ end
106
+
107
+ # You logic here
108
+
109
+ protected
110
+ def intercom_shutdown
111
+ IntercomRails::ShutdownHelper.intercom_shutdown(session, cookies)
112
+ end
113
+ end
114
+ ```
74
115
 
75
116
  #### Using another service
76
117
 
77
- If you use another service than Devise or if you implemented your own authentication service, you can call the following method in a controller to shutdown Intercom on logout (self being the controller instance).
78
- **Be aware that if you call this method before a 'redirect_to' (quite common on logout) it will have no impact** as it is impossible to update cookies when you use a redirection.
118
+ If you use another service than Devise or if you implemented your own authentication service, you can call the following method in a controller to shutdown Intercom on logout.
79
119
 
80
120
  ```ruby
81
- IntercomRails::ShutdownHelper::intercom_shutdown_helper(self)
121
+ IntercomRails::ShutdownHelper::intercom_shutdown_helper(cookies)
82
122
  ```
83
123
 
124
+ **Be aware that if you call this method before a 'redirect_to' (quite common on logout) it will have no impact** as it is impossible to update cookies when you use a redirection.
125
+ But you can use the same logic as the `devise` implementation above.
126
+
84
127
  #### Session Duration
85
128
 
86
129
  To add a `session_duration` variable (in ms) to the widget, add the following line to `config/initializers/intercom.rb`:
@@ -68,6 +68,18 @@ module IntercomRails
68
68
  raise ArgumentError, "#{field_name} is not a proc" unless value.kind_of?(Proc)
69
69
  end
70
70
 
71
+ IS_ARAY_OF_PROC_VALIDATOR = Proc.new do |data, field_name|
72
+ raise ArgumentError, "#{field_name} data should be a proc or an array of proc" unless data.all? { |value| value.kind_of?(Proc)}
73
+ end
74
+
75
+ IS_PROC_OR_ARRAY_OF_PROC_VALIDATOR = Proc.new do |data, field_name|
76
+ if data.kind_of?(Array)
77
+ IS_ARAY_OF_PROC_VALIDATOR.call(data, field_name)
78
+ else
79
+ IS_PROC_VALIDATOR.call(data, field_name)
80
+ end
81
+ end
82
+
71
83
  def self.reset!
72
84
  to_reset = self.constants.map {|c| const_get c}
73
85
  to_reset << self
@@ -88,7 +100,7 @@ module IntercomRails
88
100
  config_accessor :include_for_logged_out_users
89
101
 
90
102
  config_group :user do
91
- config_accessor :current, &IS_PROC_VALIDATOR
103
+ config_accessor :current, &IS_PROC_OR_ARRAY_OF_PROC_VALIDATOR
92
104
  config_accessor :exclude_if, &IS_PROC_VALIDATOR
93
105
  config_accessor :model, &IS_PROC_VALIDATOR
94
106
  config_accessor :company_association, &IS_PROC_VALIDATOR
@@ -16,7 +16,11 @@ module IntercomRails
16
16
 
17
17
  def self.potential_user_objects
18
18
  if config.current.present?
19
- [Proc.new { instance_eval &IntercomRails.config.user.current }]
19
+ if config.current.kind_of?(Array)
20
+ config.current.map { |user| Proc.new { instance_eval &user } }
21
+ else
22
+ [Proc.new { instance_eval &IntercomRails.config.user.current }]
23
+ end
20
24
  else
21
25
  PREDEFINED_POTENTIAL_USER_OBJECTS
22
26
  end
@@ -137,8 +137,7 @@ module IntercomRails
137
137
  def app_id
138
138
  return user_details[:app_id] if user_details[:app_id].present?
139
139
  return IntercomRails.config.app_id if IntercomRails.config.app_id.present?
140
- return 'abcd1234' if defined?(Rails) && Rails.env.development?
141
-
140
+ return 'abcd1234' if defined?(Rails) && (Rails.env.development? || Rails.env.test?)
142
141
  nil
143
142
  end
144
143
 
@@ -4,8 +4,27 @@ module IntercomRails
4
4
  # It is recommanded to call this function every time a user log out of your application
5
5
  # specifically if you use both "Acquire" and another Intercom product
6
6
  # Do not use before a redirect_to because it will not clear the cookies on a redirection
7
- def self.intercom_shutdown_helper (controller)
8
- controller.response.delete_cookie("intercom-session-#{IntercomRails.config.app_id}")
7
+ def self.intercom_shutdown_helper(cookies)
8
+ if (cookies.is_a?(ActionDispatch::Cookies::CookieJar))
9
+ cookies["intercom-session-#{IntercomRails.config.app_id}"] = { value: nil, expires: 1.day.ago}
10
+ else
11
+ controller = cookies
12
+ Rails.logger.info("Warning: IntercomRails::ShutdownHelper.intercom_shutdown_helper takes an instance of ActionDispatch::Cookies::CookieJar as an argument since v0.2.34. Passing a controller is depreciated. See https://github.com/intercom/intercom-rails#shutdown for more details.")
13
+ controller.response.delete_cookie("intercom-session-#{IntercomRails.config.app_id}", { value: nil, expires: 1.day.ago})
14
+ end
15
+ rescue
9
16
  end
17
+
18
+ def self.prepare_intercom_shutdown(session)
19
+ session[:perform_intercom_shutdown] = true
20
+ end
21
+
22
+ def self.intercom_shutdown(session, cookies)
23
+ if session[:perform_intercom_shutdown]
24
+ session.delete(:perform_intercom_shutdown)
25
+ intercom_shutdown_helper(cookies)
26
+ end
27
+ end
28
+
10
29
  end
11
30
  end
@@ -1,3 +1,3 @@
1
1
  module IntercomRails
2
- VERSION = "0.2.33"
2
+ VERSION = "0.2.34"
3
3
  end
@@ -5,8 +5,11 @@ IntercomRails.config do |config|
5
5
 
6
6
  # == Intercom session_duration
7
7
  #
8
+ <%- if @session_duration -%>
8
9
  config.session_duration = <%= @session_duration %>
9
-
10
+ <%- else -%>
11
+ # config.session_duration = 300000
12
+ <%- end -%>
10
13
  # == Intercom secret key
11
14
  # This is required to enable secure mode, you can find it on your Setup
12
15
  # guide in the "Secure Mode" step.
@@ -40,6 +43,7 @@ IntercomRails.config do |config|
40
43
  config.user.current = Proc.new { <%= @current_user %> }
41
44
  <%- else -%>
42
45
  # config.user.current = Proc.new { current_user }
46
+ # config.user.current = [Proc.new { current_user }]
43
47
  <%- end -%>
44
48
 
45
49
  # == Include for logged out Users
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: intercom-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.33
4
+ version: 0.2.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben McRedmond
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-04-20 00:00:00.000000000 Z
13
+ date: 2016-04-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -204,9 +204,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
204
  version: '0'
205
205
  requirements: []
206
206
  rubyforge_project: intercom-rails
207
- rubygems_version: 2.2.3
207
+ rubygems_version: 2.4.8
208
208
  signing_key:
209
209
  specification_version: 4
210
210
  summary: Rails helper for emitting javascript script tags for Intercom
211
211
  test_files: []
212
- has_rdoc: