leap_salesforce 0.1.15 → 0.1.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.idea/.rakeTasks +1 -1
- data/.idea/leap-salesforce.iml +1 -1
- data/ChangeLog +5 -0
- data/README.md +6 -1
- data/Rakefile +1 -1
- data/lib/leap_salesforce/generator/exe_helpers.rb +2 -2
- data/lib/leap_salesforce/generator/soql_objects.rb +1 -0
- data/lib/leap_salesforce/generator/templates/Rakefile.erb +2 -2
- data/lib/leap_salesforce/generator/templates/spec/crud_eg_spec.rb.erb +1 -1
- data/lib/leap_salesforce/soql_data/soql_global_object_data.rb +22 -10
- data/lib/leap_salesforce/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0fe3d1e7b89c6a0185c21a67a0b9b96a151a09a18c313bd81d27675911d7922e
|
4
|
+
data.tar.gz: c3542d891c596f1b5f40d53362ef4184bbb1d774bc5839b8d508a8bf09646ef5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82c5fdb6d8841ad1472a42462cd316ee9db718a9bd7fdd0696506ebc751ba55fa58648f596d938fb4f19c300c2d01ab94b1cc711a2613641ce749964f0865355
|
7
|
+
data.tar.gz: 8f4ab171180697bd999dc7b159ddbde298be59977d904ef4d33e7df3b84aa8b1610706ad871a3210ff33d565617e5fd89d0b17a5f691c9f3c90f316a555d1f47
|
data/.idea/.rakeTasks
CHANGED
@@ -4,4 +4,4 @@ You are allowed to:
|
|
4
4
|
1. Remove rake task
|
5
5
|
2. Add existing rake tasks
|
6
6
|
To add existing rake tasks automatically delete this file and reload the project.
|
7
|
-
--><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build leap_salesforce-0.1.
|
7
|
+
--><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build leap_salesforce-0.1.16.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Check Salesforce OAuth2 authentication is working" fullCmd="check_oauth" taksId="check_oauth" /><RakeTask description="Remove any temporary products" fullCmd="clean" taksId="clean" /><RakeTask description="Remove any generated files" fullCmd="clobber" taksId="clobber" /><RakeTask description="Build and install leap_salesforce-0.1.16.gem into system gems" fullCmd="install" taksId="install" /><RakeGroup description="" fullCmd="" taksId="install"><RakeTask description="Build and install leap_salesforce-0.1.16.gem into system gems without network access" fullCmd="install:local" taksId="local" /></RakeGroup><RakeGroup description="" fullCmd="" taksId="leaps"><RakeTask description="Create objects, fields, enums" fullCmd="leaps:create_all" taksId="create_all" /><RakeTask description="Create Enumeration objects for picklists from Salesforce Metadata" fullCmd="leaps:create_enums" taksId="create_enums" /><RakeTask description="Create Soql Data objects" fullCmd="leaps:create_soql_objects" taksId="create_soql_objects" /></RakeGroup><RakeTask description="Create tag v0.1.16 and build and push leap_salesforce-0.1.16.gem to rubygems.org" fullCmd="release[remote]" taksId="release[remote]" /><RakeTask description="Run RSpec code examples" fullCmd="spec" taksId="spec" /><RakeTask description="Create stubs for dynamic methods so they're picked up by the IDE" fullCmd="stub" taksId="stub" /><RakeGroup description="" fullCmd="" taksId="yard"><RakeTask description="Run YARD doctests" fullCmd="yard:doctest" taksId="doctest" /></RakeGroup><RakeTask description="" fullCmd="default" taksId="default" /><RakeTask description="" fullCmd="release" taksId="release" /><RakeGroup description="" fullCmd="" taksId="release"><RakeTask description="" fullCmd="release:guard_clean" taksId="guard_clean" /><RakeTask description="" fullCmd="release:rubygem_push" taksId="rubygem_push" /><RakeTask description="" fullCmd="release:source_control_push" taksId="source_control_push" /></RakeGroup></RakeGroup></Settings>
|
data/.idea/leap-salesforce.iml
CHANGED
@@ -60,7 +60,7 @@
|
|
60
60
|
<orderEntry type="library" scope="PROVIDED" name="rspec-its (v1.3.0, RVM: ruby-2.6.0) [gem]" level="application" />
|
61
61
|
<orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.8.0, RVM: ruby-2.6.0) [gem]" level="application" />
|
62
62
|
<orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.8.0, RVM: ruby-2.6.0) [gem]" level="application" />
|
63
|
-
<orderEntry type="library" scope="PROVIDED" name="rubocop (v0.
|
63
|
+
<orderEntry type="library" scope="PROVIDED" name="rubocop (v0.74.0, RVM: ruby-2.6.0) [gem]" level="application" />
|
64
64
|
<orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.10.0, RVM: ruby-2.6.0) [gem]" level="application" />
|
65
65
|
<orderEntry type="library" scope="PROVIDED" name="rubykeyword (v0.0.4, RVM: ruby-2.6.0) [gem]" level="application" />
|
66
66
|
<orderEntry type="library" scope="PROVIDED" name="savon (v2.12.0, RVM: ruby-2.6.0) [gem]" level="application" />
|
data/ChangeLog
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
Version 0.1.16
|
2
|
+
* Bug Fix
|
3
|
+
* Fixed where ERB was not being used to interpret user on init script
|
4
|
+
* Map keys representing elements passed to `find` and `update` to use snakecase version as defined by soql_element
|
5
|
+
|
1
6
|
Version 0.1.15
|
2
7
|
* Enhancements
|
3
8
|
* Handle greater than/less than equal comparator in query
|
data/README.md
CHANGED
@@ -180,7 +180,7 @@ If we had the following `factory` for Contact
|
|
180
180
|
```ruby
|
181
181
|
FactoryBot.define do
|
182
182
|
factory :contact do
|
183
|
-
|
183
|
+
last_name { 'Test Person' }
|
184
184
|
end
|
185
185
|
end
|
186
186
|
```
|
@@ -203,7 +203,12 @@ example:
|
|
203
203
|
|
204
204
|
##### Reading entities
|
205
205
|
|
206
|
+
To retrieve an entity, the `find` method can be called on the class for the object required. For example
|
207
|
+
to obtain an object representing a contact with a last name of 'Test Person' we could do:
|
206
208
|
|
209
|
+
```ruby
|
210
|
+
@contact = Contact.find last_name: 'Test Person'
|
211
|
+
```
|
207
212
|
|
208
213
|
## Structure
|
209
214
|
|
data/Rakefile
CHANGED
@@ -38,9 +38,9 @@ module LeapSalesforce
|
|
38
38
|
def verify_oauth
|
39
39
|
LeapSalesforce.client_id = options[:client_id] || input_for('Client id (Customer Id)')
|
40
40
|
LeapSalesforce.client_secret = options[:client_secret] || STDIN.getpass('Client secret (Consumer Secret)')
|
41
|
-
LeapSalesforce.api_user = options[:username] || input_for('Salesforce username. It is ideal to start with a System admin' \
|
41
|
+
LeapSalesforce.api_user = ERB.new(options[:username] || input_for('Salesforce username. It is ideal to start with a System admin' \
|
42
42
|
' so that any necessary metadata can be read. More users can be added later. You can use ERB to make name' \
|
43
|
-
' vary according to environment (e.g., test.user@<%= LeapSalesforce.environment %>.my.company.com)')
|
43
|
+
' vary according to environment (e.g., test.user@<%= LeapSalesforce.environment %>.my.company.com)')).result(binding)
|
44
44
|
LeapSalesforce.password = options[:password] || STDIN.getpass('Password (Recommendation is that 1 password' \
|
45
45
|
' be shared across all test users to be easier to manage):')
|
46
46
|
LeapSalesforce.oauth_working?
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'rspec/core/rake_task'
|
2
|
-
require 'leap_salesforce/rake'
|
3
2
|
|
4
3
|
RSpec::Core::RakeTask.new(:spec)
|
5
4
|
|
@@ -10,4 +9,5 @@ end
|
|
10
9
|
|
11
10
|
task default: %i[check_oauth spec]
|
12
11
|
|
13
|
-
require 'leap_salesforce'
|
12
|
+
require 'leap_salesforce/rake' # Load LeapSalesforce tasks
|
13
|
+
require 'leap_salesforce' # Require basic leap salesforce files
|
@@ -11,7 +11,7 @@ RSpec.describe 'Contact CRUD' do
|
|
11
11
|
end
|
12
12
|
it 'Read contact by name' do
|
13
13
|
FactoryBot.create(:contact, first_name: uniq_value)
|
14
|
-
@contact = Contact.find(
|
14
|
+
@contact = Contact.find(first_name: uniq_value)
|
15
15
|
retrieved_first_name = @contact.first_name
|
16
16
|
expect(retrieved_first_name).to eq uniq_value
|
17
17
|
end
|
@@ -27,7 +27,7 @@ module SoqlGlobalObjectData
|
|
27
27
|
# @example Find an account with test organisation name
|
28
28
|
# my_query = "SELECT Name from Account WHERE Name = 'TEST Org 001'"
|
29
29
|
# query my_query # => "SELECT+Name+from+Account+WHERE+Name+=+'TEST+Org+001'"
|
30
|
-
# @return [
|
30
|
+
# @return [self] Exchange object from which JSON response can be obtained (i.e, with exchange.response)
|
31
31
|
def query(soql_query, wait: false)
|
32
32
|
rest_query = soql_query.gsub('%', '%25').gsub('+', '%2B').tr(' ', '+')
|
33
33
|
if wait
|
@@ -39,7 +39,7 @@ module SoqlGlobalObjectData
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
# @param [
|
42
|
+
# @param [Hash] lookup Hash representing look up performed
|
43
43
|
# @param [String] url Url to get
|
44
44
|
def data_from_url(url, lookup)
|
45
45
|
new("Id at #{url}", method: :get, suburl: url.split("v#{SoqlHandler.api_version}/").last)
|
@@ -55,11 +55,8 @@ module SoqlGlobalObjectData
|
|
55
55
|
conditional = ''
|
56
56
|
lookup.each do |key, value|
|
57
57
|
conditional_term = conditional.empty? ? 'WHERE' : 'AND'
|
58
|
-
|
59
|
-
|
60
|
-
" Must be one of #{field_names}"
|
61
|
-
end
|
62
|
-
conditional += "#{conditional_term} #{key} #{condition_for(value)} "
|
58
|
+
key_used = map_key key
|
59
|
+
conditional += "#{conditional_term} #{key_used} #{condition_for(value)} "
|
63
60
|
end
|
64
61
|
query = conditional + 'ORDER BY CreatedDate DESC NULLS FIRST'
|
65
62
|
query += " LIMIT #{limit}" if limit
|
@@ -92,7 +89,7 @@ module SoqlGlobalObjectData
|
|
92
89
|
instance_to_get
|
93
90
|
end
|
94
91
|
|
95
|
-
# @return [
|
92
|
+
# @return [self] SoqlData object that is the result of looking up id based on lookup criteria
|
96
93
|
def lookup_id(lookup)
|
97
94
|
teardown = lookup.delete(:teardown)
|
98
95
|
SoqlHandler.new("Query on #{self}").use
|
@@ -144,18 +141,18 @@ module SoqlGlobalObjectData
|
|
144
141
|
# Remove object from Salesforce with provided id
|
145
142
|
# @param [String] id Id of element to update
|
146
143
|
# @param [Hash] data Key value pairs with data to update
|
147
|
-
# @return [
|
144
|
+
# @return [self] SoqlData object representing result of API update call
|
148
145
|
def update(id, data)
|
149
146
|
must_pass = data.delete(:must_pass)
|
150
147
|
data = data.transform_values do |value|
|
151
148
|
value.is_a?(Time) ? value.salesforce_format : value
|
152
149
|
end
|
150
|
+
data.transform_keys! { |key| map_key(key) } # Map keys to valid field names
|
153
151
|
SoqlHandler.new("Update #{id}").use
|
154
152
|
|
155
153
|
update = new("Update #{self}, #{id} with '#{data}'", method: :patch,
|
156
154
|
suburl: "sobjects/#{soql_object_name}/#{id}", body: data)
|
157
155
|
update.call
|
158
|
-
|
159
156
|
return update unless must_pass
|
160
157
|
|
161
158
|
successful?
|
@@ -209,6 +206,21 @@ module SoqlGlobalObjectData
|
|
209
206
|
# rubocop:enable Metrics/MethodLength
|
210
207
|
# rubocop:enable Metrics/AbcSize
|
211
208
|
|
209
|
+
# Map key to a field name if used directly or field defined through 'soql_element'
|
210
|
+
# @param [Symbol, String] key Key to map to Table field name
|
211
|
+
# @return [String] Field name of Salesforce entity to use
|
212
|
+
def map_key(key)
|
213
|
+
if field_names.include? key.to_s
|
214
|
+
key.to_s
|
215
|
+
else
|
216
|
+
return new.send("#{key}_element") if new.respond_to?("#{key}_element")
|
217
|
+
|
218
|
+
raise LeapSalesforce::RequestError, "#{key} not in #{self}. " \
|
219
|
+
" Must be one of #{field_names} or a field name described in" \
|
220
|
+
" #{self}::FieldNames"
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
212
224
|
# Returns SOQL condition for value passed to be used in SOQL query
|
213
225
|
# @example Greater than or equal to yesterday's date
|
214
226
|
# condition_for("<=#{Time.mktime(2019,1,1)}") # => '<= 2019-01-01T00:00:00.000Z'
|