maestrano-connector-rails 0.4.3 → 0.4.4
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 +4 -4
- data/VERSION +1 -1
- data/app/controllers/maestrano/connec_controller.rb +7 -3
- data/app/models/maestrano/connector/rails/concerns/complex_entity.rb +10 -0
- data/app/models/maestrano/connector/rails/concerns/entity.rb +8 -2
- data/maestrano-connector-rails.gemspec +3 -3
- data/realse_notes.md +6 -0
- data/spec/controllers/connec_controller_spec.rb +2 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/models/complex_entity_spec.rb +4 -1
- data/spec/models/entity_spec.rb +15 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2b30b01e9635bb23e54086aa72a76209ff6ff90
|
4
|
+
data.tar.gz: 093c8366dae9dd669fd6989f95e8030c44698d1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4e022328533a25167c5c3d37b4c146edf6a9d88bec6d952209a3a52d3b156f7262800bdc7148ba8a4320272a4e39720704adb57529ccb294cfda08e5fd623a1
|
7
|
+
data.tar.gz: cd8609ffcf02458ea2b97419076ec7e521a28fa9fde702d2ce7c6bd9fecf773c6cc63dc9fb3a708f8e5bfb3f46132984d1ce71b2226715b31172f8c2b5c196cd
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.4
|
@@ -4,7 +4,7 @@ class Maestrano::ConnecController < Maestrano::Rails::WebHookController
|
|
4
4
|
Rails.logger.debug "Received notification from Connec!: #{params}"
|
5
5
|
|
6
6
|
begin
|
7
|
-
params.except(:tenant, :controller, :action).each do |entity_name, entities|
|
7
|
+
params.except(:tenant, :controller, :action, :connec).each do |entity_name, entities|
|
8
8
|
|
9
9
|
entity_instance_hash = find_entity_instance(entity_name)
|
10
10
|
next Rails.logger.info "Received notification from Connec! for unknow entity: #{entity_name}" unless entity_instance_hash
|
@@ -23,11 +23,15 @@ class Maestrano::ConnecController < Maestrano::Rails::WebHookController
|
|
23
23
|
last_synchronization = organization.last_successful_synchronization
|
24
24
|
|
25
25
|
entity_instance.before_sync(connec_client, external_client, last_synchronization, organization, {})
|
26
|
+
|
27
|
+
|
26
28
|
# Build expected input for consolidate_and_map_data
|
27
29
|
if entity_instance_hash[:is_complex]
|
28
|
-
|
30
|
+
filtered_entities = entity_instance.filter_connec_entities(Hash[ *entity_instance.class.connec_entities_names.collect{|name| name.parameterize('_').pluralize == entity_name ? [name, [entity]] : [ name, []]}.flatten(1) ], organization)
|
31
|
+
mapped_entity = entity_instance.consolidate_and_map_data(filtered_entities, Hash[ *entity_instance.class.external_entities_names.collect{|name| [ name, []]}.flatten(1) ], organization, {})
|
29
32
|
else
|
30
|
-
|
33
|
+
filtered_entities = entity_instance.filter_connec_entities([entity], organization)
|
34
|
+
mapped_entity = entity_instance.consolidate_and_map_data(filtered_entities, [], organization, {})
|
31
35
|
end
|
32
36
|
entity_instance.push_entities_to_external(external_client, mapped_entity[:connec_entities], organization)
|
33
37
|
|
@@ -176,4 +176,14 @@ module Maestrano::Connector::Rails::Concerns::ComplexEntity
|
|
176
176
|
def after_sync(connec_client, external_client, last_synchronization, organization, opts)
|
177
177
|
# Does nothing by default
|
178
178
|
end
|
179
|
+
|
180
|
+
# This method is called during the webhook workflow only. It should return the hash of arrays of filtered entities
|
181
|
+
# The aim is to have the same filtering as with the Connec! filters on API calls in the webhooks
|
182
|
+
# input : {
|
183
|
+
# external_entities_names[0]: [unmapped_external_entity1}, unmapped_external_entity2],
|
184
|
+
# external_entities_names[1]: [unmapped_external_entity3}, unmapped_external_entity4]
|
185
|
+
# }
|
186
|
+
def filter_connec_entities(entities, organization, opts={})
|
187
|
+
entities
|
188
|
+
end
|
179
189
|
end
|
@@ -267,7 +267,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
267
267
|
batch_entities[index][:idmap].update_attributes(connec_id: result['body'][self.class.normalize_connec_entity_name(connec_entity_name)]['id'], last_push_to_connec: Time.now, message: nil)
|
268
268
|
else
|
269
269
|
Maestrano::Connector::Rails::ConnectorLogger.log('error', organization, "Error while pushing to Connec!: #{result['body']}")
|
270
|
-
batch_entities[index][:idmap].update_attributes(message: result['body'])
|
270
|
+
batch_entities[index][:idmap].update_attributes(message: result['body'].truncate(255))
|
271
271
|
end
|
272
272
|
end
|
273
273
|
start += request_per_call
|
@@ -340,7 +340,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
340
340
|
rescue => e
|
341
341
|
# Store External error
|
342
342
|
Maestrano::Connector::Rails::ConnectorLogger.log('error', organization, "Error while pushing to #{Maestrano::Connector::Rails::External.external_name}: #{e}")
|
343
|
-
idmap.update_attributes(message: e.message)
|
343
|
+
idmap.update_attributes(message: e.message.truncate(255))
|
344
344
|
end
|
345
345
|
end
|
346
346
|
|
@@ -353,6 +353,12 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
353
353
|
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Sending update #{external_entity_name} (id=#{external_id}): #{mapped_connec_entity} to #{Maestrano::Connector::Rails::External.external_name}")
|
354
354
|
raise "Not implemented"
|
355
355
|
end
|
356
|
+
|
357
|
+
# This method is called during the webhook workflow only. It should return the array of filtered entities
|
358
|
+
# The aim is to have the same filtering as with the Connec! filters on API calls in the webhooks
|
359
|
+
def filter_connec_entities(entities, organization, opts={})
|
360
|
+
entities
|
361
|
+
end
|
356
362
|
# ----------------------------------------------
|
357
363
|
# General methods
|
358
364
|
# ----------------------------------------------
|
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: maestrano-connector-rails 0.4.
|
5
|
+
# stub: maestrano-connector-rails 0.4.4 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "maestrano-connector-rails"
|
9
|
-
s.version = "0.4.
|
9
|
+
s.version = "0.4.4"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Pierre Berard"]
|
14
|
-
s.date = "2016-05-
|
14
|
+
s.date = "2016-05-11"
|
15
15
|
s.description = "Maestrano is the next generation marketplace for SME applications. See https://maestrano.com for details."
|
16
16
|
s.email = "pierre.berard@maestrano.com"
|
17
17
|
s.executables = ["rails"]
|
data/realse_notes.md
CHANGED
@@ -71,6 +71,7 @@ describe Maestrano::ConnecController, type: :controller do
|
|
71
71
|
|
72
72
|
it 'process the data and push them' do
|
73
73
|
expect_any_instance_of(Entities::ContactAndLead).to receive(:before_sync)
|
74
|
+
expect_any_instance_of(Entities::ContactAndLead).to receive(:filter_connec_entities).and_return({"Lead"=>[entity]})
|
74
75
|
expect_any_instance_of(Entities::ContactAndLead).to receive(:consolidate_and_map_data).with({"Lead"=>[entity]}, {}, organization, {}).and_return({})
|
75
76
|
expect_any_instance_of(Entities::ContactAndLead).to receive(:push_entities_to_external)
|
76
77
|
expect_any_instance_of(Entities::ContactAndLead).to receive(:after_sync)
|
@@ -138,6 +139,7 @@ describe Maestrano::ConnecController, type: :controller do
|
|
138
139
|
|
139
140
|
it 'process the data and push them' do
|
140
141
|
expect_any_instance_of(Entities::Person).to receive(:before_sync)
|
142
|
+
expect_any_instance_of(Entities::Person).to receive(:filter_connec_entities).and_return([entity])
|
141
143
|
expect_any_instance_of(Entities::Person).to receive(:consolidate_and_map_data).with([entity], [], organization, {}).and_return({})
|
142
144
|
expect_any_instance_of(Entities::Person).to receive(:push_entities_to_external)
|
143
145
|
expect_any_instance_of(Entities::Person).to receive(:after_sync)
|
data/spec/dummy/db/test.sqlite3
CHANGED
Binary file
|
@@ -21,9 +21,9 @@ describe Maestrano::Connector::Rails::ComplexEntity do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
describe 'general methods' do
|
24
|
+
let(:organization) { create(:organization) }
|
24
25
|
|
25
26
|
describe 'map_to_external_with_idmap' do
|
26
|
-
let(:organization) { create(:organization) }
|
27
27
|
let(:id) { '322j-bbfg4' }
|
28
28
|
let(:entity) { {'id' => id, 'name' => 'John', 'updated_at' => 2.day.ago} }
|
29
29
|
let(:mapped_entity) { {'first_name' => 'John'} }
|
@@ -90,6 +90,9 @@ describe Maestrano::Connector::Rails::ComplexEntity do
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
+
describe 'filter_connec_entities' do
|
94
|
+
it { expect(subject.filter_connec_entities({'lead' => [{a: 2}]}, organization)).to eql({'lead' => [{a: 2}]}) }
|
95
|
+
end
|
93
96
|
end
|
94
97
|
|
95
98
|
describe 'methods with sub complex entities' do
|
data/spec/models/entity_spec.rb
CHANGED
@@ -420,7 +420,8 @@ describe Maestrano::Connector::Rails::Entity do
|
|
420
420
|
end
|
421
421
|
|
422
422
|
context 'with errors' do
|
423
|
-
let(:
|
423
|
+
let(:err_msg) { 'Not Found' }
|
424
|
+
let(:result400) { {status: 400, body: err_msg} }
|
424
425
|
before {
|
425
426
|
allow(client).to receive(:batch).and_return(ActionDispatch::Response.new(200, {}, {results: [result400, result400]}.to_json, {}))
|
426
427
|
}
|
@@ -430,6 +431,15 @@ describe Maestrano::Connector::Rails::Entity do
|
|
430
431
|
idmap2.reload
|
431
432
|
expect(idmap2.message).to eq result400[:body]
|
432
433
|
end
|
434
|
+
|
435
|
+
context 'with a long error message' do
|
436
|
+
let(:err_msg) { 'A very long sentence with a lot of error or more likely a badly designed API that return an html 404 page instead of a nice json answer an then the world is sad and the kitten are unhappy. So juste to be safe we are truncating the error message and I am running out of words to write I hope it is long enough' }
|
437
|
+
it 'truncates the error message' do
|
438
|
+
subject.push_entities_to_connec_to(client, entities_with_idmaps, '', organization)
|
439
|
+
idmap2.reload
|
440
|
+
expect(idmap2.message).to eq err_msg.truncate(255)
|
441
|
+
end
|
442
|
+
end
|
433
443
|
end
|
434
444
|
end
|
435
445
|
|
@@ -505,6 +515,10 @@ describe Maestrano::Connector::Rails::Entity do
|
|
505
515
|
end
|
506
516
|
end
|
507
517
|
end
|
518
|
+
|
519
|
+
describe 'filter_connec_entities' do
|
520
|
+
it { expect(subject.filter_connec_entities([{a: 2}], organization)).to eql([{a: 2}]) }
|
521
|
+
end
|
508
522
|
end
|
509
523
|
|
510
524
|
|
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: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre Berard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: maestrano-rails
|