restforce-db 3.1.8 → 3.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8874f70a0cf3d3c7af7a6a9de53a5671c370167
4
- data.tar.gz: 42bc65bde75eb76c8e99e81c1953cf5cba823cac
3
+ metadata.gz: ab0eecfbe7d96562d9b473a036e8b84b95ea1394
4
+ data.tar.gz: cb384f1779f4c48d8e654affc00e205ba5a86a8f
5
5
  SHA512:
6
- metadata.gz: 5856dd8ba049126c320db5e966b5db6c3b44cbcf81ef3369e98b2a37fdcddc3543c07ce5dd4a41bb155c8cf7578a72541474e636b278c653580e60058bcb2799
7
- data.tar.gz: d9361ab68c7087ab30eb792cef71bb3f596a4e55deca9006578984fc34ebfeadbccf2926e1bf4b0b48e13af3448d649c297c4b7add2c0ca32c95fac148a63f3a
6
+ metadata.gz: d7f800c5e374fdb8b3929cd9e23e2b17d31df13d9f74181985edd502248856a1cd39104dcf6131422d19fc4d0f598dd858d71983bda9f88ec52b5aff5cccf2dc
7
+ data.tar.gz: 518570b3d2d27b7b0bf2b3a3aee7f1403eb98d6932e767aecb535f4e0a772ce8b2104674af6fa5f6105fda4ba6a90a45ef8618cdef7d1e2139bb0f9ac8b35e40
data/README.md CHANGED
@@ -252,6 +252,19 @@ The task takes several arguments, most of which are optional:
252
252
  - `end_time` (optional): The latest point in time for which records should be gathered.
253
253
  - `config` (optional): The path to the file containing your Restforce::DB credentials. If not explicitly provided, the default installation file path (see above) will be used.
254
254
 
255
+ ### Pull down missing fields
256
+
257
+ To populate existing synchronized records with data from newly-mapped fields, you can run the `populate` rake task. This will iterate through _all_ records in your database for the specified model, and populate the specified field on each record. This could potentially take a while if you have a large number of
258
+ records.
259
+
260
+ $ bundle exec rake restforce:populate[<model>,<salesforce_model>,<field>]
261
+
262
+ This task takes a handful of required arguments:
263
+
264
+ - `model`: The name of the ActiveRecord model you wish to sync. This can be any model you've defined a mapping for in your application.
265
+ - `salesforce_model`: The name of the specfic Salesforce model to which the desired field is mapped. This object type will be used as the data source.
266
+ - `field`: The name of the attribute to populate on your ActiveRecord model. Will usually correspond to a database column name.
267
+
255
268
  ### Run the daemon
256
269
 
257
270
  To actually perform this system synchronization, you'll want to run the binstub installed through the generator (see above). This will daemonize a process which loops repeatedly to continuously synchronize your database and your Salesforce account, according to the established mappings.
@@ -3,7 +3,7 @@ module Restforce
3
3
  # :nodoc:
4
4
  module DB
5
5
 
6
- VERSION = "3.1.8"
6
+ VERSION = "3.2.0"
7
7
 
8
8
  end
9
9
 
data/lib/restforce/db.rb CHANGED
@@ -84,17 +84,29 @@ module Restforce
84
84
  #
85
85
  # Returns a Restforce::Data::Client instance.
86
86
  def self.client
87
- @client ||= DB::Client.new(
88
- username: configuration.username,
89
- password: configuration.password,
90
- security_token: configuration.security_token,
91
- client_id: configuration.client_id,
92
- client_secret: configuration.client_secret,
93
- host: configuration.host,
94
- api_version: configuration.api_version,
95
- timeout: configuration.timeout,
96
- adapter: configuration.adapter,
97
- )
87
+ @client ||= begin
88
+ client = DB::Client.new(
89
+ username: configuration.username,
90
+ password: configuration.password,
91
+ security_token: configuration.security_token,
92
+ client_id: configuration.client_id,
93
+ client_secret: configuration.client_secret,
94
+ host: configuration.host,
95
+ api_version: configuration.api_version,
96
+ timeout: configuration.timeout,
97
+ adapter: configuration.adapter,
98
+ )
99
+
100
+ # NOTE: By default, the Retry middleware will catch timeout exceptions,
101
+ # and retry up to two times. For more information, see:
102
+ # https://github.com/lostisland/faraday/blob/master/lib/faraday/request/retry.rb
103
+ client.middleware.request(
104
+ :retry,
105
+ methods: [:get, :head, :options, :put, :patch, :delete],
106
+ )
107
+
108
+ client
109
+ end
98
110
  end
99
111
 
100
112
  # Public: Get the ID of the Salesforce user which is being used to access
@@ -18,6 +18,33 @@ namespace :restforce do
18
18
  end
19
19
  end
20
20
 
21
+ desc "Pull down the requested Salesforce data for the specified model"
22
+ task :populate, [:model, :salesforce_model, :field] => :environment do |_, args|
23
+ raise ArgumentError, "An ActiveRecord model name must be supplied" unless args[:model]
24
+ raise ArgumentError, "A Salesforce model name must be supplied" unless args[:salesforce_model]
25
+ raise ArgumentError, "An attribute name must be supplied" unless args[:field]
26
+
27
+ Rails.application.eager_load!
28
+
29
+ model = args[:model].constantize
30
+ field = args[:field].to_sym
31
+
32
+ mapping = Restforce::DB::Registry[model].detect do |m|
33
+ m.salesforce_model == args[:salesforce_model]
34
+ end
35
+
36
+ raise ArgumentError, "No Mapping was found between #{args[:model]} and #{args[:salesforce_model]}" unless mapping
37
+
38
+ model.where.not(mapping.lookup_column => nil).find_each do |record|
39
+ salesforce_id = record.send(mapping.lookup_column)
40
+ salesforce_instance = mapping.salesforce_record_type.find(salesforce_id)
41
+ next unless salesforce_instance
42
+
43
+ attributes = mapping.convert(model, salesforce_instance.attributes)
44
+ record.update_columns field => attributes[field]
45
+ end
46
+ end
47
+
21
48
  desc "Get the 18-character version of a 15-character Salesforce ID"
22
49
  task :convertid, [:salesforce_id] do |_, args|
23
50
  sfid = args[:salesforce_id]
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.8
4
+ version: 3.2.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-07-08 00:00:00.000000000 Z
11
+ date: 2015-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord