maestrano-connector-rails 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/app/models/maestrano/connector/rails/concerns/entity.rb +37 -2
- data/app/models/maestrano/connector/rails/concerns/sub_entity_base.rb +31 -1
- data/maestrano-connector-rails.gemspec +3 -3
- data/spec/models/entity_spec.rb +30 -2
- data/spec/models/sub_entity_base_spec.rb +27 -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: 9444b9cdc7de73b532ce22743daf00eed51f6a88
|
4
|
+
data.tar.gz: 68ae18a05cdca6bf985e6927c06d108ff0cc58bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80667b16e9b8d3436992174980c206b91bf8c95b9e1e5169d8aa6f5e963e9543e08be773633b00a49c14f08f06f1032213f49f2db75b7d162d6293e4e5cf75dd
|
7
|
+
data.tar.gz: ad3e5ff87948d0e537ab5d429a021e611f997f47eeca4bac250bdaeb4d33386bfed54d667ff9ceb9518ad0f081cba64e89803588d8b963fdfec393eaed84e133
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
@@ -108,6 +108,13 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
108
108
|
def object_name_from_external_entity_hash(entity)
|
109
109
|
raise "Not implemented"
|
110
110
|
end
|
111
|
+
|
112
|
+
# [{reference_class: Entities::.., connec_field: 'account_id', external_field: 'account/something/id'}]
|
113
|
+
# ledger_account_idmap = Entities::Account.find_idmap({connec_id: entity['account_id'], organization_id: organization.id})
|
114
|
+
# ledger_account_id = ledger_account_idmap && ledger_account_idmap.external_id
|
115
|
+
def references
|
116
|
+
[]
|
117
|
+
end
|
111
118
|
end
|
112
119
|
|
113
120
|
# ----------------------------------------------
|
@@ -115,12 +122,22 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
115
122
|
# ----------------------------------------------
|
116
123
|
# Map a Connec! entity to the external format
|
117
124
|
def map_to_external(entity, organization)
|
118
|
-
|
125
|
+
ref_hash = {}
|
126
|
+
self.class.references.each do |ref|
|
127
|
+
ref_hash.merge! ref[:external_field].split('/').reverse.inject(self.class.id_from_ref(entity, ref, false, organization)) { |a, n| { n.to_sym => a } }
|
128
|
+
end
|
129
|
+
|
130
|
+
self.class.mapper_class.normalize(entity).merge(ref_hash)
|
119
131
|
end
|
120
132
|
|
121
133
|
# Map an external entity to Connec! format
|
122
134
|
def map_to_connec(entity, organization)
|
123
|
-
|
135
|
+
ref_hash = {}
|
136
|
+
self.class.references.each do |ref|
|
137
|
+
ref_hash.merge! ref[:connec_field].split('/').reverse.inject(self.class.id_from_ref(entity, ref, true, organization)) { |a, n| { n.to_sym => a } }
|
138
|
+
end
|
139
|
+
|
140
|
+
self.class.mapper_class.denormalize(entity).merge(ref_hash)
|
124
141
|
end
|
125
142
|
|
126
143
|
# ----------------------------------------------
|
@@ -385,6 +402,24 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
385
402
|
entity_instance.map_external_entity_with_idmap(external_entity, connec_entity_name, idmap, organization)
|
386
403
|
end
|
387
404
|
end
|
405
|
+
|
406
|
+
def id_from_ref(entity, ref, is_external, organization)
|
407
|
+
# field can be address/billing/country_id
|
408
|
+
field = is_external ? ref[:external_field] : ref[:connec_field]
|
409
|
+
field = field.split('/')
|
410
|
+
id = entity
|
411
|
+
field.each do |f|
|
412
|
+
id &&= id[f]
|
413
|
+
end
|
414
|
+
|
415
|
+
if is_external
|
416
|
+
idmap = ref[:reference_class].find_idmap({external_id: id, organization_id: organization.id})
|
417
|
+
idmap && idmap.connec_id
|
418
|
+
else
|
419
|
+
idmap = ref[:reference_class].find_idmap({connec_id: id, organization_id: organization.id})
|
420
|
+
idmap && idmap.external_id
|
421
|
+
end
|
422
|
+
end
|
388
423
|
end
|
389
424
|
|
390
425
|
def map_external_entity_with_idmap(external_entity, connec_entity_name, idmap, organization)
|
@@ -61,11 +61,41 @@ module Maestrano::Connector::Rails::Concerns::SubEntityBase
|
|
61
61
|
Maestrano::Connector::Rails::IdMap.create(h)
|
62
62
|
end
|
63
63
|
end
|
64
|
+
|
65
|
+
# { 'External Entity' => LalaMapper, 'Other external entity' => LiliMapper }
|
66
|
+
# or { 'Connec Entity' => LalaMapper, 'Other connec entity' => LiliMapper }
|
67
|
+
def mapper_classes
|
68
|
+
{}
|
69
|
+
end
|
70
|
+
|
71
|
+
# {
|
72
|
+
# 'External Entity' => [{reference_class: Entities::.., connec_field: '', external_field: ''}],
|
73
|
+
# 'Other external entity' => [{reference_class: Entities::.., connec_field: '', external_field: ''}]
|
74
|
+
# }
|
75
|
+
def references
|
76
|
+
{}
|
77
|
+
end
|
64
78
|
end
|
65
79
|
|
66
80
|
|
67
81
|
def map_to(name, entity, organization)
|
68
|
-
|
82
|
+
mapper = self.class.mapper_classes[name]
|
83
|
+
raise "Impossible mapping from #{self.class.entity_name} to #{name}" unless mapper
|
84
|
+
|
85
|
+
ref_hash = {}
|
86
|
+
if self.class.references[name]
|
87
|
+
self.class.references[name].each do |ref|
|
88
|
+
field = self.class.external? ? ref[:connec_field] : ref[:external_field]
|
89
|
+
ref_hash.merge! field.split('/').reverse.inject(Maestrano::Connector::Rails::Entity.id_from_ref(entity, ref, false, organization)) { |a, n| { n.to_sym => a } }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
if self.class.external?
|
94
|
+
mapped_entity = mapper.denormalize(entity)
|
95
|
+
else
|
96
|
+
mapped_entity = mapper.normalize(entity)
|
97
|
+
end
|
98
|
+
mapped_entity.merge(ref_hash)
|
69
99
|
end
|
70
100
|
|
71
101
|
|
@@ -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.3.
|
5
|
+
# stub: maestrano-connector-rails 0.3.2 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.2"
|
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-03-
|
14
|
+
s.date = "2016-03-21"
|
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/spec/models/entity_spec.rb
CHANGED
@@ -132,16 +132,44 @@ describe Maestrano::Connector::Rails::Entity do
|
|
132
132
|
|
133
133
|
describe 'map_to_external' do
|
134
134
|
it 'calls the mapper normalize' do
|
135
|
-
expect(AMapper).to receive(:normalize).with({})
|
135
|
+
expect(AMapper).to receive(:normalize).with({}).and_return({})
|
136
136
|
subject.map_to_external({}, nil)
|
137
137
|
end
|
138
|
+
|
139
|
+
context 'with references' do
|
140
|
+
let!(:organization) { create(:organization) }
|
141
|
+
let!(:idmap) { create(:idmap, organization: organization) }
|
142
|
+
before {
|
143
|
+
clazz = Maestrano::Connector::Rails::Entity
|
144
|
+
allow(clazz).to receive(:find_idmap).and_return(idmap)
|
145
|
+
allow(clazz).to receive(:references).and_return([{reference_class: clazz, connec_field: 'organization_id', external_field: 'contact_id'}])
|
146
|
+
}
|
147
|
+
|
148
|
+
it 'returns the mapped entity with its references' do
|
149
|
+
expect(subject.map_to_external({'organization_id' => 'abcd'}, organization)).to eql({contact_id: idmap.external_id})
|
150
|
+
end
|
151
|
+
end
|
138
152
|
end
|
139
153
|
|
140
154
|
describe 'map_to_connec' do
|
141
155
|
it 'calls the mapper denormalize' do
|
142
|
-
expect(AMapper).to receive(:denormalize).with({})
|
156
|
+
expect(AMapper).to receive(:denormalize).with({}).and_return({})
|
143
157
|
subject.map_to_connec({}, nil)
|
144
158
|
end
|
159
|
+
|
160
|
+
context 'with references' do
|
161
|
+
let!(:organization) { create(:organization) }
|
162
|
+
let!(:idmap) { create(:idmap, organization: organization) }
|
163
|
+
before {
|
164
|
+
clazz = Maestrano::Connector::Rails::Entity
|
165
|
+
allow(clazz).to receive(:find_idmap).and_return(idmap)
|
166
|
+
allow(clazz).to receive(:references).and_return([{reference_class: clazz, connec_field: 'organization_id', external_field: 'contact_id'}])
|
167
|
+
}
|
168
|
+
|
169
|
+
it 'returns the mapped entity with its references' do
|
170
|
+
expect(subject.map_to_connec({'contact_id' => 'abcd'}, organization)).to eql({organization_id: idmap.connec_id})
|
171
|
+
end
|
172
|
+
end
|
145
173
|
end
|
146
174
|
end
|
147
175
|
|
@@ -116,7 +116,33 @@ describe Maestrano::Connector::Rails::SubEntityBase do
|
|
116
116
|
subject { Maestrano::Connector::Rails::SubEntityBase.new }
|
117
117
|
|
118
118
|
describe 'map_to' do
|
119
|
-
|
119
|
+
before {
|
120
|
+
class AMapper
|
121
|
+
extend HashMapper
|
122
|
+
end
|
123
|
+
allow(subject.class).to receive(:mapper_classes).and_return('Name' => AMapper)
|
124
|
+
}
|
125
|
+
|
126
|
+
context 'when external' do
|
127
|
+
before {
|
128
|
+
allow(subject.class).to receive(:external?).and_return(true)
|
129
|
+
}
|
130
|
+
|
131
|
+
it 'calls the mapper denormalize' do
|
132
|
+
expect(AMapper).to receive(:denormalize).and_return({})
|
133
|
+
subject.map_to('Name', {}, nil)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
context 'when not external' do
|
137
|
+
before {
|
138
|
+
allow(subject.class).to receive(:external?).and_return(false)
|
139
|
+
}
|
140
|
+
|
141
|
+
it 'calls the mapper normalize' do
|
142
|
+
expect(AMapper).to receive(:normalize).and_return({})
|
143
|
+
subject.map_to('Name', {}, nil)
|
144
|
+
end
|
145
|
+
end
|
120
146
|
end
|
121
147
|
end
|
122
148
|
end
|
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.3.
|
4
|
+
version: 0.3.2
|
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-03-
|
11
|
+
date: 2016-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: maestrano-rails
|