restforce-db 1.2.12 → 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.
- checksums.yaml +4 -4
- data/README.md +15 -9
- data/lib/restforce/db/associations/base.rb +12 -1
- data/lib/restforce/db/associations/belongs_to.rb +2 -0
- data/lib/restforce/db/associations/has_many.rb +2 -0
- data/lib/restforce/db/associations/has_one.rb +2 -0
- data/lib/restforce/db/dsl.rb +12 -3
- data/lib/restforce/db/version.rb +1 -1
- data/test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_build/when_the_association_is_non-building/proceeds_without_constructing_any_records.yml +233 -0
- data/test/cassettes/Restforce_DB_Associations_HasMany/with_an_inverse_mapping/_build/when_the_association_is_non-building/proceeds_without_constructing_any_records.yml +158 -0
- data/test/cassettes/Restforce_DB_Associations_HasOne/with_an_inverse_mapping/_build/when_the_association_is_non-building/proceeds_without_constructing_any_records.yml +233 -0
- data/test/lib/restforce/db/associations/belongs_to_test.rb +8 -0
- data/test/lib/restforce/db/associations/has_many_test.rb +8 -0
- data/test/lib/restforce/db/associations/has_one_test.rb +8 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d8819030ad19f9cf66c0f4f0e8a8f619a75a207
|
4
|
+
data.tar.gz: 239e7983d8a2f382f02616635d2d96882eae3a44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dac325298c30890ac75800f246863b3e831c25e2c66c108f3835f091271f49cd2c69ddc9fa165620c8c650f507d22db44346435c3c062deac0fd251728918c64
|
7
|
+
data.tar.gz: 0d95128ded0b74be19e399e2350d9a0f34889c1a0fd0f69703dd5dc475f2f1684e32ff1be9b4f030c8d1ed41385b9e487e40cc4d8d5a14f96e20bd5df2fec80c
|
data/README.md
CHANGED
@@ -170,7 +170,20 @@ This _also_ defines an inverse relationship for a `belongs_to` relationship. The
|
|
170
170
|
|
171
171
|
In the above example, `Dish__c` is a Salesforce object type which references the `Restaurant__c` object type through an aptly-named Lookup. There is no restriction on the number of `Dish__c` objects that may reference the same `Restaurant__c`, so we define this relationship as a `has_many` associaition in our `Restaurant` mapping.
|
172
172
|
|
173
|
-
|
173
|
+
##### Association Caveats
|
174
|
+
|
175
|
+
- **Lookups.**
|
176
|
+
If one side of an association has multiple possible lookup fields, the other side of the association is expected to declare a _single_ lookup field, which will be treated as the canonical lookup for that relationship. The Lookup is assumed to always refer to the `Id` of the object declaring the `has_many`/`has_one` side of the association.
|
177
|
+
|
178
|
+
- **Record Construction.**
|
179
|
+
By default, _all_ associated records will be recursively constructed when a single record is synchronized into the system. This can result in a lot of unwanted/time-consuming record creation, particularly if your Salesforce account has a lot of irrelevant legacy data. You can turn off this behavior for specific associations by passing `build: false` when declaring the association in the DSL.
|
180
|
+
|
181
|
+
- **Record Persistence.**
|
182
|
+
See the `autosave: true` option declared for the `has_one` relationship on `Restaurant`? `Restforce::DB` requires your ActiveRecord models to handle persistence propagation.
|
183
|
+
|
184
|
+
When inserting new records, `save!` will only be invoked on the _entry point_ record (typically a mapping with an `:always` synchronization strategy), so the persistence of any associated records must be chained through this "root" object.
|
185
|
+
|
186
|
+
You may want to consult [the ActiveRecord documentation](http://apidock.com/rails/ActiveRecord/Associations/ClassMethods) for your specific use case.
|
174
187
|
|
175
188
|
### Seed your data
|
176
189
|
|
@@ -201,20 +214,13 @@ For additional information and a full set of options, you can run:
|
|
201
214
|
|
202
215
|
$ bundle exec bin/restforce-db -h
|
203
216
|
|
204
|
-
## Caveats
|
217
|
+
## System Caveats
|
205
218
|
|
206
219
|
- **API Usage.**
|
207
220
|
This gem performs most of its functionality via the Salesforce API (by way of the [`restforce`](https://github.com/ejholmes/restforce) gem). If you're at risk of hitting your Salesforce API limits, this may not be the right approach for you.
|
208
221
|
|
209
222
|
- **Update Prioritization.**
|
210
223
|
When synchronization occurs, the most recently updated record, Salesforce or database, gets to make the final call about the values of _all_ of the fields it observes. This means that race conditions can and probably will happen if both systems are updated within the same polling interval.
|
211
|
-
|
212
|
-
- **Record Persistence.**
|
213
|
-
See the `autosave: true` option declared for the `has_one` relationship on `Restaurant`? `Restforce::DB` requires your ActiveRecord models to handle persistence propagation.
|
214
|
-
|
215
|
-
When inserting new records, `save!` will only be invoked on the _entry point_ record (typically a mapping with an `:always` synchronization strategy), so the persistence of any associated records must be chained through this "root" object.
|
216
|
-
|
217
|
-
You may want to consult [the ActiveRecord documentation](http://apidock.com/rails/ActiveRecord/Associations/ClassMethods) for your specific use case.
|
218
224
|
|
219
225
|
## Development
|
220
226
|
|
@@ -14,9 +14,12 @@ module Restforce
|
|
14
14
|
#
|
15
15
|
# name - The name of the ActiveRecord association to construct.
|
16
16
|
# through - The name of the lookup field on the Salesforce record.
|
17
|
-
|
17
|
+
# build - A Boolean indicating whether or not the association chain
|
18
|
+
# should be built out for new records.
|
19
|
+
def initialize(name, through: nil, build: true)
|
18
20
|
@name = name.to_sym
|
19
21
|
@lookup = through.is_a?(Array) ? through.map(&:to_s) : through.to_s
|
22
|
+
@build = build
|
20
23
|
end
|
21
24
|
|
22
25
|
# Public: Build a record or series of records for the association
|
@@ -55,6 +58,14 @@ module Restforce
|
|
55
58
|
|
56
59
|
private
|
57
60
|
|
61
|
+
# Internal: Should records for this association be synchronized between
|
62
|
+
# the two systems when a new record is added for the base mapping?
|
63
|
+
#
|
64
|
+
# Returns a Boolean.
|
65
|
+
def build?
|
66
|
+
@build
|
67
|
+
end
|
68
|
+
|
58
69
|
# Internal: Get the appropriate Salesforce Lookup ID field for the
|
59
70
|
# passed mapping.
|
60
71
|
#
|
@@ -18,6 +18,8 @@ module Restforce
|
|
18
18
|
#
|
19
19
|
# Returns an Array of constructed association records.
|
20
20
|
def build(database_record, salesforce_record, cache = AssociationCache.new(database_record))
|
21
|
+
return [] unless build?
|
22
|
+
|
21
23
|
@cache = cache
|
22
24
|
|
23
25
|
target = target_mapping(database_record)
|
@@ -18,6 +18,8 @@ module Restforce
|
|
18
18
|
#
|
19
19
|
# Returns an Array of constructed association records.
|
20
20
|
def build(database_record, salesforce_record, cache = AssociationCache.new(database_record))
|
21
|
+
return [] unless build?
|
22
|
+
|
21
23
|
@cache = cache
|
22
24
|
|
23
25
|
target = target_mapping(database_record)
|
data/lib/restforce/db/dsl.rb
CHANGED
@@ -37,12 +37,15 @@ module Restforce
|
|
37
37
|
#
|
38
38
|
# association - The name of the ActiveRecord association.
|
39
39
|
# through - A String or Array of Strings representing the Lookup IDs.
|
40
|
+
# build - A Boolean indicating whether or not the association chain
|
41
|
+
# should be built out for new records.
|
40
42
|
#
|
41
43
|
# Returns nothing.
|
42
|
-
def belongs_to(association, through:)
|
44
|
+
def belongs_to(association, through:, build: true)
|
43
45
|
@mapping.associations << Associations::BelongsTo.new(
|
44
46
|
association,
|
45
47
|
through: through,
|
48
|
+
build: build,
|
46
49
|
)
|
47
50
|
end
|
48
51
|
|
@@ -51,12 +54,15 @@ module Restforce
|
|
51
54
|
#
|
52
55
|
# association - The name of the ActiveRecord association.
|
53
56
|
# through - A String representing the Lookup ID.
|
57
|
+
# build - A Boolean indicating whether or not the association chain
|
58
|
+
# should be built out for new records.
|
54
59
|
#
|
55
60
|
# Returns nothing.
|
56
|
-
def has_one(association, through:) # rubocop:disable PredicateName
|
61
|
+
def has_one(association, through:, build: true) # rubocop:disable PredicateName
|
57
62
|
@mapping.associations << Associations::HasOne.new(
|
58
63
|
association,
|
59
64
|
through: through,
|
65
|
+
build: build,
|
60
66
|
)
|
61
67
|
end
|
62
68
|
|
@@ -65,12 +71,15 @@ module Restforce
|
|
65
71
|
#
|
66
72
|
# association - The name of the ActiveRecord association.
|
67
73
|
# through - A String representing the Lookup ID.
|
74
|
+
# build - A Boolean indicating whether or not the association chain
|
75
|
+
# should be built out for new records.
|
68
76
|
#
|
69
77
|
# Returns nothing.
|
70
|
-
def has_many(association, through:) # rubocop:disable PredicateName
|
78
|
+
def has_many(association, through:, build: true) # rubocop:disable PredicateName
|
71
79
|
@mapping.associations << Associations::HasMany.new(
|
72
80
|
association,
|
73
81
|
through: through,
|
82
|
+
build: build,
|
74
83
|
)
|
75
84
|
end
|
76
85
|
|
data/lib/restforce/db/version.rb
CHANGED
@@ -0,0 +1,233 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://<host>/services/oauth2/token
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: grant_type=password&client_id=<client_id>&client_secret=<client_secret>&username=<username>&password=<password><security_token>
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.1
|
12
|
+
Content-Type:
|
13
|
+
- application/x-www-form-urlencoded
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Date:
|
24
|
+
- Tue, 12 May 2015 19:57:14 GMT
|
25
|
+
Set-Cookie:
|
26
|
+
- BrowserId=V9dFLjV5TievBVtXBTgLWg;Path=/;Domain=.salesforce.com;Expires=Sat,
|
27
|
+
11-Jul-2015 19:57:14 GMT
|
28
|
+
Expires:
|
29
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
30
|
+
Pragma:
|
31
|
+
- no-cache
|
32
|
+
Cache-Control:
|
33
|
+
- no-cache, no-store
|
34
|
+
Content-Type:
|
35
|
+
- application/json;charset=UTF-8
|
36
|
+
Transfer-Encoding:
|
37
|
+
- chunked
|
38
|
+
body:
|
39
|
+
encoding: ASCII-8BIT
|
40
|
+
string: '{"id":"https://login.salesforce.com/id/00D1a000000H3O9EAK/0051a000000UGT8AAO","issued_at":"1431460634690","token_type":"Bearer","instance_url":"https://<host>","signature":"I1sgPTyHS2c7Q4mY6uYgi366rdlGdYcRwz3opVrE+58=","access_token":"00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM"}'
|
41
|
+
http_version:
|
42
|
+
recorded_at: Tue, 12 May 2015 19:57:14 GMT
|
43
|
+
- request:
|
44
|
+
method: post
|
45
|
+
uri: https://<host>/services/data/v26.0/sobjects/Contact
|
46
|
+
body:
|
47
|
+
encoding: UTF-8
|
48
|
+
string: '{"Email":"somebody@example.com","LastName":"Somebody"}'
|
49
|
+
headers:
|
50
|
+
User-Agent:
|
51
|
+
- Faraday v0.9.1
|
52
|
+
Content-Type:
|
53
|
+
- application/json
|
54
|
+
Authorization:
|
55
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
56
|
+
Accept-Encoding:
|
57
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
58
|
+
Accept:
|
59
|
+
- "*/*"
|
60
|
+
response:
|
61
|
+
status:
|
62
|
+
code: 201
|
63
|
+
message: Created
|
64
|
+
headers:
|
65
|
+
Date:
|
66
|
+
- Tue, 12 May 2015 19:57:16 GMT
|
67
|
+
Set-Cookie:
|
68
|
+
- BrowserId=xiEWPErTSdeEBjwIUT0J3w;Path=/;Domain=.salesforce.com;Expires=Sat,
|
69
|
+
11-Jul-2015 19:57:16 GMT
|
70
|
+
Expires:
|
71
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
72
|
+
Sforce-Limit-Info:
|
73
|
+
- api-usage=1/15000
|
74
|
+
Location:
|
75
|
+
- "/services/data/v26.0/sobjects/Contact/0031a000003Gm5NAAS"
|
76
|
+
Content-Type:
|
77
|
+
- application/json;charset=UTF-8
|
78
|
+
Transfer-Encoding:
|
79
|
+
- chunked
|
80
|
+
body:
|
81
|
+
encoding: ASCII-8BIT
|
82
|
+
string: '{"id":"0031a000003Gm5NAAS","success":true,"errors":[]}'
|
83
|
+
http_version:
|
84
|
+
recorded_at: Tue, 12 May 2015 19:57:16 GMT
|
85
|
+
- request:
|
86
|
+
method: post
|
87
|
+
uri: https://<host>/services/data/v26.0/sobjects/CustomObject__c
|
88
|
+
body:
|
89
|
+
encoding: UTF-8
|
90
|
+
string: '{"Friend__c":"0031a000003Gm5NAAS"}'
|
91
|
+
headers:
|
92
|
+
User-Agent:
|
93
|
+
- Faraday v0.9.1
|
94
|
+
Content-Type:
|
95
|
+
- application/json
|
96
|
+
Authorization:
|
97
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
98
|
+
Accept-Encoding:
|
99
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
100
|
+
Accept:
|
101
|
+
- "*/*"
|
102
|
+
response:
|
103
|
+
status:
|
104
|
+
code: 201
|
105
|
+
message: Created
|
106
|
+
headers:
|
107
|
+
Date:
|
108
|
+
- Tue, 12 May 2015 19:57:17 GMT
|
109
|
+
Set-Cookie:
|
110
|
+
- BrowserId=4lHsZnLEReGCcTNe30pcuA;Path=/;Domain=.salesforce.com;Expires=Sat,
|
111
|
+
11-Jul-2015 19:57:17 GMT
|
112
|
+
Expires:
|
113
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
114
|
+
Sforce-Limit-Info:
|
115
|
+
- api-usage=2/15000
|
116
|
+
Location:
|
117
|
+
- "/services/data/v26.0/sobjects/CustomObject__c/a001a000001ZKKDAA4"
|
118
|
+
Content-Type:
|
119
|
+
- application/json;charset=UTF-8
|
120
|
+
Transfer-Encoding:
|
121
|
+
- chunked
|
122
|
+
body:
|
123
|
+
encoding: ASCII-8BIT
|
124
|
+
string: '{"id":"a001a000001ZKKDAA4","success":true,"errors":[]}'
|
125
|
+
http_version:
|
126
|
+
recorded_at: Tue, 12 May 2015 19:57:17 GMT
|
127
|
+
- request:
|
128
|
+
method: get
|
129
|
+
uri: https://<host>/services/data/v26.0/query?q=select%20Id,%20SystemModstamp,%20Name,%20Example_Field__c,%20Friend__c%20from%20CustomObject__c%20where%20Id%20=%20%27a001a000001ZKKDAA4%27
|
130
|
+
body:
|
131
|
+
encoding: US-ASCII
|
132
|
+
string: ''
|
133
|
+
headers:
|
134
|
+
User-Agent:
|
135
|
+
- Faraday v0.9.1
|
136
|
+
Authorization:
|
137
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
138
|
+
Accept-Encoding:
|
139
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
140
|
+
Accept:
|
141
|
+
- "*/*"
|
142
|
+
response:
|
143
|
+
status:
|
144
|
+
code: 200
|
145
|
+
message: OK
|
146
|
+
headers:
|
147
|
+
Date:
|
148
|
+
- Tue, 12 May 2015 19:57:18 GMT
|
149
|
+
Set-Cookie:
|
150
|
+
- BrowserId=cpODyp_6RtSVX3OwT0Rm3Q;Path=/;Domain=.salesforce.com;Expires=Sat,
|
151
|
+
11-Jul-2015 19:57:18 GMT
|
152
|
+
Expires:
|
153
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
154
|
+
Sforce-Limit-Info:
|
155
|
+
- api-usage=1/15000
|
156
|
+
Content-Type:
|
157
|
+
- application/json;charset=UTF-8
|
158
|
+
Transfer-Encoding:
|
159
|
+
- chunked
|
160
|
+
body:
|
161
|
+
encoding: ASCII-8BIT
|
162
|
+
string: '{"totalSize":1,"done":true,"records":[{"attributes":{"type":"CustomObject__c","url":"/services/data/v26.0/sobjects/CustomObject__c/a001a000001ZKKDAA4"},"Id":"a001a000001ZKKDAA4","SystemModstamp":"2015-05-12T19:57:17.000+0000","Name":"a001a000001ZKKD","Example_Field__c":null,"Friend__c":"0031a000003Gm5NAAS"}]}'
|
163
|
+
http_version:
|
164
|
+
recorded_at: Tue, 12 May 2015 19:57:18 GMT
|
165
|
+
- request:
|
166
|
+
method: delete
|
167
|
+
uri: https://<host>/services/data/v26.0/sobjects/Contact/0031a000003Gm5NAAS
|
168
|
+
body:
|
169
|
+
encoding: US-ASCII
|
170
|
+
string: ''
|
171
|
+
headers:
|
172
|
+
User-Agent:
|
173
|
+
- Faraday v0.9.1
|
174
|
+
Authorization:
|
175
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
176
|
+
Accept-Encoding:
|
177
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
178
|
+
Accept:
|
179
|
+
- "*/*"
|
180
|
+
response:
|
181
|
+
status:
|
182
|
+
code: 204
|
183
|
+
message: No Content
|
184
|
+
headers:
|
185
|
+
Date:
|
186
|
+
- Tue, 12 May 2015 19:57:19 GMT
|
187
|
+
Set-Cookie:
|
188
|
+
- BrowserId=3VOrxur8Rvq-ronZBZbAYw;Path=/;Domain=.salesforce.com;Expires=Sat,
|
189
|
+
11-Jul-2015 19:57:19 GMT
|
190
|
+
Expires:
|
191
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
192
|
+
Sforce-Limit-Info:
|
193
|
+
- api-usage=3/15000
|
194
|
+
body:
|
195
|
+
encoding: UTF-8
|
196
|
+
string: ''
|
197
|
+
http_version:
|
198
|
+
recorded_at: Tue, 12 May 2015 19:57:19 GMT
|
199
|
+
- request:
|
200
|
+
method: delete
|
201
|
+
uri: https://<host>/services/data/v26.0/sobjects/CustomObject__c/a001a000001ZKKDAA4
|
202
|
+
body:
|
203
|
+
encoding: US-ASCII
|
204
|
+
string: ''
|
205
|
+
headers:
|
206
|
+
User-Agent:
|
207
|
+
- Faraday v0.9.1
|
208
|
+
Authorization:
|
209
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
210
|
+
Accept-Encoding:
|
211
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
212
|
+
Accept:
|
213
|
+
- "*/*"
|
214
|
+
response:
|
215
|
+
status:
|
216
|
+
code: 204
|
217
|
+
message: No Content
|
218
|
+
headers:
|
219
|
+
Date:
|
220
|
+
- Tue, 12 May 2015 19:57:20 GMT
|
221
|
+
Set-Cookie:
|
222
|
+
- BrowserId=JBvgCXUUQE6C-I39j-qI9Q;Path=/;Domain=.salesforce.com;Expires=Sat,
|
223
|
+
11-Jul-2015 19:57:20 GMT
|
224
|
+
Expires:
|
225
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
226
|
+
Sforce-Limit-Info:
|
227
|
+
- api-usage=4/15000
|
228
|
+
body:
|
229
|
+
encoding: UTF-8
|
230
|
+
string: ''
|
231
|
+
http_version:
|
232
|
+
recorded_at: Tue, 12 May 2015 19:57:20 GMT
|
233
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,158 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://<host>/services/oauth2/token
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: grant_type=password&client_id=<client_id>&client_secret=<client_secret>&username=<username>&password=<password><security_token>
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.1
|
12
|
+
Content-Type:
|
13
|
+
- application/x-www-form-urlencoded
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Date:
|
24
|
+
- Tue, 12 May 2015 19:56:59 GMT
|
25
|
+
Set-Cookie:
|
26
|
+
- BrowserId=yusXRkc8QSyB7IvrQnLLOA;Path=/;Domain=.salesforce.com;Expires=Sat,
|
27
|
+
11-Jul-2015 19:56:59 GMT
|
28
|
+
Expires:
|
29
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
30
|
+
Pragma:
|
31
|
+
- no-cache
|
32
|
+
Cache-Control:
|
33
|
+
- no-cache, no-store
|
34
|
+
Content-Type:
|
35
|
+
- application/json;charset=UTF-8
|
36
|
+
Transfer-Encoding:
|
37
|
+
- chunked
|
38
|
+
body:
|
39
|
+
encoding: ASCII-8BIT
|
40
|
+
string: '{"id":"https://login.salesforce.com/id/00D1a000000H3O9EAK/0051a000000UGT8AAO","issued_at":"1431460619986","token_type":"Bearer","instance_url":"https://<host>","signature":"u64BZdZBkpV7s2sYs1cc+mLttOxfG+RQh+VA+afErCc=","access_token":"00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM"}'
|
41
|
+
http_version:
|
42
|
+
recorded_at: Tue, 12 May 2015 19:56:59 GMT
|
43
|
+
- request:
|
44
|
+
method: post
|
45
|
+
uri: https://<host>/services/data/v26.0/sobjects/CustomObject__c
|
46
|
+
body:
|
47
|
+
encoding: UTF-8
|
48
|
+
string: '{"Name":"Sample object"}'
|
49
|
+
headers:
|
50
|
+
User-Agent:
|
51
|
+
- Faraday v0.9.1
|
52
|
+
Content-Type:
|
53
|
+
- application/json
|
54
|
+
Authorization:
|
55
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
56
|
+
Accept-Encoding:
|
57
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
58
|
+
Accept:
|
59
|
+
- "*/*"
|
60
|
+
response:
|
61
|
+
status:
|
62
|
+
code: 201
|
63
|
+
message: Created
|
64
|
+
headers:
|
65
|
+
Date:
|
66
|
+
- Tue, 12 May 2015 19:57:00 GMT
|
67
|
+
Set-Cookie:
|
68
|
+
- BrowserId=czn8MSKAQYCWpily8DabbA;Path=/;Domain=.salesforce.com;Expires=Sat,
|
69
|
+
11-Jul-2015 19:57:00 GMT
|
70
|
+
Expires:
|
71
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
72
|
+
Sforce-Limit-Info:
|
73
|
+
- api-usage=1/15000
|
74
|
+
Location:
|
75
|
+
- "/services/data/v26.0/sobjects/CustomObject__c/a001a000001ZKK3AAO"
|
76
|
+
Content-Type:
|
77
|
+
- application/json;charset=UTF-8
|
78
|
+
Transfer-Encoding:
|
79
|
+
- chunked
|
80
|
+
body:
|
81
|
+
encoding: ASCII-8BIT
|
82
|
+
string: '{"id":"a001a000001ZKK3AAO","success":true,"errors":[]}'
|
83
|
+
http_version:
|
84
|
+
recorded_at: Tue, 12 May 2015 19:57:01 GMT
|
85
|
+
- request:
|
86
|
+
method: get
|
87
|
+
uri: https://<host>/services/data/v26.0/query?q=select%20Id,%20SystemModstamp,%20Name,%20Example_Field__c%20from%20CustomObject__c%20where%20Id%20=%20%27a001a000001ZKK3AAO%27
|
88
|
+
body:
|
89
|
+
encoding: US-ASCII
|
90
|
+
string: ''
|
91
|
+
headers:
|
92
|
+
User-Agent:
|
93
|
+
- Faraday v0.9.1
|
94
|
+
Authorization:
|
95
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
96
|
+
Accept-Encoding:
|
97
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
98
|
+
Accept:
|
99
|
+
- "*/*"
|
100
|
+
response:
|
101
|
+
status:
|
102
|
+
code: 200
|
103
|
+
message: OK
|
104
|
+
headers:
|
105
|
+
Date:
|
106
|
+
- Tue, 12 May 2015 19:57:02 GMT
|
107
|
+
Set-Cookie:
|
108
|
+
- BrowserId=iG1exjXpRjOfCoOwN3IvHw;Path=/;Domain=.salesforce.com;Expires=Sat,
|
109
|
+
11-Jul-2015 19:57:02 GMT
|
110
|
+
Expires:
|
111
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
112
|
+
Sforce-Limit-Info:
|
113
|
+
- api-usage=1/15000
|
114
|
+
Content-Type:
|
115
|
+
- application/json;charset=UTF-8
|
116
|
+
Transfer-Encoding:
|
117
|
+
- chunked
|
118
|
+
body:
|
119
|
+
encoding: ASCII-8BIT
|
120
|
+
string: '{"totalSize":1,"done":true,"records":[{"attributes":{"type":"CustomObject__c","url":"/services/data/v26.0/sobjects/CustomObject__c/a001a000001ZKK3AAO"},"Id":"a001a000001ZKK3AAO","SystemModstamp":"2015-05-12T19:57:01.000+0000","Name":"Sample
|
121
|
+
object","Example_Field__c":null}]}'
|
122
|
+
http_version:
|
123
|
+
recorded_at: Tue, 12 May 2015 19:57:02 GMT
|
124
|
+
- request:
|
125
|
+
method: delete
|
126
|
+
uri: https://<host>/services/data/v26.0/sobjects/CustomObject__c/a001a000001ZKK3AAO
|
127
|
+
body:
|
128
|
+
encoding: US-ASCII
|
129
|
+
string: ''
|
130
|
+
headers:
|
131
|
+
User-Agent:
|
132
|
+
- Faraday v0.9.1
|
133
|
+
Authorization:
|
134
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
135
|
+
Accept-Encoding:
|
136
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
137
|
+
Accept:
|
138
|
+
- "*/*"
|
139
|
+
response:
|
140
|
+
status:
|
141
|
+
code: 204
|
142
|
+
message: No Content
|
143
|
+
headers:
|
144
|
+
Date:
|
145
|
+
- Tue, 12 May 2015 19:57:03 GMT
|
146
|
+
Set-Cookie:
|
147
|
+
- BrowserId=zPNjjlJwT5y6BR4og2QjtA;Path=/;Domain=.salesforce.com;Expires=Sat,
|
148
|
+
11-Jul-2015 19:57:03 GMT
|
149
|
+
Expires:
|
150
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
151
|
+
Sforce-Limit-Info:
|
152
|
+
- api-usage=1/15000
|
153
|
+
body:
|
154
|
+
encoding: UTF-8
|
155
|
+
string: ''
|
156
|
+
http_version:
|
157
|
+
recorded_at: Tue, 12 May 2015 19:57:03 GMT
|
158
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,233 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://<host>/services/oauth2/token
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: grant_type=password&client_id=<client_id>&client_secret=<client_secret>&username=<username>&password=<password><security_token>
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.1
|
12
|
+
Content-Type:
|
13
|
+
- application/x-www-form-urlencoded
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Date:
|
24
|
+
- Tue, 12 May 2015 19:57:06 GMT
|
25
|
+
Set-Cookie:
|
26
|
+
- BrowserId=NUhYBDtmTYugORuK-TH2EA;Path=/;Domain=.salesforce.com;Expires=Sat,
|
27
|
+
11-Jul-2015 19:57:06 GMT
|
28
|
+
Expires:
|
29
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
30
|
+
Pragma:
|
31
|
+
- no-cache
|
32
|
+
Cache-Control:
|
33
|
+
- no-cache, no-store
|
34
|
+
Content-Type:
|
35
|
+
- application/json;charset=UTF-8
|
36
|
+
Transfer-Encoding:
|
37
|
+
- chunked
|
38
|
+
body:
|
39
|
+
encoding: ASCII-8BIT
|
40
|
+
string: '{"id":"https://login.salesforce.com/id/00D1a000000H3O9EAK/0051a000000UGT8AAO","issued_at":"1431460626374","token_type":"Bearer","instance_url":"https://<host>","signature":"1Zzf/BDRxmeaZ/+eIrifZJcG35w/MfK2z4CME5hYJa8=","access_token":"00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM"}'
|
41
|
+
http_version:
|
42
|
+
recorded_at: Tue, 12 May 2015 19:57:06 GMT
|
43
|
+
- request:
|
44
|
+
method: post
|
45
|
+
uri: https://<host>/services/data/v26.0/sobjects/Contact
|
46
|
+
body:
|
47
|
+
encoding: UTF-8
|
48
|
+
string: '{"Email":"somebody@example.com","LastName":"Somebody"}'
|
49
|
+
headers:
|
50
|
+
User-Agent:
|
51
|
+
- Faraday v0.9.1
|
52
|
+
Content-Type:
|
53
|
+
- application/json
|
54
|
+
Authorization:
|
55
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
56
|
+
Accept-Encoding:
|
57
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
58
|
+
Accept:
|
59
|
+
- "*/*"
|
60
|
+
response:
|
61
|
+
status:
|
62
|
+
code: 201
|
63
|
+
message: Created
|
64
|
+
headers:
|
65
|
+
Date:
|
66
|
+
- Tue, 12 May 2015 19:57:07 GMT
|
67
|
+
Set-Cookie:
|
68
|
+
- BrowserId=oglbfN3hRIOSsxoVd7t9Xg;Path=/;Domain=.salesforce.com;Expires=Sat,
|
69
|
+
11-Jul-2015 19:57:07 GMT
|
70
|
+
Expires:
|
71
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
72
|
+
Sforce-Limit-Info:
|
73
|
+
- api-usage=1/15000
|
74
|
+
Location:
|
75
|
+
- "/services/data/v26.0/sobjects/Contact/0031a000003Gm5IAAS"
|
76
|
+
Content-Type:
|
77
|
+
- application/json;charset=UTF-8
|
78
|
+
Transfer-Encoding:
|
79
|
+
- chunked
|
80
|
+
body:
|
81
|
+
encoding: ASCII-8BIT
|
82
|
+
string: '{"id":"0031a000003Gm5IAAS","success":true,"errors":[]}'
|
83
|
+
http_version:
|
84
|
+
recorded_at: Tue, 12 May 2015 19:57:08 GMT
|
85
|
+
- request:
|
86
|
+
method: post
|
87
|
+
uri: https://<host>/services/data/v26.0/sobjects/CustomObject__c
|
88
|
+
body:
|
89
|
+
encoding: UTF-8
|
90
|
+
string: '{"Friend__c":"0031a000003Gm5IAAS"}'
|
91
|
+
headers:
|
92
|
+
User-Agent:
|
93
|
+
- Faraday v0.9.1
|
94
|
+
Content-Type:
|
95
|
+
- application/json
|
96
|
+
Authorization:
|
97
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
98
|
+
Accept-Encoding:
|
99
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
100
|
+
Accept:
|
101
|
+
- "*/*"
|
102
|
+
response:
|
103
|
+
status:
|
104
|
+
code: 201
|
105
|
+
message: Created
|
106
|
+
headers:
|
107
|
+
Date:
|
108
|
+
- Tue, 12 May 2015 19:57:08 GMT
|
109
|
+
Set-Cookie:
|
110
|
+
- BrowserId=rDu3h6a4QzCJ01BNom8m-A;Path=/;Domain=.salesforce.com;Expires=Sat,
|
111
|
+
11-Jul-2015 19:57:08 GMT
|
112
|
+
Expires:
|
113
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
114
|
+
Sforce-Limit-Info:
|
115
|
+
- api-usage=2/15000
|
116
|
+
Location:
|
117
|
+
- "/services/data/v26.0/sobjects/CustomObject__c/a001a000001ZKK8AAO"
|
118
|
+
Content-Type:
|
119
|
+
- application/json;charset=UTF-8
|
120
|
+
Transfer-Encoding:
|
121
|
+
- chunked
|
122
|
+
body:
|
123
|
+
encoding: ASCII-8BIT
|
124
|
+
string: '{"id":"a001a000001ZKK8AAO","success":true,"errors":[]}'
|
125
|
+
http_version:
|
126
|
+
recorded_at: Tue, 12 May 2015 19:57:09 GMT
|
127
|
+
- request:
|
128
|
+
method: get
|
129
|
+
uri: https://<host>/services/data/v26.0/query?q=select%20Id,%20SystemModstamp,%20Email%20from%20Contact%20where%20Id%20=%20%270031a000003Gm5IAAS%27
|
130
|
+
body:
|
131
|
+
encoding: US-ASCII
|
132
|
+
string: ''
|
133
|
+
headers:
|
134
|
+
User-Agent:
|
135
|
+
- Faraday v0.9.1
|
136
|
+
Authorization:
|
137
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
138
|
+
Accept-Encoding:
|
139
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
140
|
+
Accept:
|
141
|
+
- "*/*"
|
142
|
+
response:
|
143
|
+
status:
|
144
|
+
code: 200
|
145
|
+
message: OK
|
146
|
+
headers:
|
147
|
+
Date:
|
148
|
+
- Tue, 12 May 2015 19:57:10 GMT
|
149
|
+
Set-Cookie:
|
150
|
+
- BrowserId=bzTtVerbQeqmUsX-EWlJDQ;Path=/;Domain=.salesforce.com;Expires=Sat,
|
151
|
+
11-Jul-2015 19:57:10 GMT
|
152
|
+
Expires:
|
153
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
154
|
+
Sforce-Limit-Info:
|
155
|
+
- api-usage=1/15000
|
156
|
+
Content-Type:
|
157
|
+
- application/json;charset=UTF-8
|
158
|
+
Transfer-Encoding:
|
159
|
+
- chunked
|
160
|
+
body:
|
161
|
+
encoding: ASCII-8BIT
|
162
|
+
string: '{"totalSize":1,"done":true,"records":[{"attributes":{"type":"Contact","url":"/services/data/v26.0/sobjects/Contact/0031a000003Gm5IAAS"},"Id":"0031a000003Gm5IAAS","SystemModstamp":"2015-05-12T19:57:07.000+0000","Email":"somebody@example.com"}]}'
|
163
|
+
http_version:
|
164
|
+
recorded_at: Tue, 12 May 2015 19:57:10 GMT
|
165
|
+
- request:
|
166
|
+
method: delete
|
167
|
+
uri: https://<host>/services/data/v26.0/sobjects/Contact/0031a000003Gm5IAAS
|
168
|
+
body:
|
169
|
+
encoding: US-ASCII
|
170
|
+
string: ''
|
171
|
+
headers:
|
172
|
+
User-Agent:
|
173
|
+
- Faraday v0.9.1
|
174
|
+
Authorization:
|
175
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
176
|
+
Accept-Encoding:
|
177
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
178
|
+
Accept:
|
179
|
+
- "*/*"
|
180
|
+
response:
|
181
|
+
status:
|
182
|
+
code: 204
|
183
|
+
message: No Content
|
184
|
+
headers:
|
185
|
+
Date:
|
186
|
+
- Tue, 12 May 2015 19:57:11 GMT
|
187
|
+
Set-Cookie:
|
188
|
+
- BrowserId=EscE3IkGQPup41dBUcsBQQ;Path=/;Domain=.salesforce.com;Expires=Sat,
|
189
|
+
11-Jul-2015 19:57:11 GMT
|
190
|
+
Expires:
|
191
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
192
|
+
Sforce-Limit-Info:
|
193
|
+
- api-usage=2/15000
|
194
|
+
body:
|
195
|
+
encoding: UTF-8
|
196
|
+
string: ''
|
197
|
+
http_version:
|
198
|
+
recorded_at: Tue, 12 May 2015 19:57:11 GMT
|
199
|
+
- request:
|
200
|
+
method: delete
|
201
|
+
uri: https://<host>/services/data/v26.0/sobjects/CustomObject__c/a001a000001ZKK8AAO
|
202
|
+
body:
|
203
|
+
encoding: US-ASCII
|
204
|
+
string: ''
|
205
|
+
headers:
|
206
|
+
User-Agent:
|
207
|
+
- Faraday v0.9.1
|
208
|
+
Authorization:
|
209
|
+
- OAuth 00D1a000000H3O9!AQ4AQCN.EK5q2GqYClj_rprS9iFZEfWNjLjAqM_ql5mTUm5HJcVjXHY5YGQjvRhrTa_S8zNQyoc122zuBhcNpC6YS7qVpYuM
|
210
|
+
Accept-Encoding:
|
211
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
212
|
+
Accept:
|
213
|
+
- "*/*"
|
214
|
+
response:
|
215
|
+
status:
|
216
|
+
code: 204
|
217
|
+
message: No Content
|
218
|
+
headers:
|
219
|
+
Date:
|
220
|
+
- Tue, 12 May 2015 19:57:12 GMT
|
221
|
+
Set-Cookie:
|
222
|
+
- BrowserId=-PW_MFHBSiWEgiW3Lxo9GQ;Path=/;Domain=.salesforce.com;Expires=Sat,
|
223
|
+
11-Jul-2015 19:57:12 GMT
|
224
|
+
Expires:
|
225
|
+
- Thu, 01 Jan 1970 00:00:00 GMT
|
226
|
+
Sforce-Limit-Info:
|
227
|
+
- api-usage=1/15000
|
228
|
+
body:
|
229
|
+
encoding: UTF-8
|
230
|
+
string: ''
|
231
|
+
http_version:
|
232
|
+
recorded_at: Tue, 12 May 2015 19:57:12 GMT
|
233
|
+
recorded_with: VCR 2.9.3
|
@@ -97,6 +97,14 @@ describe Restforce::DB::Associations::BelongsTo do
|
|
97
97
|
expect(record.salesforce_id).to_equal user_salesforce_id
|
98
98
|
end
|
99
99
|
|
100
|
+
describe "when the association is non-building" do
|
101
|
+
let(:association) { Restforce::DB::Associations::BelongsTo.new(:user, through: "Friend__c", build: false) }
|
102
|
+
|
103
|
+
it "proceeds without constructing any records" do
|
104
|
+
expect(associated).to_be :empty?
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
100
108
|
describe "when no salesforce record is found for the association" do
|
101
109
|
let(:user_salesforce_id) { nil }
|
102
110
|
|
@@ -92,6 +92,14 @@ describe Restforce::DB::Associations::HasMany do
|
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
+
describe "when the association is non-building" do
|
96
|
+
let(:association) { Restforce::DB::Associations::HasMany.new(:details, through: "CustomObject__c", build: false) }
|
97
|
+
|
98
|
+
it "proceeds without constructing any records" do
|
99
|
+
expect(associated).to_be :empty?
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
95
103
|
describe "when no salesforce record is found for the association" do
|
96
104
|
let(:detail_salesforce_ids) { nil }
|
97
105
|
|
@@ -77,6 +77,14 @@ describe Restforce::DB::Associations::HasOne do
|
|
77
77
|
expect(object.salesforce_id).to_equal object_salesforce_id
|
78
78
|
end
|
79
79
|
|
80
|
+
describe "when the association is non-building" do
|
81
|
+
let(:association) { Restforce::DB::Associations::HasOne.new(:custom_object, through: "Friend__c", build: false) }
|
82
|
+
|
83
|
+
it "proceeds without constructing any records" do
|
84
|
+
expect(associated).to_be :empty?
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
80
88
|
describe "when no salesforce record is found for the association" do
|
81
89
|
let(:object_salesforce_id) { nil }
|
82
90
|
|
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: 1.
|
4
|
+
version: 1.3.0
|
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-05-
|
11
|
+
date: 2015-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -250,6 +250,7 @@ files:
|
|
250
250
|
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_build/when_no_salesforce_record_is_found_for_the_association/proceeds_without_constructing_any_records.yml
|
251
251
|
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_build/when_the_associated_record_has_already_been_persisted/assigns_the_existing_record.yml
|
252
252
|
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_build/when_the_associated_record_has_been_cached/uses_the_cached_record.yml
|
253
|
+
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_build/when_the_association_is_non-building/proceeds_without_constructing_any_records.yml
|
253
254
|
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_build/with_an_unrelated_association_mapping/proceeds_without_raising_an_error.yml
|
254
255
|
- test/cassettes/Restforce_DB_Associations_BelongsTo/with_an_inverse_mapping/_lookups/returns_a_hash_of_the_associated_records_lookup_IDs.yml
|
255
256
|
- 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
|
@@ -259,6 +260,7 @@ files:
|
|
259
260
|
- test/cassettes/Restforce_DB_Associations_HasMany/with_an_inverse_mapping/_build/when_no_salesforce_record_is_found_for_the_association/proceeds_without_constructing_any_records.yml
|
260
261
|
- test/cassettes/Restforce_DB_Associations_HasMany/with_an_inverse_mapping/_build/when_the_associated_records_have_alrady_been_persisted/constructs_the_association_from_the_existing_records.yml
|
261
262
|
- test/cassettes/Restforce_DB_Associations_HasMany/with_an_inverse_mapping/_build/when_the_associated_records_have_been_cached/uses_the_cached_records.yml
|
263
|
+
- test/cassettes/Restforce_DB_Associations_HasMany/with_an_inverse_mapping/_build/when_the_association_is_non-building/proceeds_without_constructing_any_records.yml
|
262
264
|
- test/cassettes/Restforce_DB_Associations_HasMany/with_an_inverse_mapping/_synced_for_/when_a_matching_associated_record_has_been_synchronized/returns_true.yml
|
263
265
|
- test/cassettes/Restforce_DB_Associations_HasMany/with_an_inverse_mapping/_synced_for_/when_no_matching_associated_record_has_been_synchronized/returns_false.yml
|
264
266
|
- test/cassettes/Restforce_DB_Associations_HasOne/with_an_inverse_mapping/_build/and_a_nested_association_on_the_associated_mapping/recursively_builds_all_associations.yml
|
@@ -266,6 +268,7 @@ files:
|
|
266
268
|
- test/cassettes/Restforce_DB_Associations_HasOne/with_an_inverse_mapping/_build/when_no_salesforce_record_is_found_for_the_association/proceeds_without_constructing_any_records.yml
|
267
269
|
- test/cassettes/Restforce_DB_Associations_HasOne/with_an_inverse_mapping/_build/when_the_associated_record_has_already_been_persisted/assigns_the_existing_record.yml
|
268
270
|
- test/cassettes/Restforce_DB_Associations_HasOne/with_an_inverse_mapping/_build/when_the_associated_record_has_been_cached/uses_the_cached_record.yml
|
271
|
+
- test/cassettes/Restforce_DB_Associations_HasOne/with_an_inverse_mapping/_build/when_the_association_is_non-building/proceeds_without_constructing_any_records.yml
|
269
272
|
- test/cassettes/Restforce_DB_Associations_HasOne/with_an_inverse_mapping/_synced_for_/when_a_matching_associated_record_has_been_synchronized/returns_true.yml
|
270
273
|
- test/cassettes/Restforce_DB_Associations_HasOne/with_an_inverse_mapping/_synced_for_/when_no_matching_associated_record_has_been_synchronized/returns_false.yml
|
271
274
|
- test/cassettes/Restforce_DB_Associator/_run/given_a_BelongsTo_association/given_another_record_for_association/when_the_Salesforce_association_is_out_of_date/updates_the_association_ID_in_Salesforce.yml
|