intercom-rails 0.2.35 → 0.2.36

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9d3cce2749664582e9707ca49d84e2f9492b196a
4
- data.tar.gz: 715ba3b7c602bc9ea3ded903d2d54f03b2a1fe20
3
+ metadata.gz: 442ecf7487fbe99a3fb44e6f14b33ddb002bd70f
4
+ data.tar.gz: cb7e27a634b175c80e62d07f6689da1c02029400
5
5
  SHA512:
6
- metadata.gz: 193a3d165c11b8e8d0be23f1f31d9ef9861514ac8b7bcfb9d1ce6cd39e68ce098be7ddc889de22ffa7843722c7a21c59da0459d4c5e121991252aaaf6eb86504
7
- data.tar.gz: b43c7346104a0aca028ff6e3c819b8639d46a7c97d4adefc19d523535cb17678f4fd9de8b39b7be6329c918c74ace4e8c30a78b95f2f53af02a960845971956a
6
+ metadata.gz: cd671fd16f7457d5ae016def0745c4658457fd181527249214a58925e42240bf665a1cbca7e728620c2cd074200e8c2758b289e475e4b278c6761cd84768670b
7
+ data.tar.gz: b452e1c389e83593c6f76b9b9d5ec2960dcb90e0f45352ca0ba2d66d695cfb285fdc2abf00e0a13f894e04796d0888635d955339e0166d6597b8cbce6cea7c89
@@ -9,7 +9,6 @@ require 'intercom-rails/custom_data_helper'
9
9
  require 'intercom-rails/shutdown_helper'
10
10
  require 'intercom-rails/auto_include_filter'
11
11
  require 'intercom-rails/config'
12
- require 'intercom-rails/import'
13
12
  require 'intercom-rails/railtie' if defined? Rails::Railtie
14
13
 
15
14
  module IntercomRails
@@ -94,7 +94,6 @@ module IntercomRails
94
94
  config_accessor :app_id
95
95
  config_accessor :session_duration
96
96
  config_accessor :api_secret
97
- config_accessor :api_key
98
97
  config_accessor :library_url
99
98
  config_accessor :enabled_environments, &ARRAY_VALIDATOR
100
99
  config_accessor :include_for_logged_out_users
@@ -1,8 +1,6 @@
1
1
  module IntercomRails
2
2
 
3
3
  class Error < StandardError; end
4
- class ImportError < Error; end
5
- class IntercomAPIError < Error; end
6
4
  class NoUserFoundError < Error; end
7
5
  class NoCompanyFoundError < Error; end
8
6
 
@@ -1,3 +1,3 @@
1
1
  module IntercomRails
2
- VERSION = "0.2.35"
2
+ VERSION = "0.2.36"
3
3
  end
@@ -8,14 +8,12 @@ module Intercom
8
8
 
9
9
  argument :app_id, :desc => "Your Intercom app-id, which can be found here: https://app.intercom.io/apps/api_keys"
10
10
  argument :api_secret, :desc => "Your Intercom api-secret, used for secure mode", :optional => true
11
- argument :api_key, :desc => "An Intercom API key, for various rake tasks", :optional => true
12
11
  argument :session_duration, :desc => "user session duration, this should match your app", :optional => true
13
12
 
14
13
  FALSEY_RESPONSES = ['n', 'no']
15
14
  def create_config_file
16
15
  @app_id = app_id
17
16
  @api_secret = api_secret
18
- @api_key = api_key
19
17
  @session_duration = session_duration
20
18
  @include_for_logged_out_users = false
21
19
 
@@ -20,16 +20,6 @@ IntercomRails.config do |config|
20
20
  # config.api_secret = "..."
21
21
  <%- end -%>
22
22
 
23
- # == Intercom API Key
24
- # This is required for some Intercom rake tasks like importing your users;
25
- # you can generate one at https://app.intercom.io/apps/api_keys.
26
- #
27
- <%- if @api_key -%>
28
- config.api_key = "<%= @api_key %>"
29
- <%- else -%>
30
- # config.api_key = "..."
31
- <%- end -%>
32
-
33
23
  # == Enabled Environments
34
24
  # Which environments is auto inclusion of the Javascript enabled for
35
25
  #
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.35
4
+ version: 0.2.36
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-06-09 00:00:00.000000000 Z
13
+ date: 2016-06-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -172,8 +172,6 @@ files:
172
172
  - lib/intercom-rails/custom_data_helper.rb
173
173
  - lib/intercom-rails/date_helper.rb
174
174
  - lib/intercom-rails/exceptions.rb
175
- - lib/intercom-rails/import.rb
176
- - lib/intercom-rails/intercom.rake
177
175
  - lib/intercom-rails/proxy.rb
178
176
  - lib/intercom-rails/proxy/company.rb
179
177
  - lib/intercom-rails/proxy/user.rb
@@ -204,8 +202,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
202
  version: '0'
205
203
  requirements: []
206
204
  rubyforge_project: intercom-rails
207
- rubygems_version: 2.2.5
205
+ rubygems_version: 2.5.1
208
206
  signing_key:
209
207
  specification_version: 4
210
208
  summary: Rails helper for emitting javascript script tags for Intercom
211
209
  test_files: []
210
+ has_rdoc:
@@ -1,180 +0,0 @@
1
- require 'net/http'
2
- require 'json'
3
- require 'uri'
4
-
5
- module IntercomRails
6
-
7
- class Import
8
-
9
- def self.bulk_create_api_endpoint
10
- host = (ENV['INTERCOM_RAILS_DEV'] ? "http://api.intercom.dev" : "https://api.intercom.io")
11
- URI.parse(host + "/v1/users/bulk_create")
12
- end
13
-
14
- def self.run(*args)
15
- new(*args).run
16
- end
17
-
18
- attr_reader :uri, :http, :max_batch_size
19
- attr_accessor :failed, :total_sent
20
-
21
- def initialize(options = {})
22
- @uri = Import.bulk_create_api_endpoint
23
- @http = Net::HTTP.new(@uri.host, @uri.port)
24
- @failed = []
25
- @total_sent = 0
26
- @max_batch_size = [(options[:max_batch_size] || 100), 100].min
27
-
28
- @status_enabled = !!options[:status_enabled]
29
-
30
- if uri.scheme == 'https'
31
- http.use_ssl = true
32
- http.ca_file = File.join(File.dirname(__FILE__), '../data/cacert.pem')
33
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
34
- end
35
- end
36
-
37
- # Check for ActiveRecord OR Mongoid
38
- def active_record?(user_klass)
39
- (defined?(ActiveRecord::Base) && (user_klass < ActiveRecord::Base))
40
- end
41
-
42
- def mongoid?(user_klass)
43
- (defined?(Mongoid::Document) && (user_klass < Mongoid::Document))
44
- end
45
-
46
- def supported_orm?(user_klass)
47
- active_record?(user_klass) || mongoid?(user_klass)
48
- end
49
-
50
- def assert_runnable
51
- raise ImportError, "You can only import your users from your production environment" unless (Rails.env.production? || Rails.env.staging?)
52
- raise ImportError, "We couldn't find your user class, please set one in config/initializers/intercom_rails.rb" unless user_klass.present?
53
- info "Found user class: #{user_klass}"
54
- raise ImportError, "Only ActiveRecord and Mongoid models are supported" unless supported_orm?(user_klass)
55
- raise ImportError, "Please add an Intercom API Key to config/initializers/intercom.rb" unless IntercomRails.config.api_key.present?
56
- info "Intercom API key found"
57
- end
58
-
59
- def run
60
- assert_runnable
61
-
62
- info "Sending users in batches of #{max_batch_size}:"
63
- batches do |batch, number_in_batch|
64
- failures = send_users(batch)['failed']
65
- self.failed += failures
66
- self.total_sent += number_in_batch
67
-
68
- progress '.' * (number_in_batch - failures.count)
69
- progress 'F' * failures.count
70
- end
71
- info "Successfully created #{self.total_sent - self.failed.count} users", :new_line => true
72
- info "Failed to create #{self.failed.count} #{(self.failed.count == 1) ? 'user' : 'users'}, this is likely due to bad data" unless failed.count.zero?
73
-
74
- self
75
- end
76
-
77
- def total_failed
78
- self.failed.count
79
- end
80
-
81
- private
82
-
83
- def batches
84
- if active_record?(user_klass)
85
- user_klass.find_in_batches(:batch_size => max_batch_size) do |users|
86
- users_for_wire = map_to_users_for_wire(users)
87
-
88
- yield(prepare_batch(users_for_wire), users_for_wire.count) unless users_for_wire.count.zero?
89
- end
90
- elsif mongoid?(user_klass)
91
- 0.step(user_klass.all.count, max_batch_size) do |offset|
92
- users_for_wire = map_to_users_for_wire(user_klass.limit(max_batch_size).skip(offset))
93
- yield(prepare_batch(users_for_wire), users_for_wire.count) unless users_for_wire.count.zero?
94
- end
95
- end
96
- end
97
-
98
- def map_to_users_for_wire(users)
99
- users.map do |u|
100
- user_proxy = Proxy::User.new(u)
101
- next unless user_proxy.valid?
102
-
103
- for_wire = user_proxy.to_hash
104
- companies = Proxy::Company.companies_for_user(user_proxy)
105
- for_wire.merge!(:companies => companies.map(&:to_hash)) unless companies.nil?
106
-
107
- for_wire
108
- end.compact
109
- end
110
-
111
- def prepare_batch(batch)
112
- {:users => batch}.to_json
113
- end
114
-
115
- def user_klass
116
- if IntercomRails.config.user.model.present?
117
- IntercomRails.config.user.model.call
118
- else
119
- user_klass_name if user_klass_name.class != Module
120
- end
121
- rescue NameError
122
- # Rails lazy loads constants, so this is how we check
123
- nil
124
- end
125
-
126
- def user_klass_name
127
- User
128
- end
129
-
130
- def send_users(users)
131
- request = Net::HTTP::Post.new(uri.request_uri)
132
- request.basic_auth(IntercomRails.config.app_id, IntercomRails.config.api_key)
133
- request["Content-Type"] = "application/json"
134
- request.body = users
135
-
136
- response = perform_request(request)
137
- JSON.parse(response.body)
138
- end
139
-
140
- MAX_REQUEST_ATTEMPTS = 3
141
- def perform_request(request, attempts = 0, error = {})
142
- if (attempts > 0) && (attempts < MAX_REQUEST_ATTEMPTS)
143
- sleep(0.5)
144
- elsif error.present?
145
- raise error[:exception] if error[:exception]
146
- raise exception_for_failed_response(error[:failed_response])
147
- end
148
-
149
- response = http.request(request)
150
-
151
- return response if successful_response?(response)
152
- perform_request(request, attempts + 1, :failed_response => response)
153
- rescue Timeout::Error, Errno::ECONNREFUSED, EOFError => e
154
- perform_request(request, attempts + 1, :exception => e)
155
- end
156
-
157
- def successful_response?(response)
158
- raise ImportError, "App ID or API Key are incorrect, please check them in config/initializers/intercom.rb" if response.code == '403'
159
- ['200', '201'].include?(response.code)
160
- end
161
-
162
- def exception_for_failed_response(response)
163
- code = response.code
164
- IntercomAPIError.new("The Intercom API request failed with the code: #{code}, after #{MAX_REQUEST_ATTEMPTS} attempts.")
165
- end
166
-
167
- def status_enabled?
168
- @status_enabled
169
- end
170
-
171
- def progress(str)
172
- print(str) if status_enabled?
173
- end
174
-
175
- def info(str, options = {})
176
- puts "#{"\n" if options[:new_line]}* #{str}" if status_enabled?
177
- end
178
-
179
- end
180
- end
@@ -1,12 +0,0 @@
1
- namespace :intercom do
2
-
3
- desc "Import your users into intercom"
4
- task :import => :environment do
5
- begin
6
- IntercomRails::Import.run(:status_enabled => true)
7
- rescue IntercomRails::ImportError => e
8
- puts e.message
9
- end
10
- end
11
-
12
- end