restforce-db 3.1.4 → 3.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/restforce/db/associations/belongs_to.rb +1 -1
- data/lib/restforce/db/associator.rb +3 -2
- data/lib/restforce/db/initializer.rb +4 -0
- data/lib/restforce/db/version.rb +1 -1
- data/lib/restforce/db/worker.rb +1 -1
- data/test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_lookups/when_there_is_currently_no_associated_record/and_the_underlying_association_is_one-to-many/{still_returns_a_nil_lookup_value_in_the_hash.yml → still_returns_no_value_in_the_hash.yml} +20 -20
- data/test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_lookups/when_there_is_currently_no_associated_record/{returns_a_nil_lookup_value_in_the_hash.yml → returns_no_value_in_the_hash.yml} +20 -20
- data/test/lib/restforce/db/associations/belongs_to_test.rb +4 -4
- data/test/lib/restforce/db/associator_test.rb +8 -0
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d28f5b9de2ee661484f34ea9bcbb6da3cba7b7b8
|
4
|
+
data.tar.gz: a40633b212013d5044299083938956feaa8fc184
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bb2a407ff93ccf23c9761bcfcb4a0998c852f57b99cb48b9793cdf37d7ab51a62694b2cd852a6180d129e2771a391cb27aa3fe919ddd95f289a125886642008
|
7
|
+
data.tar.gz: 6a25b37b9fad62442841cd1943cab5f412e4b0ff40f678b9478c4af208a78ced68fb2d1743063e4ff022568f14b0430ce74ec5fe92578f7221393109d503b4a4
|
@@ -66,7 +66,7 @@ module Restforce
|
|
66
66
|
# for what is actually a one-to-many association on the
|
67
67
|
# ActiveRecord object, so we always treat the result as an Array.
|
68
68
|
associated = Array(database_record.association(name).reader)
|
69
|
-
ids[lookup] = associated.
|
69
|
+
ids[lookup] = associated.first.send(mapping.lookup_column) unless associated.empty?
|
70
70
|
end
|
71
71
|
|
72
72
|
ids
|
@@ -95,12 +95,13 @@ module Restforce
|
|
95
95
|
end
|
96
96
|
|
97
97
|
# Internal: Get a list of the BelongsTo associations defined for the
|
98
|
-
# target mapping.
|
98
|
+
# target mapping. Ignores associations where the foreign key is Id, as
|
99
|
+
# a record's Id will never change.
|
99
100
|
#
|
100
101
|
# Returns an Array of Restforce::DB::Association::BelongsTo objects.
|
101
102
|
def belongs_to_associations
|
102
103
|
@belongs_to_associations ||= @mapping.associations.select do |association|
|
103
|
-
association.is_a?(Restforce::DB::Associations::BelongsTo)
|
104
|
+
association.is_a?(Restforce::DB::Associations::BelongsTo) && association.lookup != "Id"
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
@@ -33,6 +33,8 @@ module Restforce
|
|
33
33
|
return unless @mapping.strategy.build?(instance)
|
34
34
|
|
35
35
|
created = @mapping.database_record_type.create!(instance)
|
36
|
+
|
37
|
+
@runner.cache_timestamp instance
|
36
38
|
@runner.cache_timestamp created
|
37
39
|
rescue ActiveRecord::ActiveRecordError => e
|
38
40
|
DB.logger.error(SynchronizationError.new(e, instance))
|
@@ -49,6 +51,8 @@ module Restforce
|
|
49
51
|
return if instance.synced?
|
50
52
|
|
51
53
|
created = @mapping.salesforce_record_type.create!(instance)
|
54
|
+
|
55
|
+
@runner.cache_timestamp instance
|
52
56
|
@runner.cache_timestamp created
|
53
57
|
rescue Faraday::Error::ClientError => e
|
54
58
|
DB.logger.error(SynchronizationError.new(e, instance))
|
data/lib/restforce/db/version.rb
CHANGED
data/lib/restforce/db/worker.rb
CHANGED
@@ -75,12 +75,12 @@ module Restforce
|
|
75
75
|
run("ATTACHING RECORDS", Attacher, mapping)
|
76
76
|
run("PROPAGATING RECORDS", Initializer, mapping)
|
77
77
|
run("COLLECTING CHANGES", Collector, mapping)
|
78
|
-
run("UPDATING ASSOCIATIONS", Associator, mapping)
|
79
78
|
end
|
80
79
|
|
81
80
|
# NOTE: We can only perform the synchronization after all record
|
82
81
|
# changes have been aggregated, so this second loop is necessary.
|
83
82
|
Restforce::DB::Registry.each do |mapping|
|
83
|
+
run("UPDATING ASSOCIATIONS", Associator, mapping)
|
84
84
|
run("APPLYING CHANGES", Synchronizer, mapping)
|
85
85
|
end
|
86
86
|
end
|
@@ -21,10 +21,10 @@ http_interactions:
|
|
21
21
|
message: OK
|
22
22
|
headers:
|
23
23
|
Date:
|
24
|
-
-
|
24
|
+
- Wed, 01 Jul 2015 22:21:59 GMT
|
25
25
|
Set-Cookie:
|
26
|
-
- BrowserId=
|
27
|
-
|
26
|
+
- BrowserId=pSV4lvHNQnW2bmTjXxurMA;Path=/;Domain=.salesforce.com;Expires=Sun,
|
27
|
+
30-Aug-2015 22:21:59 GMT
|
28
28
|
Expires:
|
29
29
|
- Thu, 01 Jan 1970 00:00:00 GMT
|
30
30
|
Pragma:
|
@@ -37,9 +37,9 @@ http_interactions:
|
|
37
37
|
- chunked
|
38
38
|
body:
|
39
39
|
encoding: ASCII-8BIT
|
40
|
-
string: '{"id":"https://login.salesforce.com/id/00D1a000000H3O9EAK/0051a000000UGT8AAO","issued_at":"
|
40
|
+
string: '{"id":"https://login.salesforce.com/id/00D1a000000H3O9EAK/0051a000000UGT8AAO","issued_at":"1435789319584","token_type":"Bearer","instance_url":"https://<host>","signature":"IR8FX61zjomHUYcHXhnxA8c2OlpArSm/29OXS6TXI5A=","access_token":"00D1a000000H3O9!AQ4AQKJZZLBvLm3vEyoa1I_FUwCVKJTQydGXcIOYHXeuNRsEB5WSOXQC2x.kIQ3wbc1V_KhljRRKg43aIkvmAoiG.a4Ll49g"}'
|
41
41
|
http_version:
|
42
|
-
recorded_at:
|
42
|
+
recorded_at: Wed, 01 Jul 2015 22:21:59 GMT
|
43
43
|
- request:
|
44
44
|
method: post
|
45
45
|
uri: https://<host>/services/data/<api_version>/sobjects/CustomObject__c
|
@@ -52,7 +52,7 @@ http_interactions:
|
|
52
52
|
Content-Type:
|
53
53
|
- application/json
|
54
54
|
Authorization:
|
55
|
-
- OAuth 00D1a000000H3O9!
|
55
|
+
- OAuth 00D1a000000H3O9!AQ4AQKJZZLBvLm3vEyoa1I_FUwCVKJTQydGXcIOYHXeuNRsEB5WSOXQC2x.kIQ3wbc1V_KhljRRKg43aIkvmAoiG.a4Ll49g
|
56
56
|
Accept-Encoding:
|
57
57
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
58
58
|
Accept:
|
@@ -63,28 +63,28 @@ http_interactions:
|
|
63
63
|
message: Created
|
64
64
|
headers:
|
65
65
|
Date:
|
66
|
-
-
|
66
|
+
- Wed, 01 Jul 2015 22:22:00 GMT
|
67
67
|
Set-Cookie:
|
68
|
-
- BrowserId=
|
69
|
-
|
68
|
+
- BrowserId=U6tImumuReGJF-zS-Ebehg;Path=/;Domain=.salesforce.com;Expires=Sun,
|
69
|
+
30-Aug-2015 22:22:00 GMT
|
70
70
|
Expires:
|
71
71
|
- Thu, 01 Jan 1970 00:00:00 GMT
|
72
72
|
Sforce-Limit-Info:
|
73
|
-
- api-usage=
|
73
|
+
- api-usage=7/15000
|
74
74
|
Location:
|
75
|
-
- "/services/data/<api_version>/sobjects/CustomObject__c/
|
75
|
+
- "/services/data/<api_version>/sobjects/CustomObject__c/a001a00000309IXAAY"
|
76
76
|
Content-Type:
|
77
77
|
- application/json;charset=UTF-8
|
78
78
|
Transfer-Encoding:
|
79
79
|
- chunked
|
80
80
|
body:
|
81
81
|
encoding: ASCII-8BIT
|
82
|
-
string: '{"id":"
|
82
|
+
string: '{"id":"a001a00000309IXAAY","success":true,"errors":[]}'
|
83
83
|
http_version:
|
84
|
-
recorded_at:
|
84
|
+
recorded_at: Wed, 01 Jul 2015 22:22:00 GMT
|
85
85
|
- request:
|
86
86
|
method: delete
|
87
|
-
uri: https://<host>/services/data/<api_version>/sobjects/CustomObject__c/
|
87
|
+
uri: https://<host>/services/data/<api_version>/sobjects/CustomObject__c/a001a00000309IXAAY
|
88
88
|
body:
|
89
89
|
encoding: US-ASCII
|
90
90
|
string: ''
|
@@ -92,7 +92,7 @@ http_interactions:
|
|
92
92
|
User-Agent:
|
93
93
|
- Faraday v0.9.1
|
94
94
|
Authorization:
|
95
|
-
- OAuth 00D1a000000H3O9!
|
95
|
+
- OAuth 00D1a000000H3O9!AQ4AQKJZZLBvLm3vEyoa1I_FUwCVKJTQydGXcIOYHXeuNRsEB5WSOXQC2x.kIQ3wbc1V_KhljRRKg43aIkvmAoiG.a4Ll49g
|
96
96
|
Accept-Encoding:
|
97
97
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
98
98
|
Accept:
|
@@ -103,17 +103,17 @@ http_interactions:
|
|
103
103
|
message: No Content
|
104
104
|
headers:
|
105
105
|
Date:
|
106
|
-
-
|
106
|
+
- Wed, 01 Jul 2015 22:22:01 GMT
|
107
107
|
Set-Cookie:
|
108
|
-
- BrowserId=
|
109
|
-
|
108
|
+
- BrowserId=ExR5pJi2RHGsmv5WrGqJ6g;Path=/;Domain=.salesforce.com;Expires=Sun,
|
109
|
+
30-Aug-2015 22:22:01 GMT
|
110
110
|
Expires:
|
111
111
|
- Thu, 01 Jan 1970 00:00:00 GMT
|
112
112
|
Sforce-Limit-Info:
|
113
|
-
- api-usage=
|
113
|
+
- api-usage=7/15000
|
114
114
|
body:
|
115
115
|
encoding: UTF-8
|
116
116
|
string: ''
|
117
117
|
http_version:
|
118
|
-
recorded_at:
|
118
|
+
recorded_at: Wed, 01 Jul 2015 22:22:01 GMT
|
119
119
|
recorded_with: VCR 2.9.3
|
@@ -21,10 +21,10 @@ http_interactions:
|
|
21
21
|
message: OK
|
22
22
|
headers:
|
23
23
|
Date:
|
24
|
-
-
|
24
|
+
- Wed, 01 Jul 2015 22:22:03 GMT
|
25
25
|
Set-Cookie:
|
26
|
-
- BrowserId=
|
27
|
-
|
26
|
+
- BrowserId=qGHLRZezTjOQaFra2D9NGg;Path=/;Domain=.salesforce.com;Expires=Sun,
|
27
|
+
30-Aug-2015 22:22:03 GMT
|
28
28
|
Expires:
|
29
29
|
- Thu, 01 Jan 1970 00:00:00 GMT
|
30
30
|
Pragma:
|
@@ -37,9 +37,9 @@ http_interactions:
|
|
37
37
|
- chunked
|
38
38
|
body:
|
39
39
|
encoding: ASCII-8BIT
|
40
|
-
string: '{"id":"https://login.salesforce.com/id/00D1a000000H3O9EAK/0051a000000UGT8AAO","issued_at":"
|
40
|
+
string: '{"id":"https://login.salesforce.com/id/00D1a000000H3O9EAK/0051a000000UGT8AAO","issued_at":"1435789323964","token_type":"Bearer","instance_url":"https://<host>","signature":"vfN4LijqlTxjHAcDWDjrwczNUgVgtpNxMVcf6IT0H2Q=","access_token":"00D1a000000H3O9!AQ4AQKJZZLBvLm3vEyoa1I_FUwCVKJTQydGXcIOYHXeuNRsEB5WSOXQC2x.kIQ3wbc1V_KhljRRKg43aIkvmAoiG.a4Ll49g"}'
|
41
41
|
http_version:
|
42
|
-
recorded_at:
|
42
|
+
recorded_at: Wed, 01 Jul 2015 22:22:03 GMT
|
43
43
|
- request:
|
44
44
|
method: post
|
45
45
|
uri: https://<host>/services/data/<api_version>/sobjects/CustomObject__c
|
@@ -52,7 +52,7 @@ http_interactions:
|
|
52
52
|
Content-Type:
|
53
53
|
- application/json
|
54
54
|
Authorization:
|
55
|
-
- OAuth 00D1a000000H3O9!
|
55
|
+
- OAuth 00D1a000000H3O9!AQ4AQKJZZLBvLm3vEyoa1I_FUwCVKJTQydGXcIOYHXeuNRsEB5WSOXQC2x.kIQ3wbc1V_KhljRRKg43aIkvmAoiG.a4Ll49g
|
56
56
|
Accept-Encoding:
|
57
57
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
58
58
|
Accept:
|
@@ -63,28 +63,28 @@ http_interactions:
|
|
63
63
|
message: Created
|
64
64
|
headers:
|
65
65
|
Date:
|
66
|
-
-
|
66
|
+
- Wed, 01 Jul 2015 22:22:04 GMT
|
67
67
|
Set-Cookie:
|
68
|
-
- BrowserId=
|
69
|
-
|
68
|
+
- BrowserId=bgHJK63LRWaIlTO2E2U0QA;Path=/;Domain=.salesforce.com;Expires=Sun,
|
69
|
+
30-Aug-2015 22:22:04 GMT
|
70
70
|
Expires:
|
71
71
|
- Thu, 01 Jan 1970 00:00:00 GMT
|
72
72
|
Sforce-Limit-Info:
|
73
|
-
- api-usage=
|
73
|
+
- api-usage=8/15000
|
74
74
|
Location:
|
75
|
-
- "/services/data/<api_version>/sobjects/CustomObject__c/
|
75
|
+
- "/services/data/<api_version>/sobjects/CustomObject__c/a001a00000309IcAAI"
|
76
76
|
Content-Type:
|
77
77
|
- application/json;charset=UTF-8
|
78
78
|
Transfer-Encoding:
|
79
79
|
- chunked
|
80
80
|
body:
|
81
81
|
encoding: ASCII-8BIT
|
82
|
-
string: '{"id":"
|
82
|
+
string: '{"id":"a001a00000309IcAAI","success":true,"errors":[]}'
|
83
83
|
http_version:
|
84
|
-
recorded_at:
|
84
|
+
recorded_at: Wed, 01 Jul 2015 22:22:05 GMT
|
85
85
|
- request:
|
86
86
|
method: delete
|
87
|
-
uri: https://<host>/services/data/<api_version>/sobjects/CustomObject__c/
|
87
|
+
uri: https://<host>/services/data/<api_version>/sobjects/CustomObject__c/a001a00000309IcAAI
|
88
88
|
body:
|
89
89
|
encoding: US-ASCII
|
90
90
|
string: ''
|
@@ -92,7 +92,7 @@ http_interactions:
|
|
92
92
|
User-Agent:
|
93
93
|
- Faraday v0.9.1
|
94
94
|
Authorization:
|
95
|
-
- OAuth 00D1a000000H3O9!
|
95
|
+
- OAuth 00D1a000000H3O9!AQ4AQKJZZLBvLm3vEyoa1I_FUwCVKJTQydGXcIOYHXeuNRsEB5WSOXQC2x.kIQ3wbc1V_KhljRRKg43aIkvmAoiG.a4Ll49g
|
96
96
|
Accept-Encoding:
|
97
97
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
98
98
|
Accept:
|
@@ -103,17 +103,17 @@ http_interactions:
|
|
103
103
|
message: No Content
|
104
104
|
headers:
|
105
105
|
Date:
|
106
|
-
-
|
106
|
+
- Wed, 01 Jul 2015 22:22:06 GMT
|
107
107
|
Set-Cookie:
|
108
|
-
- BrowserId=
|
109
|
-
|
108
|
+
- BrowserId=bEI3cWD_SaCpOD8wvl95jg;Path=/;Domain=.salesforce.com;Expires=Sun,
|
109
|
+
30-Aug-2015 22:22:06 GMT
|
110
110
|
Expires:
|
111
111
|
- Thu, 01 Jan 1970 00:00:00 GMT
|
112
112
|
Sforce-Limit-Info:
|
113
|
-
- api-usage=
|
113
|
+
- api-usage=7/15000
|
114
114
|
body:
|
115
115
|
encoding: UTF-8
|
116
116
|
string: ''
|
117
117
|
http_version:
|
118
|
-
recorded_at:
|
118
|
+
recorded_at: Wed, 01 Jul 2015 22:22:06 GMT
|
119
119
|
recorded_with: VCR 2.9.3
|
@@ -57,8 +57,8 @@ describe Restforce::DB::Associations::BelongsTo do
|
|
57
57
|
let(:object_salesforce_id) { Salesforce.create!(mapping.salesforce_model) }
|
58
58
|
let(:object) { mapping.database_model.create!(salesforce_id: object_salesforce_id) }
|
59
59
|
|
60
|
-
it "returns
|
61
|
-
expect(association.lookups(object)).
|
60
|
+
it "returns no value in the hash" do
|
61
|
+
expect(association.lookups(object)).to_be :empty?
|
62
62
|
end
|
63
63
|
|
64
64
|
describe "and the underlying association is one-to-many" do
|
@@ -73,8 +73,8 @@ describe Restforce::DB::Associations::BelongsTo do
|
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
-
it "still returns
|
77
|
-
expect(association.lookups(object)).
|
76
|
+
it "still returns no value in the hash" do
|
77
|
+
expect(association.lookups(object)).to_be :empty?
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
@@ -39,6 +39,14 @@ describe Restforce::DB::Associator do
|
|
39
39
|
mapping.associations << association
|
40
40
|
end
|
41
41
|
|
42
|
+
describe "when the association lookup is through Id" do
|
43
|
+
let(:association) { Restforce::DB::Associations::BelongsTo.new(:user, through: "Id") }
|
44
|
+
|
45
|
+
it "ignores the association" do
|
46
|
+
expect(associator.send(:belongs_to_associations)).to_be :empty?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
42
50
|
describe "given another record for association" do
|
43
51
|
let(:new_user_salesforce_id) do
|
44
52
|
Salesforce.create!(
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: restforce-db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Horner
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -260,8 +260,8 @@ files:
|
|
260
260
|
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_build/when_the_association_is_non-building/proceeds_without_constructing_any_records.yml
|
261
261
|
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_build/with_an_unrelated_association_mapping/proceeds_without_raising_an_error.yml
|
262
262
|
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_lookups/returns_a_hash_of_the_associated_records_lookup_IDs.yml
|
263
|
-
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_lookups/when_there_is_currently_no_associated_record/and_the_underlying_association_is_one-to-many/
|
264
|
-
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_lookups/when_there_is_currently_no_associated_record/
|
263
|
+
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_lookups/when_there_is_currently_no_associated_record/and_the_underlying_association_is_one-to-many/still_returns_no_value_in_the_hash.yml
|
264
|
+
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_lookups/when_there_is_currently_no_associated_record/returns_no_value_in_the_hash.yml
|
265
265
|
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_synced_for_/when_a_matching_associated_record_has_been_synchronized/returns_true.yml
|
266
266
|
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_synced_for_/when_no_matching_associated_record_has_been_synchronized/returns_false.yml
|
267
267
|
- test/cassettes/Restforce_DB_Associations_HasMany/with_an_inverse_mapping/_build/builds_a_number_of_associated_records_from_the_data_in_Salesforce.yml
|
@@ -391,7 +391,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
391
391
|
version: '0'
|
392
392
|
requirements: []
|
393
393
|
rubyforge_project:
|
394
|
-
rubygems_version: 2.4.
|
394
|
+
rubygems_version: 2.4.5
|
395
395
|
signing_key:
|
396
396
|
specification_version: 4
|
397
397
|
summary: Bind your database to Salesforce data
|