maestrano-connector-rails 1.2.3 → 1.3.0

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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +7 -20
  3. data/VERSION +1 -1
  4. data/app/controllers/maestrano/synchronizations_controller.rb +3 -3
  5. data/app/models/maestrano/connector/rails/concerns/complex_entity.rb +50 -22
  6. data/app/models/maestrano/connector/rails/concerns/connec_helper.rb +157 -19
  7. data/app/models/maestrano/connector/rails/concerns/entity.rb +63 -42
  8. data/app/models/maestrano/connector/rails/concerns/external.rb +4 -0
  9. data/app/models/maestrano/connector/rails/concerns/sub_entity_base.rb +18 -5
  10. data/app/models/maestrano/connector/rails/organization.rb +1 -1
  11. data/lib/generators/connector/templates/complex_entity_example/contact_and_lead.rb +5 -5
  12. data/lib/generators/connector/templates/entity.rb +4 -5
  13. data/lib/generators/connector/templates/external.rb +6 -0
  14. data/lib/generators/connector/templates/home_index.haml +7 -4
  15. data/maestrano-connector-rails.gemspec +7 -4
  16. data/release_notes.md +5 -0
  17. data/spec/factories.rb +2 -2
  18. data/spec/integration/complex_id_references_spec.rb +248 -0
  19. data/spec/integration/complex_naming_spec.rb +191 -0
  20. data/spec/integration/{integration_complex_spec.rb → complex_spec.rb} +9 -9
  21. data/spec/integration/connec_to_external_spec.rb +7 -3
  22. data/spec/integration/id_references_spec.rb +581 -0
  23. data/spec/integration/singleton_spec.rb +3 -3
  24. data/spec/models/complex_entity_spec.rb +42 -27
  25. data/spec/models/connec_helper_spec.rb +399 -31
  26. data/spec/models/entity_spec.rb +76 -21
  27. data/spec/models/external_spec.rb +4 -0
  28. data/spec/models/sub_entity_base_spec.rb +11 -4
  29. metadata +6 -3
@@ -15,7 +15,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
15
15
  # organization_and_id can be either:
16
16
  # * {connec_id: 'id', organization_id: 'id'}
17
17
  # * {external_id: 'id', organization_id: 'id'}
18
- # Needs to include either connec_entity or external_entity for complex entities
18
+ # Needs to include either connec_entity or external_entity for sub entities
19
19
  def find_or_create_idmap(organization_and_id)
20
20
  Maestrano::Connector::Rails::IdMap.find_or_create_by(names_hash.merge(organization_and_id))
21
21
  end
@@ -36,11 +36,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
36
36
  end
37
37
 
38
38
  def normalize_connec_entity_name(name)
39
- if singleton?
40
- name.parameterize('_')
41
- else
42
- name.parameterize('_').pluralize
43
- end
39
+ singleton? ? name.parameterize('_') : name.parameterize('_').pluralize
44
40
  end
45
41
 
46
42
  # ----------------------------------------------
@@ -116,6 +112,10 @@ module Maestrano::Connector::Rails::Concerns::Entity
116
112
  can_write_connec?
117
113
  end
118
114
 
115
+ def can_update_connec?
116
+ true
117
+ end
118
+
119
119
  def can_write_connec?
120
120
  true
121
121
  end
@@ -147,9 +147,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
147
147
  # ----------------------------------------------
148
148
  # Map a Connec! entity to the external model
149
149
  def map_to_external(entity)
150
- connec_id = entity[:__connec_id]
151
- mapped_entity = self.class.mapper_class.normalize(entity)
152
- (connec_id ? mapped_entity.merge(__connec_id: connec_id) : mapped_entity).with_indifferent_access
150
+ self.class.mapper_class.normalize(entity).with_indifferent_access
153
151
  end
154
152
 
155
153
  # Map an external entity to Connec! model
@@ -223,6 +221,10 @@ module Maestrano::Connector::Rails::Concerns::Entity
223
221
 
224
222
  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}")
225
223
 
224
+ unless self.class.can_update_connec?
225
+ mapped_external_entities_with_idmaps.select! { |mapped_external_entity_with_idmap| !mapped_external_entity_with_idmap[:idmap].connec_id }
226
+ end
227
+
226
228
  proc = ->(mapped_external_entity_with_idmap) { batch_op('post', mapped_external_entity_with_idmap[:entity], nil, self.class.normalize_connec_entity_name(connec_entity_name)) }
227
229
  batch_calls(mapped_external_entities_with_idmaps, proc, connec_entity_name)
228
230
  end
@@ -241,13 +243,13 @@ module Maestrano::Connector::Rails::Concerns::Entity
241
243
  # ----------------------------------------------
242
244
  # External methods
243
245
  # ----------------------------------------------
244
- def get_external_entities_wrapper(last_synchronization_date = nil)
246
+ def get_external_entities_wrapper(last_synchronization_date = nil, entity_name = self.class.external_entity_name)
245
247
  return [] if @opts[:__skip_external] || !self.class.can_read_external?
246
- get_external_entities(last_synchronization_date)
248
+ get_external_entities(entity_name, last_synchronization_date)
247
249
  end
248
250
 
249
- def get_external_entities(last_synchronization_date = nil)
250
- Maestrano::Connector::Rails::ConnectorLogger.log('info', @organization, "Fetching #{Maestrano::Connector::Rails::External.external_name} #{self.class.external_entity_name.pluralize}")
251
+ def get_external_entities(external_entity_name, last_synchronization_date = nil)
252
+ Maestrano::Connector::Rails::ConnectorLogger.log('info', @organization, "Fetching #{Maestrano::Connector::Rails::External.external_name} #{external_entity_name.pluralize}")
251
253
  raise 'Not implemented'
252
254
  end
253
255
 
@@ -259,42 +261,48 @@ module Maestrano::Connector::Rails::Concerns::Entity
259
261
  return unless self.class.can_write_external?
260
262
 
261
263
  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}")
262
- ids_to_send_to_connec = mapped_connec_entities_with_idmaps.map{ |mapped_connec_entity_with_idmap|
263
- idmap = push_entity_to_external(mapped_connec_entity_with_idmap, external_entity_name)
264
- idmap ? {idmap: idmap} : nil
264
+ entities_to_send_to_connec = mapped_connec_entities_with_idmaps.map{ |mapped_connec_entity_with_idmap|
265
+ push_entity_to_external(mapped_connec_entity_with_idmap, external_entity_name)
265
266
  }.compact
266
267
 
267
- return if ids_to_send_to_connec.empty?
268
+ return if entities_to_send_to_connec.empty?
268
269
 
269
270
  # Send the external ids to connec if it was a creation
270
- proc = ->(id) { batch_op('put', {id: [Maestrano::Connector::Rails::ConnecHelper.id_hash(id[:idmap].external_id, @organization)]}, id[:idmap].connec_id, self.class.normalize_connec_entity_name(self.class.connec_entity_name)) }
271
- batch_calls(ids_to_send_to_connec, proc, self.class.connec_entity_name, true)
271
+ # or if there are some sub entities ids to send (completed_hash)
272
+ proc = lambda do |entity|
273
+ id = {id: [Maestrano::Connector::Rails::ConnecHelper.id_hash(entity[:idmap].external_id, @organization)]}
274
+ body = entity[:completed_hash] ? entity[:completed_hash].merge(id) : id
275
+ batch_op('put', body, entity[:idmap].connec_id, self.class.normalized_connec_entity_name)
276
+ end
277
+ batch_calls(entities_to_send_to_connec, proc, self.class.connec_entity_name, true)
272
278
  end
273
279
 
274
280
  def push_entity_to_external(mapped_connec_entity_with_idmap, external_entity_name)
275
281
  idmap = mapped_connec_entity_with_idmap[:idmap]
276
282
  mapped_connec_entity = mapped_connec_entity_with_idmap[:entity]
283
+ id_refs_only_connec_entity = mapped_connec_entity_with_idmap[:id_refs_only_connec_entity]
277
284
 
278
285
  begin
279
286
  # Create and return id to send to connec!
280
287
  if idmap.external_id.blank?
281
- external_id = create_external_entity(mapped_connec_entity, external_entity_name)
282
- idmap.update(external_id: external_id, last_push_to_external: Time.now, message: nil)
283
- return idmap
288
+ external_hash = create_external_entity(mapped_connec_entity, external_entity_name)
289
+ idmap.update(external_id: self.class.id_from_external_entity_hash(external_hash), last_push_to_external: Time.now, message: nil)
284
290
 
291
+ return {idmap: idmap, completed_hash: map_and_complete_hash_with_connec_ids(external_hash, external_entity_name, id_refs_only_connec_entity)}
285
292
  # Update
286
293
  else
287
- return unless self.class.can_update_external?
288
- update_external_entity(mapped_connec_entity, idmap.external_id, external_entity_name)
294
+ return nil unless self.class.can_update_external?
295
+ external_hash = update_external_entity(mapped_connec_entity, idmap.external_id, external_entity_name)
289
296
 
290
- # Return the id to send it to connec! if the first push of a singleton
291
- if self.class.singleton? && idmap.last_push_to_external.nil?
292
- idmap.update(last_push_to_external: Time.now, message: nil)
293
- return idmap
294
- else
297
+ completed_hash = map_and_complete_hash_with_connec_ids(external_hash, external_entity_name, id_refs_only_connec_entity)
298
+
299
+ # Return the idmap to send it to connec! only if it's the first push of a singleton
300
+ # or if there is a completed hash to send
301
+ if (self.class.singleton? && idmap.last_push_to_external.nil?) || completed_hash
295
302
  idmap.update(last_push_to_external: Time.now, message: nil)
303
+ return {idmap: idmap, completed_hash: completed_hash}
296
304
  end
297
-
305
+ idmap.update(last_push_to_external: Time.now, message: nil)
298
306
  end
299
307
  rescue => e
300
308
  # Store External error
@@ -314,6 +322,16 @@ module Maestrano::Connector::Rails::Concerns::Entity
314
322
  raise 'Not implemented'
315
323
  end
316
324
 
325
+ # Maps the entity received from external after a creation or an update and complete the received ids with the connec ones
326
+ def map_and_complete_hash_with_connec_ids(external_hash, external_entity_name, connec_hash)
327
+ return nil if connec_hash.empty?
328
+
329
+ mapped_external_hash = map_to_connec(external_hash)
330
+ id_references = Maestrano::Connector::Rails::ConnecHelper.format_references(self.class.references)
331
+
332
+ Maestrano::Connector::Rails::ConnecHelper.merge_id_hashes(connec_hash, mapped_external_hash, id_references[:id_references])
333
+ end
334
+
317
335
  # ----------------------------------------------
318
336
  # General methods
319
337
  # ----------------------------------------------
@@ -336,13 +354,15 @@ module Maestrano::Connector::Rails::Concerns::Entity
336
354
  # Entity has been created before date filtering limit
337
355
  next nil if before_date_filtering_limit?(entity, false) && !@opts[:full_sync]
338
356
 
339
- entity = Maestrano::Connector::Rails::ConnecHelper.unfold_references(entity, references, @organization)
357
+ unfold_hash = Maestrano::Connector::Rails::ConnecHelper.unfold_references(entity, references, @organization)
358
+ entity = unfold_hash[:entity]
340
359
  next nil unless entity
341
- connec_id = entity.delete(:__connec_id)
360
+ connec_id = unfold_hash[:connec_id]
361
+ id_refs_only_connec_entity = unfold_hash[:id_refs_only_connec_entity]
342
362
 
343
363
  if entity['id'].blank?
344
364
  idmap = self.class.find_or_create_idmap(organization_id: @organization.id, name: self.class.object_name_from_connec_entity_hash(entity), external_entity: external_entity_name.downcase, connec_id: connec_id)
345
- next map_connec_entity_with_idmap(entity, external_entity_name, idmap)
365
+ next map_connec_entity_with_idmap(entity, external_entity_name, idmap, id_refs_only_connec_entity)
346
366
  end
347
367
 
348
368
  idmap = self.class.find_or_create_idmap(external_id: entity['id'], organization_id: @organization.id, external_entity: external_entity_name.downcase, connec_id: connec_id)
@@ -350,7 +370,7 @@ module Maestrano::Connector::Rails::Concerns::Entity
350
370
 
351
371
  next nil if idmap.external_inactive || !idmap.to_external || (!@opts[:full_sync] && not_modified_since_last_push_to_external?(idmap, entity))
352
372
  # Check for conflict with entities from external
353
- solve_conflict(entity, external_entities, external_entity_name, idmap)
373
+ solve_conflict(entity, external_entities, external_entity_name, idmap, id_refs_only_connec_entity)
354
374
  }.compact
355
375
  end
356
376
 
@@ -397,10 +417,11 @@ module Maestrano::Connector::Rails::Concerns::Entity
397
417
  idmap.update(external_id: self.class.id_from_external_entity_hash(external_entities.first), name: self.class.object_name_from_external_entity_hash(external_entities.first))
398
418
  return {connec_entities: [], external_entities: [{entity: map_to_connec(external_entities.first), idmap: idmap}]}
399
419
  else
400
- entity = Maestrano::Connector::Rails::ConnecHelper.unfold_references(connec_entities.first, self.class.references, @organization)
401
- idmap.update(name: self.class.object_name_from_connec_entity_hash(entity), connec_id: entity.delete(:__connec_id))
420
+ unfold_hash = Maestrano::Connector::Rails::ConnecHelper.unfold_references(connec_entities.first, self.class.references, @organization)
421
+ entity = unfold_hash[:entity]
422
+ idmap.update(name: self.class.object_name_from_connec_entity_hash(entity), connec_id: unfold_hash[:connec_id])
402
423
  idmap.update(external_id: self.class.id_from_external_entity_hash(external_entities.first)) unless external_entities.empty?
403
- return {connec_entities: [{entity: map_to_external(entity), idmap: idmap}], external_entities: []}
424
+ return {connec_entities: [{entity: map_to_external(entity), idmap: idmap, id_refs_only_connec_entity: {}}], external_entities: []}
404
425
  end
405
426
  end
406
427
 
@@ -466,10 +487,10 @@ module Maestrano::Connector::Rails::Concerns::Entity
466
487
  connec_entity['updated_at'] > self.class.last_update_date_from_external_entity_hash(external_entity)
467
488
  end
468
489
 
469
- def solve_conflict(connec_entity, external_entities, external_entity_name, idmap)
490
+ def solve_conflict(connec_entity, external_entities, external_entity_name, idmap, id_refs_only_connec_entity)
470
491
  external_entity = external_entities.find { |entity| connec_entity['id'] == self.class.id_from_external_entity_hash(entity) }
471
492
  # No conflict
472
- return map_connec_entity_with_idmap(connec_entity, external_entity_name, idmap) unless external_entity
493
+ return map_connec_entity_with_idmap(connec_entity, external_entity_name, idmap, id_refs_only_connec_entity) unless external_entity
473
494
 
474
495
  # Conflict
475
496
  # We keep the most recently updated entity
@@ -478,15 +499,15 @@ module Maestrano::Connector::Rails::Concerns::Entity
478
499
  if keep_connec
479
500
  Maestrano::Connector::Rails::ConnectorLogger.log('info', @organization, "Conflict between #{Maestrano::Connector::Rails::External.external_name} #{external_entity_name} #{external_entity} and Connec! #{self.class.connec_entity_name} #{connec_entity}. Entity from Connec! kept")
480
501
  external_entities.delete(external_entity)
481
- map_connec_entity_with_idmap(connec_entity, external_entity_name, idmap)
502
+ map_connec_entity_with_idmap(connec_entity, external_entity_name, idmap, id_refs_only_connec_entity)
482
503
  else
483
504
  Maestrano::Connector::Rails::ConnectorLogger.log('info', @organization, "Conflict between #{Maestrano::Connector::Rails::External.external_name} #{external_entity_name} #{external_entity} and Connec! #{self.class.connec_entity_name} #{connec_entity}. Entity from external kept")
484
505
  nil
485
506
  end
486
507
  end
487
508
 
488
- def map_connec_entity_with_idmap(connec_entity, external_entity_name, idmap)
489
- {entity: map_to_external(connec_entity), idmap: idmap}
509
+ def map_connec_entity_with_idmap(connec_entity, external_entity_name, idmap, id_refs_only_connec_entity)
510
+ {entity: map_to_external(connec_entity), idmap: idmap, id_refs_only_connec_entity: id_refs_only_connec_entity}
490
511
  end
491
512
 
492
513
  def map_external_entity_with_idmap(external_entity, connec_entity_name, idmap)
@@ -10,6 +10,10 @@ module Maestrano::Connector::Rails::Concerns::External
10
10
  raise 'Not implemented'
11
11
  end
12
12
 
13
+ def create_account_link(organization = nil)
14
+ raise 'Not implemented'
15
+ end
16
+
13
17
  # Return an array of all the entities that the connector can synchronize
14
18
  # If you add new entities, you need to generate
15
19
  # a migration to add them to existing organizations
@@ -58,17 +58,30 @@ module Maestrano::Connector::Rails::Concerns::SubEntityBase
58
58
 
59
59
  folded_entity
60
60
  else
61
- connec_id = entity[:__connec_id]
62
- mapped_entity = mapper.normalize(entity)
63
- (connec_id ? mapped_entity.merge(__connec_id: connec_id) : mapped_entity).with_indifferent_access
61
+ mapper.normalize(entity).with_indifferent_access
64
62
  end
65
63
  end
66
64
 
67
- def map_connec_entity_with_idmap(connec_entity, external_entity_name, idmap)
68
- {entity: map_to(external_entity_name, connec_entity), idmap: idmap}
65
+ def map_connec_entity_with_idmap(connec_entity, external_entity_name, idmap, id_refs_only_connec_entity)
66
+ {entity: map_to(external_entity_name, connec_entity), idmap: idmap, id_refs_only_connec_entity: id_refs_only_connec_entity}
69
67
  end
70
68
 
71
69
  def map_external_entity_with_idmap(external_entity, connec_entity_name, idmap)
72
70
  {entity: map_to(connec_entity_name, external_entity), idmap: idmap}
73
71
  end
72
+
73
+ # Maps the entity received from external after a creation or an update and complete the received ids with the connec ones
74
+ def map_and_complete_hash_with_connec_ids(external_hash, external_entity_name, connec_hash)
75
+ return nil if connec_hash.empty?
76
+
77
+ # As we don't know to which complex entity this sub entity is related to, we have to do a full scan of the entities to find the right one
78
+ # Because we need the external_entities_names
79
+ external_entity_instance = Maestrano::Connector::Rails::ComplexEntity.find_complex_entity_and_instantiate_external_sub_entity_instance(external_entity_name, @organization, @connec_client, @external_client, @opts)
80
+ return nil unless external_entity_instance
81
+
82
+ mapped_external_hash = external_entity_instance.map_to(self.class.connec_entity_name, external_hash)
83
+ id_references = Maestrano::Connector::Rails::ConnecHelper.format_references(self.class.references[external_entity_name])
84
+
85
+ Maestrano::Connector::Rails::ConnecHelper.merge_id_hashes(connec_hash, mapped_external_hash, id_references[:id_references])
86
+ end
74
87
  end
@@ -49,7 +49,7 @@ module Maestrano::Connector::Rails
49
49
  end
50
50
 
51
51
  def member?(user)
52
- user_organization_rels.where(user_id: user.id).count > 0
52
+ user_organization_rels.where(user_id: user.id).count.positive?
53
53
  end
54
54
 
55
55
  def remove_member(user)
@@ -1,6 +1,6 @@
1
1
  # TODO
2
2
  # This file is provided as an example and should be removed
3
- # See README for explanation
3
+ # See documentation (https://maestrano.atlassian.net/wiki/display/DEV/Mapping+and+synchronization) for explanation
4
4
  # class Entities::ContactAndLead < Maestrano::Connector::Rails::ComplexEntity
5
5
  # def self.connec_entities_names
6
6
  # %w(person)
@@ -25,16 +25,16 @@
25
25
  # # }
26
26
  # def connec_model_to_external_model(connec_hash_of_entities)
27
27
  # people = connec_hash_of_entities['person']
28
- # modeled_connec_entities = {'person' => { 'lead' => [], 'contact' => [] }}
28
+ # modelled_connec_entities = {'person' => { 'lead' => [], 'contact' => [] }}
29
29
 
30
30
  # people.each do |person|
31
31
  # if person['is_lead']
32
- # modeled_connec_entities['person']['lead'] << person
32
+ # modelled_connec_entities['person']['lead'] << person
33
33
  # else
34
- # modeled_connec_entities['person']['contact'] << person
34
+ # modelled_connec_entities['person']['contact'] << person
35
35
  # end
36
36
  # end
37
- # return modeled_connec_entities
37
+ # return modelled_connec_entities
38
38
  # end
39
39
 
40
40
  # # input : {
@@ -8,7 +8,7 @@ class Maestrano::Connector::Rails::Entity < Maestrano::Connector::Rails::EntityB
8
8
  # * @opts
9
9
 
10
10
  # Return an array of entities from the external app
11
- def get_external_entities(last_synchronization_date=nil)
11
+ def get_external_entities(external_entity_name, last_synchronization_date = nil)
12
12
  Maestrano::Connector::Rails::ConnectorLogger.log('info', @organization, "Fetching #{Maestrano::Connector::Rails::External.external_name} #{self.class.external_entity_name.pluralize}")
13
13
  # TODO
14
14
  # This method should return only entities that have been updated since the last_synchronization_date
@@ -20,13 +20,13 @@ class Maestrano::Connector::Rails::Entity < Maestrano::Connector::Rails::EntityB
20
20
  def create_external_entity(mapped_connec_entity, external_entity_name)
21
21
  Maestrano::Connector::Rails::ConnectorLogger.log('info', @organization, "Sending create #{external_entity_name}: #{mapped_connec_entity} to #{Maestrano::Connector::Rails::External.external_name}")
22
22
  # TODO
23
- # This method creates the entity in the external app and returns the external id
23
+ # This method creates the entity in the external app and returns the created external entity
24
24
  end
25
25
 
26
26
  def update_external_entity(mapped_connec_entity, external_id, external_entity_name)
27
27
  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}")
28
28
  # TODO
29
- # This method updates the entity with the given id in the external app
29
+ # This method updates the entity with the given id in the external app and returns the created external entity
30
30
  end
31
31
 
32
32
  def self.id_from_external_entity_hash(entity)
@@ -52,5 +52,4 @@ class Maestrano::Connector::Rails::Entity < Maestrano::Connector::Rails::EntityB
52
52
  # This method return true is entity is inactive in the external application
53
53
  # e.g entity['status'] == 'INACTIVE'
54
54
  end
55
-
56
- end
55
+ end
@@ -17,6 +17,12 @@ class Maestrano::Connector::Rails::External
17
17
  # client_secret: ENV['']
18
18
  end
19
19
 
20
+ def self.create_account_link(organization = nil)
21
+ # TODO
22
+ # Returns a link to the sign up page of the external application
23
+ '#'
24
+ end
25
+
20
26
  # Return an array of all the entities that the connector can synchronize
21
27
  # If you add new entities, you need to generate
22
28
  # a migration to add them to existing organizations
@@ -32,7 +32,10 @@
32
32
  - if @organization.oauth_uid
33
33
  = link_to "Disconnect", signout_omniauth_path(organization_id: @organization.id), class: "btn btn-warning btn-lg #{is_admin ? '' : 'disabled'}"
34
34
  - else
35
- = link_to "Link to ApplicationName", "/auth/ApplicationName/request?org_uid=#{@organization.uid}", class: "btn btn-warning btn-lg" if is_admin
35
+ - if is_admin
36
+ = link_to "Link to ApplicationName", "/auth/ApplicationName/request?org_uid=#{@organization.uid}", class: 'btn btn-warning btn-lg'
37
+ %br
38
+ %small If you don’t have an account #{link_to 'create yours here', Maestrano::Connector::Rails::External.create_account_link(current_organization || nil)}
36
39
 
37
40
  .spacer1
38
41
 
@@ -53,10 +56,10 @@
53
56
  %input{type: "checkbox", id: "#{k}", name: "#{k}", checked: v}
54
57
  .col-md-6{style: 'padding-top: 5px;'}
55
58
  %label{:for => "#{k}"} #{k.to_s.humanize.pluralize}
56
- -if is_admin
59
+ - if is_admin
57
60
  .col-md-5.text-right
58
61
  - if v && @organization.oauth_uid && @organization.sync_enabled
59
- = link_to "Force a synchronization for #{k.to_s.humanize.pluralize} only", home_synchronize_path(opts: {only_entities: [k.to_s]}), method: :post, class: "btn btn-warning btn-sm"
62
+ = link_to "Force a synchronization for #{k.to_s.humanize.pluralize} only", home_synchronize_path(opts: {only_entities: [k.to_s]}), method: :post, class: 'btn btn-warning btn-sm'
60
63
  .spacer1
61
64
  .row
62
65
  .col-md-4
@@ -82,5 +85,5 @@
82
85
  - else
83
86
  .row
84
87
  .col-md-4.col-md-offset-4.center
85
- = link_to "Link your Maestrano account", Maestrano::Connector::Rails::Engine.routes.url_helpers.default_maestrano_auth_saml_index_path(tenant: :default), class: 'btn btn-warning'
88
+ = link_to 'Link your Maestrano account', Maestrano::Connector::Rails::Engine.routes.url_helpers.default_maestrano_auth_saml_index_path(tenant: :default), class: 'btn btn-warning'
86
89
 
@@ -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 1.2.3 ruby lib
5
+ # stub: maestrano-connector-rails 1.3.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "maestrano-connector-rails"
9
- s.version = "1.2.3"
9
+ s.version = "1.3.0"
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-07-12"
14
+ s.date = "2016-07-26"
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"]
@@ -172,9 +172,12 @@ Gem::Specification.new do |s|
172
172
  "spec/dummy/public/favicon.ico",
173
173
  "spec/dummy/tmp/cache/.keep",
174
174
  "spec/factories.rb",
175
+ "spec/integration/complex_id_references_spec.rb",
176
+ "spec/integration/complex_naming_spec.rb",
177
+ "spec/integration/complex_spec.rb",
175
178
  "spec/integration/connec_to_external_spec.rb",
176
179
  "spec/integration/external_to_connec_spec.rb",
177
- "spec/integration/integration_complex_spec.rb",
180
+ "spec/integration/id_references_spec.rb",
178
181
  "spec/integration/singleton_spec.rb",
179
182
  "spec/jobs/all_synchronizations_job_spec.rb",
180
183
  "spec/jobs/push_to_connec_job_spec.rb",
data/release_notes.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 1.2.3
2
+
3
+ ### Fixes
4
+ * Fix Connec! version that was not cached scoped by tenant
5
+
1
6
  ## 1.2.2
2
7
 
3
8
  ### Fixes
data/spec/factories.rb CHANGED
@@ -19,9 +19,9 @@ FactoryGirl.define do
19
19
  end
20
20
 
21
21
  factory :idmap, class: Maestrano::Connector::Rails::IdMap do
22
- connec_id '6798-ada6-te43'
22
+ sequence(:connec_id) { |n| "#{n}6798-ada6-te43#{n}" }
23
23
  connec_entity 'person'
24
- external_id '4567ada66'
24
+ sequence(:external_id) { |n| "#{n}4567ada66#{n}" }
25
25
  external_entity 'contact'
26
26
  last_push_to_external 2.day.ago
27
27
  last_push_to_connec 1.day.ago