maestrano-connector-rails 0.3.3 → 0.3.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/models/maestrano/connector/rails/concerns/complex_entity.rb +8 -0
- data/app/models/maestrano/connector/rails/concerns/entity.rb +33 -0
- data/lib/generators/connector/templates/entity.rb +5 -4
- data/maestrano-connector-rails.gemspec +4 -4
- data/spec/jobs/{all_syncrhonizations_job_spec.rb → all_synchronizations_job_spec.rb} +0 -0
- data/spec/jobs/{syncrhonization_job_spec.rb → synchronization_job_spec.rb} +33 -13
- data/spec/models/entity_spec.rb +45 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f9df8b9e24a3d6b1616c9bb26b59aa2a09d4de3
|
4
|
+
data.tar.gz: 4f3c29cd00285f933969bf2fe808bf88ba908004
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce9beb1f11f820f1804b2b35f77cc402ff02e1976d70e5dc4ff49b1bbf25786efb5b0090e16ad59c93d90dfa6d0e0dac80800cfa2375887775b35a9ecd5489c5
|
7
|
+
data.tar.gz: 401b8a68a25e374ba92b4b099c00e183f304af587c8952d7dca0bbb61be79586b9bb41a101afc02614dc4751986bec529d323df7df008fe8cb75487e4813afd8
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.4
|
@@ -161,4 +161,12 @@ module Maestrano::Connector::Rails::Concerns::ComplexEntity
|
|
161
161
|
end
|
162
162
|
end
|
163
163
|
end
|
164
|
+
|
165
|
+
def before_sync(connec_client, external_client, last_synchronization, organization, opts)
|
166
|
+
# Does nothing by default
|
167
|
+
end
|
168
|
+
|
169
|
+
def after_sync(connec_client, external_client, last_synchronization, organization, opts)
|
170
|
+
# Does nothing by default
|
171
|
+
end
|
164
172
|
end
|
@@ -115,6 +115,30 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
115
115
|
def references
|
116
116
|
[]
|
117
117
|
end
|
118
|
+
|
119
|
+
def can_read_connec?
|
120
|
+
true
|
121
|
+
end
|
122
|
+
|
123
|
+
def can_read_external?
|
124
|
+
true
|
125
|
+
end
|
126
|
+
|
127
|
+
def can_write_connec?
|
128
|
+
true
|
129
|
+
end
|
130
|
+
|
131
|
+
def can_write_external?
|
132
|
+
true
|
133
|
+
end
|
134
|
+
|
135
|
+
def can_update_connec?
|
136
|
+
true
|
137
|
+
end
|
138
|
+
|
139
|
+
def can_update_external?
|
140
|
+
true
|
141
|
+
end
|
118
142
|
end
|
119
143
|
|
120
144
|
# ----------------------------------------------
|
@@ -144,6 +168,8 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
144
168
|
# Connec! methods
|
145
169
|
# ----------------------------------------------
|
146
170
|
def get_connec_entities(client, last_synchronization, organization, opts={})
|
171
|
+
return [] unless self.class.can_read_connec?
|
172
|
+
|
147
173
|
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Fetching Connec! #{self.class.connec_entity_name}")
|
148
174
|
|
149
175
|
entities = []
|
@@ -194,6 +220,8 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
194
220
|
end
|
195
221
|
|
196
222
|
def push_entities_to_connec_to(connec_client, mapped_external_entities_with_idmaps, connec_entity_name, organization)
|
223
|
+
return unless self.class.can_write_connec?
|
224
|
+
|
197
225
|
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Sending #{Maestrano::Connector::Rails::External.external_name} #{self.class.external_entity_name.pluralize} to Connec! #{connec_entity_name.pluralize}")
|
198
226
|
mapped_external_entities_with_idmaps.each do |mapped_external_entity_with_idmap|
|
199
227
|
external_entity = mapped_external_entity_with_idmap[:entity]
|
@@ -204,6 +232,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
204
232
|
connec_entity = create_connec_entity(connec_client, external_entity, self.class.normalize_connec_entity_name(connec_entity_name), organization)
|
205
233
|
idmap.update_attributes(connec_id: connec_entity['id'], last_push_to_connec: Time.now, message: nil)
|
206
234
|
else
|
235
|
+
next unless self.class.can_update_connec?
|
207
236
|
connec_entity = update_connec_entity(connec_client, external_entity, idmap.connec_id, self.class.normalize_connec_entity_name(connec_entity_name), organization)
|
208
237
|
idmap.update_attributes(last_push_to_connec: Time.now, message: nil)
|
209
238
|
end
|
@@ -224,6 +253,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
224
253
|
end
|
225
254
|
|
226
255
|
def update_connec_entity(connec_client, mapped_external_entity, connec_id, connec_entity_name, organization)
|
256
|
+
|
227
257
|
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Sending update #{connec_entity_name}: #{mapped_external_entity} to Connec!")
|
228
258
|
response = connec_client.put("/#{connec_entity_name}/#{connec_id}", { "#{connec_entity_name}".to_sym => mapped_external_entity })
|
229
259
|
response = JSON.parse(response.body)
|
@@ -251,6 +281,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
251
281
|
# External methods
|
252
282
|
# ----------------------------------------------
|
253
283
|
def get_external_entities(client, last_synchronization, organization, opts={})
|
284
|
+
return [] unless self.class.can_read_external?
|
254
285
|
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Fetching #{Maestrano::Connector::Rails::External.external_name} #{self.class.external_entity_name.pluralize}")
|
255
286
|
raise "Not implemented"
|
256
287
|
end
|
@@ -260,6 +291,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
260
291
|
end
|
261
292
|
|
262
293
|
def push_entities_to_external_to(external_client, mapped_connec_entities_with_idmaps, external_entity_name, organization)
|
294
|
+
return unless self.class.can_write_external?
|
263
295
|
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Sending Connec! #{self.class.connec_entity_name.pluralize} to #{Maestrano::Connector::Rails::External.external_name} #{external_entity_name.pluralize}")
|
264
296
|
mapped_connec_entities_with_idmaps.each do |mapped_connec_entity_with_idmap|
|
265
297
|
push_entity_to_external(external_client, mapped_connec_entity_with_idmap, external_entity_name, organization)
|
@@ -275,6 +307,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
275
307
|
external_id = create_external_entity(external_client, connec_entity, external_entity_name, organization)
|
276
308
|
idmap.update_attributes(external_id: external_id, last_push_to_external: Time.now, message: nil)
|
277
309
|
else
|
310
|
+
return unless self.class.can_update_external?
|
278
311
|
update_external_entity(external_client, connec_entity, idmap.external_id, external_entity_name, organization)
|
279
312
|
idmap.update_attributes(last_push_to_external: Time.now, message: nil)
|
280
313
|
end
|
@@ -14,21 +14,22 @@ class Maestrano::Connector::Rails::Entity
|
|
14
14
|
|
15
15
|
# Return an array of entities from the external app
|
16
16
|
def get_external_entities(client, last_synchronization, organization, opts={})
|
17
|
-
|
17
|
+
return [] unless self.class.can_read_external?
|
18
|
+
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Fetching #{Maestrano::Connector::Rails::External.external_name} #{self.external_entity_name.pluralize}")
|
18
19
|
# TODO
|
19
20
|
# This method should return only entities that have been updated since the last_synchronization
|
20
21
|
# It should also implements an option to do a full synchronization when opts[:full_sync] == true or when there is no last_synchronization
|
21
|
-
# Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Received data: Source=#{
|
22
|
+
# Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Received data: Source=#{Maestrano::Connector::Rails::External.external_name}, Entity=#{self.external_entity_name}, Response=#{entities}")
|
22
23
|
end
|
23
24
|
|
24
25
|
def create_external_entity(client, mapped_connec_entity, external_entity_name, organization)
|
25
|
-
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Sending create #{external_entity_name}: #{mapped_connec_entity} to #{
|
26
|
+
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Sending create #{external_entity_name}: #{mapped_connec_entity} to #{Maestrano::Connector::Rails::External.external_name}")
|
26
27
|
# TODO
|
27
28
|
# This method creates the entity in the external app and returns the external id
|
28
29
|
end
|
29
30
|
|
30
31
|
def update_external_entity(client, mapped_connec_entity, external_id, external_entity_name, organization)
|
31
|
-
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Sending update #{external_entity_name} (id=#{external_id}): #{mapped_connec_entity} to #{
|
32
|
+
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}")
|
32
33
|
# TODO
|
33
34
|
# This method updates the entity with the given id in the external app
|
34
35
|
end
|
@@ -2,11 +2,11 @@
|
|
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.3.
|
5
|
+
# stub: maestrano-connector-rails 0.3.4 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "maestrano-connector-rails"
|
9
|
-
s.version = "0.3.
|
9
|
+
s.version = "0.3.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"]
|
@@ -153,9 +153,9 @@ Gem::Specification.new do |s|
|
|
153
153
|
"spec/dummy/public/500.html",
|
154
154
|
"spec/dummy/public/favicon.ico",
|
155
155
|
"spec/factories.rb",
|
156
|
-
"spec/jobs/
|
156
|
+
"spec/jobs/all_synchronizations_job_spec.rb",
|
157
157
|
"spec/jobs/push_to_connec_job_spec.rb",
|
158
|
-
"spec/jobs/
|
158
|
+
"spec/jobs/synchronization_job_spec.rb",
|
159
159
|
"spec/models/complex_entity_spec.rb",
|
160
160
|
"spec/models/connector_logger_spec.rb",
|
161
161
|
"spec/models/entity_spec.rb",
|
File without changes
|
@@ -50,22 +50,42 @@ describe Maestrano::Connector::Rails::SynchronizationJob do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
describe 'sync_entity' do
|
53
|
-
|
54
|
-
|
53
|
+
subject { Maestrano::Connector::Rails::SynchronizationJob.new }
|
54
|
+
|
55
|
+
context 'non complex entity' do
|
56
|
+
before {
|
57
|
+
class Entities::Person < Maestrano::Connector::Rails::Entity
|
58
|
+
end
|
59
|
+
}
|
60
|
+
|
61
|
+
it 'calls the seven methods' do
|
62
|
+
expect_any_instance_of(Entities::Person).to receive(:before_sync)
|
63
|
+
expect_any_instance_of(Entities::Person).to receive(:get_connec_entities)
|
64
|
+
expect_any_instance_of(Entities::Person).to receive(:get_external_entities)
|
65
|
+
expect_any_instance_of(Entities::Person).to receive(:consolidate_and_map_data).and_return({})
|
66
|
+
expect_any_instance_of(Entities::Person).to receive(:push_entities_to_external)
|
67
|
+
expect_any_instance_of(Entities::Person).to receive(:push_entities_to_connec)
|
68
|
+
expect_any_instance_of(Entities::Person).to receive(:after_sync)
|
69
|
+
subject.sync_entity('person', organization, nil, nil, nil, {})
|
55
70
|
end
|
56
|
-
|
71
|
+
end
|
57
72
|
|
58
|
-
|
73
|
+
context 'complex entity' do
|
74
|
+
before {
|
75
|
+
class Entities::SomeStuff < Maestrano::Connector::Rails::ComplexEntity
|
76
|
+
end
|
77
|
+
}
|
59
78
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
79
|
+
it 'calls the seven methods' do
|
80
|
+
expect_any_instance_of(Entities::SomeStuff).to receive(:before_sync)
|
81
|
+
expect_any_instance_of(Entities::SomeStuff).to receive(:get_connec_entities)
|
82
|
+
expect_any_instance_of(Entities::SomeStuff).to receive(:get_external_entities)
|
83
|
+
expect_any_instance_of(Entities::SomeStuff).to receive(:consolidate_and_map_data).and_return({})
|
84
|
+
expect_any_instance_of(Entities::SomeStuff).to receive(:push_entities_to_external)
|
85
|
+
expect_any_instance_of(Entities::SomeStuff).to receive(:push_entities_to_connec)
|
86
|
+
expect_any_instance_of(Entities::SomeStuff).to receive(:after_sync)
|
87
|
+
subject.sync_entity('some stuff', organization, nil, nil, nil, {})
|
88
|
+
end
|
69
89
|
end
|
70
90
|
end
|
71
91
|
end
|
data/spec/models/entity_spec.rb
CHANGED
@@ -186,6 +186,14 @@ describe Maestrano::Connector::Rails::Entity do
|
|
186
186
|
}
|
187
187
|
|
188
188
|
describe 'get_connec_entities' do
|
189
|
+
describe 'when write only' do
|
190
|
+
before {
|
191
|
+
allow(subject.class).to receive(:can_read_connec?).and_return(false)
|
192
|
+
allow(client).to receive(:get).and_return(ActionDispatch::Response.new(200, {}, {people: [{first_name: 'Lea'}]}.to_json, {}))
|
193
|
+
}
|
194
|
+
|
195
|
+
it { expect(subject.get_connec_entities(client, nil, organization)).to eql([]) }
|
196
|
+
end
|
189
197
|
|
190
198
|
describe 'with response' do
|
191
199
|
context 'for a singleton resource' do
|
@@ -276,6 +284,29 @@ describe Maestrano::Connector::Rails::Entity do
|
|
276
284
|
let(:entities_with_idmaps) { [entity_with_idmap1, entity_with_idmap2] }
|
277
285
|
let(:id) { 'ab12-34re' }
|
278
286
|
|
287
|
+
context 'when read only' do
|
288
|
+
before {
|
289
|
+
allow(subject.class).to receive(:can_write_connec?).and_return(false)
|
290
|
+
}
|
291
|
+
|
292
|
+
it 'does nothing' do
|
293
|
+
expect(subject).to_not receive(:create_connec_entity)
|
294
|
+
expect(subject).to_not receive(:update_connec_entity)
|
295
|
+
subject.push_entities_to_connec_to(client, entities_with_idmaps, connec_name, organization)
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
context 'when create_only' do
|
300
|
+
before {
|
301
|
+
allow(subject.class).to receive(:can_update_connec?).and_return(false)
|
302
|
+
}
|
303
|
+
it 'calls create only' do
|
304
|
+
expect(subject).to receive(:create_connec_entity).with(client, entity2, connec_name.downcase.pluralize, organization)
|
305
|
+
expect(subject).to_not receive(:update_connec_entity)
|
306
|
+
subject.push_entities_to_connec_to(client, entities_with_idmaps, connec_name, organization)
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
279
310
|
it 'create or update the entities and idmaps according to their idmap state' do
|
280
311
|
allow(subject).to receive(:create_connec_entity).and_return({'id' => id})
|
281
312
|
allow(subject).to receive(:external_entity_name).and_return(external_name)
|
@@ -421,6 +452,14 @@ describe Maestrano::Connector::Rails::Entity do
|
|
421
452
|
end
|
422
453
|
|
423
454
|
describe 'push_entities_to_external_to' do
|
455
|
+
context 'when read only' do
|
456
|
+
it 'does nothing' do
|
457
|
+
allow(subject.class).to receive(:can_write_external?).and_return(false)
|
458
|
+
expect(subject).to_not receive(:push_entity_to_external)
|
459
|
+
subject.push_entities_to_external_to(nil, entities_with_idmaps, external_name, organization)
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
424
463
|
it 'calls push_entity_to_external for each entity' do
|
425
464
|
allow(subject.class).to receive(:connec_entity_name).and_return(connec_name)
|
426
465
|
expect(subject).to receive(:push_entity_to_external).twice
|
@@ -430,6 +469,12 @@ describe Maestrano::Connector::Rails::Entity do
|
|
430
469
|
|
431
470
|
describe 'push_entity_to_external' do
|
432
471
|
context 'when the entity idmap has an external id' do
|
472
|
+
it 'does not calls update if create_only' do
|
473
|
+
allow(subject.class).to receive(:can_update_external?).and_return(false)
|
474
|
+
expect(subject).to_not receive(:update_external_entity)
|
475
|
+
subject.push_entity_to_external(nil, entity_with_idmap1, external_name, organization)
|
476
|
+
end
|
477
|
+
|
433
478
|
it 'calls update_external_entity' do
|
434
479
|
expect(subject).to receive(:update_external_entity).with(nil, entity1, idmap1.external_id, external_name, organization)
|
435
480
|
subject.push_entity_to_external(nil, entity_with_idmap1, external_name, organization)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maestrano-connector-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre Berard
|
@@ -363,9 +363,9 @@ files:
|
|
363
363
|
- spec/dummy/public/500.html
|
364
364
|
- spec/dummy/public/favicon.ico
|
365
365
|
- spec/factories.rb
|
366
|
-
- spec/jobs/
|
366
|
+
- spec/jobs/all_synchronizations_job_spec.rb
|
367
367
|
- spec/jobs/push_to_connec_job_spec.rb
|
368
|
-
- spec/jobs/
|
368
|
+
- spec/jobs/synchronization_job_spec.rb
|
369
369
|
- spec/models/complex_entity_spec.rb
|
370
370
|
- spec/models/connector_logger_spec.rb
|
371
371
|
- spec/models/entity_spec.rb
|