maestrano-connector-rails 2.2.1 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop_todo.yml +3 -22
- data/.ruby-version +1 -1
- data/CHANGELOG.md +19 -0
- data/DEVELOPER.md +1 -0
- data/Rakefile +1 -1
- data/app/controllers/maestrano/connec_controller.rb +2 -2
- data/app/jobs/maestrano/connector/rails/concerns/synchronization_job.rb +13 -3
- data/app/jobs/maestrano/connector/rails/concerns/update_configuration_job.rb +16 -0
- data/app/jobs/maestrano/connector/rails/update_configuration_job.rb +5 -0
- data/app/models/maestrano/connector/rails/concerns/entity.rb +1 -1
- data/app/models/maestrano/connector/rails/concerns/organization.rb +17 -19
- data/app/models/maestrano/connector/rails/concerns/synchronization.rb +3 -3
- data/lib/generators/connector/complex_entity_generator.rb +1 -1
- data/lib/generators/connector/install_generator.rb +1 -1
- data/lib/generators/connector/templates/home_controller.rb +1 -0
- data/lib/generators/connector/templates/home_index.haml +2 -2
- data/lib/maestrano/connector/rails.rb +0 -1
- data/lib/maestrano/connector/rails/version.rb +1 -1
- data/maestrano-connector-rails.gemspec +0 -1
- metadata +5 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fe9997e4a9fafbf461eb15e54a2dc5d0fd39eeb76452cb33949145b3bc7a8f88
|
4
|
+
data.tar.gz: 771eae938809e8aeb51b0d9250ebf560b565b02b1b5c28e6de5d173e810c1a2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c587dc91ddbf6f32455fcd0e2000dc91d5f5591a3490af4421ae964650705f7c1d78a4d74ed29a1d5f8be1d2e4a86c1fdea870493fcfb8ffadbdf4579d15bced
|
7
|
+
data.tar.gz: 87e3b05e86736f355859921020f5d4bf18140cf914d6896953614a5e83fb90b2ca5dc586d9f58ef55cfe395949ed0724ae40cf6da5575c93f0243cdd1ef62e08
|
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2018-
|
3
|
+
# on 2018-03-12 13:56:34 +1100 using RuboCop version 0.53.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
@@ -12,12 +12,7 @@ Lint/AssignmentInCondition:
|
|
12
12
|
Exclude:
|
13
13
|
- 'app/jobs/maestrano/connector/rails/push_to_connec_job.rb'
|
14
14
|
|
15
|
-
# Offense count:
|
16
|
-
Lint/UriEscapeUnescape:
|
17
|
-
Exclude:
|
18
|
-
- 'app/models/maestrano/connector/rails/concerns/organization.rb'
|
19
|
-
|
20
|
-
# Offense count: 29
|
15
|
+
# Offense count: 28
|
21
16
|
Metrics/AbcSize:
|
22
17
|
Max: 69
|
23
18
|
|
@@ -62,13 +57,6 @@ Performance/FlatMap:
|
|
62
57
|
Exclude:
|
63
58
|
- 'app/models/maestrano/connector/rails/concerns/complex_entity.rb'
|
64
59
|
|
65
|
-
# Offense count: 2
|
66
|
-
# Cop supports --auto-correct.
|
67
|
-
# Configuration parameters: AutoCorrect.
|
68
|
-
Performance/HashEachMethods:
|
69
|
-
Exclude:
|
70
|
-
- 'app/resources/maestrano/api/base_resource.rb'
|
71
|
-
|
72
60
|
# Offense count: 1
|
73
61
|
# Cop supports --auto-correct.
|
74
62
|
# Configuration parameters: Whitelist.
|
@@ -154,7 +142,7 @@ Style/RegexpLiteral:
|
|
154
142
|
Exclude:
|
155
143
|
- 'app/models/maestrano/connector/rails/concerns/entity.rb'
|
156
144
|
|
157
|
-
# Offense count:
|
145
|
+
# Offense count: 10
|
158
146
|
# Cop supports --auto-correct.
|
159
147
|
# Configuration parameters: EnforcedStyle.
|
160
148
|
# SupportedStyles: implicit, explicit
|
@@ -166,10 +154,3 @@ Style/RescueStandardError:
|
|
166
154
|
- 'app/models/maestrano/connector/rails/concerns/entity.rb'
|
167
155
|
- 'app/models/maestrano/connector/rails/concerns/organization.rb'
|
168
156
|
- 'app/resources/maestrano/api/base_resource.rb'
|
169
|
-
|
170
|
-
# Offense count: 2
|
171
|
-
# Cop supports --auto-correct.
|
172
|
-
# Configuration parameters: ConvertCodeThatCanStartToReturnNil.
|
173
|
-
Style/SafeNavigation:
|
174
|
-
Exclude:
|
175
|
-
- 'app/models/maestrano/connector/rails/concerns/entity.rb'
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3
|
1
|
+
2.3
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
## 2.3.0
|
2
|
+
|
3
|
+
* Send data to Connec! even if the push/pull parameters are disabled (Transac! integration)
|
4
|
+
* Randomise cron jobs time to avoid connectors crowding
|
5
|
+
* Fix duplicated Sidekiq UI configuration and time based attack
|
6
|
+
|
7
|
+
## 2.2.1
|
8
|
+
|
9
|
+
* Fix a bug where the CreationMapper was used to map updates coming from external
|
10
|
+
|
11
|
+
## 2.2.0
|
12
|
+
|
13
|
+
* New applications workflow
|
14
|
+
* JSON API / Pundit introduced to manage resources
|
15
|
+
|
16
|
+
### Migration Guide
|
17
|
+
* Add this Gems to the Gemfile
|
18
|
+
* `jsonapi-resources`, `pundit`, `pundit-resources`
|
19
|
+
|
1
20
|
## 2.1.3
|
2
21
|
|
3
22
|
### Features
|
data/DEVELOPER.md
CHANGED
data/Rakefile
CHANGED
@@ -8,7 +8,7 @@ require 'bundler/gem_tasks'
|
|
8
8
|
require 'rspec/core/rake_task'
|
9
9
|
require 'rubocop/rake_task'
|
10
10
|
|
11
|
-
APP_RAKEFILE = File.expand_path('
|
11
|
+
APP_RAKEFILE = File.expand_path('spec/dummy/Rakefile', __dir__)
|
12
12
|
load 'rails/tasks/engine.rake'
|
13
13
|
|
14
14
|
RuboCop::RakeTask.new
|
@@ -24,12 +24,12 @@ class Maestrano::ConnecController < Maestrano::Rails::WebHookController
|
|
24
24
|
entity_instance.push_entities_to_external(mapped_entity[:connec_entities])
|
25
25
|
entity_instance.after_sync(last_synchronization_date)
|
26
26
|
rescue => e
|
27
|
-
Maestrano::Connector::Rails::ConnectorLogger.log('warn', organization, "error processing notification entity_name=\"#{entity_name}\", message=\"#{e.message}\", #{e.backtrace
|
27
|
+
Maestrano::Connector::Rails::ConnectorLogger.log('warn', organization, "error processing notification entity_name=\"#{entity_name}\", message=\"#{e.message}\", trace=\"#{e.backtrace}\"")
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
31
31
|
rescue => e
|
32
|
-
Maestrano::Connector::Rails::ConnectorLogger.log('warn', nil, "error processing notification #{e.message} - #{e.backtrace
|
32
|
+
Maestrano::Connector::Rails::ConnectorLogger.log('warn', nil, "error processing notification #{e.message} - #{e.backtrace}")
|
33
33
|
end
|
34
34
|
|
35
35
|
head 200, content_type: 'application/json'
|
@@ -13,13 +13,23 @@ module Maestrano::Connector::Rails::Concerns::SynchronizationJob
|
|
13
13
|
def find_job(organization_id)
|
14
14
|
queue = Sidekiq::Queue.new(:default)
|
15
15
|
queue.find do |job|
|
16
|
-
|
16
|
+
job_organization_id = begin
|
17
|
+
job.item['args'][0]['arguments'].first
|
18
|
+
rescue
|
19
|
+
false
|
20
|
+
end
|
21
|
+
organization_id == job_organization_id
|
17
22
|
end
|
18
23
|
end
|
19
24
|
|
20
25
|
def find_running_job(organization_id)
|
21
26
|
Sidekiq::Workers.new.find do |_, _, work|
|
22
|
-
|
27
|
+
job_organization_id = begin
|
28
|
+
work['payload']['args'][0]['arguments'].first
|
29
|
+
rescue
|
30
|
+
false
|
31
|
+
end
|
32
|
+
work['queue'] == 'default' && organization_id == job_organization_id
|
23
33
|
end
|
24
34
|
rescue
|
25
35
|
nil
|
@@ -87,7 +97,7 @@ module Maestrano::Connector::Rails::Concerns::SynchronizationJob
|
|
87
97
|
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Finished synchronization, organization=#{organization.uid}, status=success")
|
88
98
|
current_synchronization.mark_as_success
|
89
99
|
rescue => e
|
90
|
-
Maestrano::Connector::Rails::ConnectorLogger.log('
|
100
|
+
Maestrano::Connector::Rails::ConnectorLogger.log('warn', organization, "Finished synchronization, organization=#{organization.uid}, status=error, message=\"#{e.message}\" backtrace=\"#{e.backtrace}\"")
|
91
101
|
current_synchronization.mark_as_error(e.message)
|
92
102
|
end
|
93
103
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Periodically fetch the developer platform configuration
|
2
|
+
module Maestrano::Connector::Rails::Concerns::UpdateConfigurationJob
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
queue_as :default
|
7
|
+
end
|
8
|
+
|
9
|
+
def perform
|
10
|
+
return if ENV['SKIP_CONFIGURATION']
|
11
|
+
Maestrano.reset!
|
12
|
+
Maestrano.auto_configure
|
13
|
+
rescue StandardError => e
|
14
|
+
Rails.logger.warn "Cannot load configuration #{e.message}"
|
15
|
+
end
|
16
|
+
end
|
@@ -388,7 +388,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
388
388
|
else
|
389
389
|
# Store External error
|
390
390
|
Maestrano::Connector::Rails::ConnectorLogger.log('error', @organization, "Error while pushing to #{Maestrano::Connector::Rails::External.external_name}: #{e}")
|
391
|
-
Maestrano::Connector::Rails::ConnectorLogger.log('debug', @organization, "Error while pushing backtrace: #{e.backtrace
|
391
|
+
Maestrano::Connector::Rails::ConnectorLogger.log('debug', @organization, "Error while pushing backtrace: #{e.backtrace}")
|
392
392
|
idmap.update(message: e.message.truncate(255))
|
393
393
|
end
|
394
394
|
end
|
@@ -13,9 +13,6 @@ module Maestrano::Connector::Rails::Concerns::Organization
|
|
13
13
|
# group.some_required_field = 'some-appropriate-default-value'
|
14
14
|
end
|
15
15
|
|
16
|
-
# Callbacks
|
17
|
-
before_save :update_metadata
|
18
|
-
|
19
16
|
#===================================
|
20
17
|
# Encryptions
|
21
18
|
#===================================
|
@@ -53,7 +50,19 @@ module Maestrano::Connector::Rails::Concerns::Organization
|
|
53
50
|
|
54
51
|
self.synchronized_entities = {}
|
55
52
|
Maestrano::Connector::Rails::External.entities_list.each do |entity|
|
56
|
-
|
53
|
+
begin
|
54
|
+
# Transform entity name from entities_list to class name
|
55
|
+
# ex. :item => Entities::Item
|
56
|
+
clazz = "Entities::#{entity.to_s.titleize.tr(' ', '')}".constantize
|
57
|
+
rescue
|
58
|
+
clazz = nil
|
59
|
+
end
|
60
|
+
|
61
|
+
# Check if Entity or ComplexEntity and set entity_push_to_connec and entity_push_to_external
|
62
|
+
entity_push_to_connec = clazz && clazz < Maestrano::Connector::Rails::Entity ? clazz.can_write_connec? : true
|
63
|
+
entity_push_to_external = clazz && clazz < Maestrano::Connector::Rails::Entity ? clazz.can_write_external? : true
|
64
|
+
|
65
|
+
synchronized_entities[entity.to_sym] = {can_push_to_connec: !pull_disabled && entity_push_to_connec, can_push_to_external: !push_disabled && entity_push_to_external}
|
57
66
|
end
|
58
67
|
end
|
59
68
|
|
@@ -61,7 +70,9 @@ module Maestrano::Connector::Rails::Concerns::Organization
|
|
61
70
|
result = {}
|
62
71
|
synchronized_entities.each do |entity, hash|
|
63
72
|
begin
|
64
|
-
|
73
|
+
# Transform entity name from entities_list to class name
|
74
|
+
# ex. :item => Entities::Item
|
75
|
+
clazz = "Entities::#{entity.to_s.titleize.tr(' ', '')}".constantize
|
65
76
|
rescue
|
66
77
|
next
|
67
78
|
end
|
@@ -138,7 +149,7 @@ module Maestrano::Connector::Rails::Concerns::Organization
|
|
138
149
|
can_push_to_external = synchronized_entities[entity.to_sym]
|
139
150
|
can_push_to_connec = synchronized_entities[entity.to_sym]
|
140
151
|
end
|
141
|
-
synchronized_entities[entity.to_sym] = {can_push_to_connec: (can_push_to_connec || default)
|
152
|
+
synchronized_entities[entity.to_sym] = {can_push_to_connec: (can_push_to_connec || default), can_push_to_external: (can_push_to_external || default)}
|
142
153
|
end
|
143
154
|
save
|
144
155
|
end
|
@@ -150,17 +161,4 @@ module Maestrano::Connector::Rails::Concerns::Organization
|
|
150
161
|
def push_to_external_enabled?(entity)
|
151
162
|
synchronized_entities.dig(Maestrano::Connector::Rails::EntityHelper.snake_name(entity), :can_push_to_external) && entity&.class&.can_write_external?
|
152
163
|
end
|
153
|
-
|
154
|
-
def set_instance_metadata
|
155
|
-
auth = {username: Maestrano[tenant].param('api.id'), password: Maestrano[tenant].param('api.key')}
|
156
|
-
res = HTTParty.get(URI.encode("#{Maestrano[tenant].param('api.host')}/api/v1/account/groups/#{uid}"), basic_auth: auth)
|
157
|
-
response = JSON.parse(res.body)
|
158
|
-
self.push_disabled = response.dig('data', 'metadata', 'push_disabled')
|
159
|
-
self.pull_disabled = response.dig('data', 'metadata', 'pull_disabled')
|
160
|
-
end
|
161
|
-
|
162
|
-
def update_metadata
|
163
|
-
set_instance_metadata
|
164
|
-
enable_historical_data(true) if push_disabled
|
165
|
-
end
|
166
164
|
end
|
@@ -36,15 +36,15 @@ module Maestrano::Connector::Rails::Concerns::Synchronization
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def mark_as_success
|
39
|
-
|
39
|
+
update(status: SUCCESS_STATUS)
|
40
40
|
end
|
41
41
|
|
42
42
|
def mark_as_error(msg)
|
43
|
-
|
43
|
+
update(status: ERROR_STATUS, message: msg)
|
44
44
|
end
|
45
45
|
|
46
46
|
def mark_as_partial
|
47
|
-
|
47
|
+
update(partial: true)
|
48
48
|
end
|
49
49
|
|
50
50
|
def clean_synchronizations
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Connector
|
2
2
|
module Generators
|
3
3
|
class ComplexEntityGenerator < ::Rails::Generators::Base
|
4
|
-
source_root File.expand_path('
|
4
|
+
source_root File.expand_path('templates', __dir__)
|
5
5
|
|
6
6
|
def copy_example_files
|
7
7
|
copy_file 'complex_entity_example/contact_and_lead.rb', 'app/models/entities/example_contact_and_lead.rb'
|
@@ -2,7 +2,7 @@ require 'fileutils'
|
|
2
2
|
|
3
3
|
module Connector
|
4
4
|
class InstallGenerator < ::Rails::Generators::Base
|
5
|
-
source_root File.expand_path('
|
5
|
+
source_root File.expand_path('templates', __dir__)
|
6
6
|
desc 'Creating a Maestrano Connector application'
|
7
7
|
|
8
8
|
def maestrano_generator
|
@@ -5,6 +5,7 @@ class HomeController < ApplicationController
|
|
5
5
|
|
6
6
|
# Update list of entities to synchronize
|
7
7
|
current_organization.synchronized_entities.keys.each do |entity|
|
8
|
+
next unless params[entity.to_s]
|
8
9
|
current_organization.synchronized_entities[entity][:can_push_to_connec] = params[entity.to_s]["to_connec"] == "1"
|
9
10
|
current_organization.synchronized_entities[entity][:can_push_to_external] = params[entity.to_s]["to_external"] == "1"
|
10
11
|
end
|
@@ -64,9 +64,9 @@
|
|
64
64
|
- current_organization.displayable_synchronized_entities.each do |k, v|
|
65
65
|
.row.sync-entity
|
66
66
|
.col-md-1.link-step-action
|
67
|
-
#{check_box("#{k}", "to_connec", {checked: (v[:can_push_to_connec] || v[:can_push_to_external]) && !current_organization.pull_disabled, onclick: "return !#{k}_to_external.checked;", disabled: current_organization.pull_disabled})}
|
67
|
+
#{check_box("#{k}", "to_connec", {checked: (v[:can_push_to_connec] || v[:can_push_to_external]) && !current_organization.pull_disabled, onclick: "return !#{k}_to_external.checked;", disabled: current_organization.pull_disabled || !v[:can_push_to_connec]})}
|
68
68
|
.col-md-1.link-step-action
|
69
|
-
#{check_box("#{k}", "to_external", {checked: v[:can_push_to_external] && !current_organization.push_disabled, onchange: "#{k}_to_connec.checked = #{!current_organization.pull_disabled};", disabled: current_organization.push_disabled})}
|
69
|
+
#{check_box("#{k}", "to_external", {checked: v[:can_push_to_external] && !current_organization.push_disabled, onchange: "#{k}_to_connec.checked = #{!current_organization.pull_disabled};", disabled: current_organization.push_disabled || !v[:can_push_to_external]})}
|
70
70
|
%label.col-md-7{:for => "#{k}", style: 'padding-top: 5px;'}
|
71
71
|
.col-md-6
|
72
72
|
#{v[:external_name]}
|
@@ -40,7 +40,6 @@ Gem::Specification.new do |s|
|
|
40
40
|
s.add_runtime_dependency('sidekiq', '~> 4.2.9')
|
41
41
|
s.add_runtime_dependency('sidekiq-cron')
|
42
42
|
s.add_runtime_dependency('sidekiq-unique-jobs')
|
43
|
-
s.add_runtime_dependency('sinatra')
|
44
43
|
s.add_runtime_dependency('slim')
|
45
44
|
|
46
45
|
s.add_development_dependency('bundler')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maestrano-connector-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maestrano
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -234,20 +234,6 @@ dependencies:
|
|
234
234
|
- - ">="
|
235
235
|
- !ruby/object:Gem::Version
|
236
236
|
version: '0'
|
237
|
-
- !ruby/object:Gem::Dependency
|
238
|
-
name: sinatra
|
239
|
-
requirement: !ruby/object:Gem::Requirement
|
240
|
-
requirements:
|
241
|
-
- - ">="
|
242
|
-
- !ruby/object:Gem::Version
|
243
|
-
version: '0'
|
244
|
-
type: :runtime
|
245
|
-
prerelease: false
|
246
|
-
version_requirements: !ruby/object:Gem::Requirement
|
247
|
-
requirements:
|
248
|
-
- - ">="
|
249
|
-
- !ruby/object:Gem::Version
|
250
|
-
version: '0'
|
251
237
|
- !ruby/object:Gem::Dependency
|
252
238
|
name: slim
|
253
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -458,9 +444,11 @@ files:
|
|
458
444
|
- app/helpers/maestrano/connector/rails/session_helper.rb
|
459
445
|
- app/jobs/maestrano/connector/rails/all_synchronizations_job.rb
|
460
446
|
- app/jobs/maestrano/connector/rails/concerns/synchronization_job.rb
|
447
|
+
- app/jobs/maestrano/connector/rails/concerns/update_configuration_job.rb
|
461
448
|
- app/jobs/maestrano/connector/rails/push_to_connec_job.rb
|
462
449
|
- app/jobs/maestrano/connector/rails/push_to_connec_worker.rb
|
463
450
|
- app/jobs/maestrano/connector/rails/synchronization_job.rb
|
451
|
+
- app/jobs/maestrano/connector/rails/update_configuration_job.rb
|
464
452
|
- app/models/maestrano/connector/rails/complex_entity.rb
|
465
453
|
- app/models/maestrano/connector/rails/concerns/complex_entity.rb
|
466
454
|
- app/models/maestrano/connector/rails/concerns/connec_helper.rb
|
@@ -575,7 +563,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
575
563
|
version: '0'
|
576
564
|
requirements: []
|
577
565
|
rubyforge_project:
|
578
|
-
rubygems_version: 2.
|
566
|
+
rubygems_version: 2.7.6
|
579
567
|
signing_key:
|
580
568
|
specification_version: 4
|
581
569
|
summary: Rails framework to build connector with Maestrano
|