salesforce-sql 0.0.1 → 0.0.3
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/.gitignore +5 -0
- data/Rakefile +18 -0
- data/lib/salesforce/sql/app.rb +69 -17
- data/lib/salesforce/sql/version.rb +1 -1
- data/lib/salesforce/sql.rb +1 -0
- 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: 1790e91d97f5e6f542dc845c22533f4c7f0d1446
|
4
|
+
data.tar.gz: aec8b677980f1d3f323ca9fc669992ffa589793c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2d4d5acdf9ce0227fd4b5a9ce7385f08c9bb413a7c072cef0719e3be059364fe721b8a7ba828e5c94576d756c08fe7a365e814706772aba8d4d0eef3d2c9f9f
|
7
|
+
data.tar.gz: 0452c8f96f46abd2d21aa1e0058650d25bce606d836bfdd45534d692b80a2ec2677222031f6058cc31082a8cb2b9bb56acbf4c4874f72088b747ae39f24a5a6f
|
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -1,2 +1,20 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
|
3
|
+
# extracted from https://github.com/grosser/project_template
|
4
|
+
rule /^version:bump:.*/ do |t|
|
5
|
+
sh "git status | grep 'nothing to commit'" # ensure we are not dirty
|
6
|
+
index = ['major', 'minor','patch'].index(t.name.split(':').last)
|
7
|
+
file = 'lib/salesforce/sql/version.rb'
|
8
|
+
|
9
|
+
version_file = File.read(file)
|
10
|
+
old_version, *version_parts = version_file.match(/(\d+)\.(\d+)\.(\d+)/).to_a
|
11
|
+
version_parts[index] = version_parts[index].to_i + 1
|
12
|
+
version_parts[2] = 0 if index < 2
|
13
|
+
version_parts[1] = 0 if index < 1
|
14
|
+
new_version = version_parts * '.'
|
15
|
+
File.open(file,'w'){|f| f.write(version_file.sub(old_version, new_version)) }
|
16
|
+
|
17
|
+
sh "bundle && git add #{file} && git commit -m 'bump version to #{new_version}'"
|
18
|
+
end
|
19
|
+
|
20
|
+
|
data/lib/salesforce/sql/app.rb
CHANGED
@@ -25,6 +25,7 @@ module Salesforce
|
|
25
25
|
'ParentId',
|
26
26
|
'OwnerId',
|
27
27
|
'CreatedById',
|
28
|
+
'SetupOwnerId',
|
28
29
|
'CreatedDate',
|
29
30
|
'LastModifiedDate',
|
30
31
|
'LastModifiedById',
|
@@ -85,12 +86,17 @@ module Salesforce
|
|
85
86
|
|
86
87
|
def delete object
|
87
88
|
|
89
|
+
count_before = self.query("Select count(Id) from #{object}").first['expr0']
|
90
|
+
|
88
91
|
query = "Select Id FROM #{object}"
|
89
92
|
bulk_delete_records = normalize_query @restforce_client.query(query)
|
90
93
|
|
91
94
|
print_debug "#{bulk_delete_records.size} #{object} records added to delete on #{self.username}"
|
92
95
|
|
93
96
|
bulk_delete object, bulk_delete_records if !bulk_delete_records.empty?
|
97
|
+
count_after = self.query("Select count(Id) from #{object}").first['expr0']
|
98
|
+
|
99
|
+
count_before - count_after
|
94
100
|
|
95
101
|
end
|
96
102
|
|
@@ -106,6 +112,8 @@ module Salesforce
|
|
106
112
|
|
107
113
|
def copy_object source:, object:, object_ids: [], ignore_fields: [], dependencies: []
|
108
114
|
|
115
|
+
count_before = self.query("Select count(Id) from #{object}").first['expr0']
|
116
|
+
|
109
117
|
# Remove well known problematic fields and merge them with user requirements:
|
110
118
|
ignore_fields = (ignore_fields + @default_ignore_fields).uniq
|
111
119
|
|
@@ -123,7 +131,7 @@ module Salesforce
|
|
123
131
|
dependencies.each do |dep|
|
124
132
|
|
125
133
|
# Export the dependency object ids from the source sandbox
|
126
|
-
dependency_ids = bulk_import_records.map{|row| row[dep[:object_fk_field]]}.sort.uniq
|
134
|
+
dependency_ids = bulk_import_records.map{|row| row[dep[:object_fk_field]]}.compact.sort.uniq
|
127
135
|
|
128
136
|
# Use those Ids to get the object records from source including the dependency_object_pk
|
129
137
|
source_object = source.query "Select Id,#{dep[:dependency_object_pk]} FROM #{dep[:dependency_object]}", dependency_ids
|
@@ -133,12 +141,46 @@ module Salesforce
|
|
133
141
|
target_object = self.query_select_in "Select Id,#{dep[:dependency_object_pk]} FROM #{dep[:dependency_object]} WHERE #{dep[:dependency_object_pk]}", dependency_object_pk_values
|
134
142
|
|
135
143
|
# Now we have source_object and target_object ids and values, we can do the mapping on bulk_import_records
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
144
|
+
bulk_import_records.map! do |record|
|
145
|
+
|
146
|
+
# If the :object_fk_field is nil, then there is no reference to map and we import the record as itis
|
147
|
+
next record if record[dep[:object_fk_field]].nil?
|
148
|
+
|
149
|
+
# Grab the source dependency item for this record using the :object_fk_field id, if the source item doesn't exist, don't insert the record
|
150
|
+
source_item = source_object.select {|row| row['Id'] == record[dep[:object_fk_field]] }
|
151
|
+
next if source_item.empty?
|
152
|
+
|
153
|
+
# Grab the target dependency item for this record using the :dependency_object_pk, if the target item doesnt exist, don't insert the record
|
154
|
+
target_item = target_object.select {|row| row[dep[:dependency_object_pk]] == source_item.first[dep[:dependency_object_pk]]}
|
155
|
+
next if target_item.empty?
|
156
|
+
|
157
|
+
# The actual mapping
|
158
|
+
record[dep[:object_fk_field]] = target_item.first['Id']
|
159
|
+
record
|
140
160
|
end
|
141
161
|
|
162
|
+
bulk_import_records.compact!
|
163
|
+
end
|
164
|
+
|
165
|
+
# If the object is an attachment, then we can't use bulk api:w
|
166
|
+
if object == "Attachment"
|
167
|
+
|
168
|
+
attachment_ignore_fields = ignore_fields.clone
|
169
|
+
attachment_ignore_fields.delete 'isPrivate'
|
170
|
+
attachment_ignore_fields.delete 'ParentId'
|
171
|
+
attachment_ignore_fields << 'BodyLength'
|
172
|
+
|
173
|
+
print_debug "Importing #{bulk_import_records.size} attachments"
|
174
|
+
|
175
|
+
bulk_import_records.each do |att|
|
176
|
+
att['Body'] = Base64::encode64(att.Body)
|
177
|
+
attachment_ignore_fields.each {|f| att.delete f}
|
178
|
+
@restforce_client.create('Attachment',att)
|
179
|
+
end
|
180
|
+
count_after = self.query("Select count(Id) from #{object}").first['expr0']
|
181
|
+
|
182
|
+
return count_after - count_before
|
183
|
+
|
142
184
|
end
|
143
185
|
|
144
186
|
# Remove ignored fields
|
@@ -152,7 +194,17 @@ module Salesforce
|
|
152
194
|
if !bulk_import_records.empty?
|
153
195
|
bulk_insert object, bulk_import_records
|
154
196
|
end
|
197
|
+
count_after = self.query("Select count(Id) from #{object}").first['expr0']
|
155
198
|
|
199
|
+
count_after - count_before
|
200
|
+
|
201
|
+
end
|
202
|
+
|
203
|
+
def insert object, records
|
204
|
+
count_before = self.query("Select count(Id) from #{object}").first['expr0']
|
205
|
+
bulk_insert object, records
|
206
|
+
count_after = self.query("Select count(Id) from #{object}").first['expr0']
|
207
|
+
count_after - count_before
|
156
208
|
end
|
157
209
|
|
158
210
|
private
|
@@ -194,19 +246,21 @@ module Salesforce
|
|
194
246
|
puts "DEBUG: #{message[0..TermInfo.screen_size.last]}" if @debug
|
195
247
|
end
|
196
248
|
|
249
|
+
|
197
250
|
def restforce_rest_login credentials
|
251
|
+
grace = 0
|
198
252
|
begin
|
199
253
|
client = Restforce.new :host => credentials[:host],
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
client.authenticate!
|
205
|
-
client
|
254
|
+
:username => credentials[:username],
|
255
|
+
:password => credentials[:password],
|
256
|
+
:client_id => credentials[:client_id],
|
257
|
+
:client_secret => credentials[:client_secret]
|
258
|
+
client.authenticate! && client
|
206
259
|
rescue => e
|
207
|
-
|
208
|
-
puts e
|
209
|
-
|
260
|
+
grace += 10
|
261
|
+
puts "INFO: Unable to login REST API, sleeping #{grace}, #{e}"
|
262
|
+
sleep grace
|
263
|
+
retry
|
210
264
|
end
|
211
265
|
end
|
212
266
|
|
@@ -215,9 +269,7 @@ module Salesforce
|
|
215
269
|
sandbox = host.match(/login/) ? nil : true
|
216
270
|
SalesforceBulk::Api.new(user,pass,sandbox)
|
217
271
|
rescue => e
|
218
|
-
puts "Error trying to login bulk API using: #{user} "
|
219
|
-
puts e
|
220
|
-
exit 1
|
272
|
+
puts "ERROR: Error trying to login bulk API using: #{user}, #{e}"
|
221
273
|
end
|
222
274
|
end
|
223
275
|
|
data/lib/salesforce/sql.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: salesforce-sql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juan Breinlinger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|