leap_salesforce 0.2.23 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +38 -14
- data/.leap_salesforce.yml +9 -3
- data/.rubocop.yml +15 -1
- data/ChangeLog +27 -1
- data/PITCHME.md +3 -3
- data/README.md +6 -0
- data/Rakefile +18 -0
- data/config/environments/prod.rb +2 -0
- data/config/general.rb +1 -1
- data/exe/leap_salesforce +1 -1
- data/lib/leap_salesforce/ext/string.rb +9 -2
- data/lib/leap_salesforce/generator/soql_enums.rb +12 -3
- data/lib/leap_salesforce/generator/soql_objects.rb +2 -2
- data/lib/leap_salesforce/generator/templates/soql_object.rb.erb +0 -1
- data/lib/leap_salesforce/generator/templates/spec/crud_eg_spec.rb.erb +2 -2
- data/lib/leap_salesforce/leaps.rb +3 -1
- data/lib/leap_salesforce/soql_data/soql_global_object_data.rb +6 -0
- data/lib/leap_salesforce/soql_data/soql_settings.rb +4 -13
- data/lib/leap_salesforce/soql_object.rb +27 -2
- data/lib/leap_salesforce/users/user.rb +3 -3
- data/lib/leap_salesforce/users/users.rb +34 -15
- data/lib/leap_salesforce/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 985b2a787327d829a036c867917e750a9fcbcd6c1a06879b70b99d4ca7712ef6
|
4
|
+
data.tar.gz: 3b743a1a1f41024f5f97f1213c36949ec5f447f88ed070c593851caf74dc2ee2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97b52f1ef171e95bfaccb1564b1956d375bbdb2293b95015e87e8bcd38130d9cc46cda400330560dff5cdd23f75b8ac6f57eb3c7bce15f15ba57bb3a3a16f097
|
7
|
+
data.tar.gz: 5efd8b9a0679ac8472ae9ee8d11652c0a01c88ff51f531fbea468cf284aa9341c1a667666f6a16bf323deb183f9af8af5ce98da792f169f96d4c98484d8d3afb
|
data/.gitlab-ci.yml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
include:
|
2
2
|
- template: Code-Quality.gitlab-ci.yml
|
3
3
|
|
4
|
-
image: ruby:2.
|
4
|
+
image: ruby:2.7
|
5
5
|
|
6
6
|
stages:
|
7
7
|
- test
|
@@ -18,7 +18,7 @@ variables:
|
|
18
18
|
pages:
|
19
19
|
stage: deploy
|
20
20
|
dependencies:
|
21
|
-
-
|
21
|
+
- test_2.7
|
22
22
|
script:
|
23
23
|
- mv coverage/ public
|
24
24
|
artifacts:
|
@@ -600,25 +600,49 @@ pages:
|
|
600
600
|
done
|
601
601
|
}
|
602
602
|
|
603
|
-
|
603
|
+
function setup_integration_env() {
|
604
|
+
# Decrypt server key
|
605
|
+
openssl aes-256-cbc -d -md md5 -in assets/server.key.enc -out assets/server.key -k $SERVER_KEY_PASSWORD
|
606
|
+
ls -la assets
|
607
|
+
install_jq
|
608
|
+
install_salesforce_cli
|
609
|
+
# Integrated test
|
610
|
+
gem install bundler rake
|
611
|
+
bundle install
|
612
|
+
sfdx force:auth:jwt:grant --clientid "$SF_CONSUMER_KEY" --jwtkeyfile assets/server.key --username "$SF_USERNAME" --setdefaultdevhubusername --setalias HubOrg
|
613
|
+
}
|
614
|
+
|
615
|
+
test_2.6:
|
616
|
+
image: ruby:2.6
|
604
617
|
stage: test
|
618
|
+
script:
|
619
|
+
- *sfdx_helpers
|
620
|
+
- setup_integration_env
|
621
|
+
- bundle exec rake check_oauth # Check OAuth
|
622
|
+
- bundle exec rake leaps:create_soql_objects
|
623
|
+
- bundle exec rake leaps:create_enums
|
624
|
+
- bundle exec rspec
|
625
|
+
|
626
|
+
test_2.7:
|
605
627
|
script:
|
606
628
|
# Decrypt server key
|
607
629
|
- *sfdx_helpers
|
608
|
-
-
|
609
|
-
- ls -la assets
|
610
|
-
- install_jq
|
611
|
-
- install_salesforce_cli
|
612
|
-
# Integrated test
|
613
|
-
- ruby -v
|
614
|
-
- which ruby
|
615
|
-
- gem install bundler rake
|
616
|
-
- bundle install
|
617
|
-
- sfdx force:auth:jwt:grant --clientid "$SF_CONSUMER_KEY" --jwtkeyfile assets/server.key --username "$SF_USERNAME" --setdefaultdevhubusername --setalias HubOrg
|
630
|
+
- setup_integration_env
|
618
631
|
- bundle exec rake check_oauth # Check OAuth
|
619
632
|
- bundle exec rake leaps:create_soql_objects
|
620
633
|
- bundle exec rake leaps:create_enums
|
621
|
-
- bundle exec
|
634
|
+
- bundle exec rspec
|
622
635
|
artifacts:
|
623
636
|
paths:
|
624
637
|
- coverage/
|
638
|
+
|
639
|
+
test_3.0:
|
640
|
+
image: ruby:3.0
|
641
|
+
script:
|
642
|
+
# Decrypt server key
|
643
|
+
- *sfdx_helpers
|
644
|
+
- setup_integration_env
|
645
|
+
- bundle exec rake check_oauth # Check OAuth
|
646
|
+
- bundle exec rake leaps:create_soql_objects
|
647
|
+
- bundle exec rake leaps:create_enums
|
648
|
+
- bundle exec rspec
|
data/.leap_salesforce.yml
CHANGED
@@ -6,9 +6,15 @@ soql_objects:
|
|
6
6
|
- Contact
|
7
7
|
- Document: ContentDocument
|
8
8
|
- User:
|
9
|
-
create_enum:
|
10
|
-
|
9
|
+
create_enum:
|
10
|
+
exclude:
|
11
|
+
- Time
|
12
|
+
- Group:
|
13
|
+
create_enum: false # Set this to false to not track enums for object
|
11
14
|
- Broker: Broker__c
|
12
|
-
- Account
|
15
|
+
- Account:
|
16
|
+
create_enum:
|
17
|
+
exclude:
|
18
|
+
- Rating
|
13
19
|
- Attachment
|
14
20
|
- EventLogFile
|
data/.rubocop.yml
CHANGED
@@ -1,3 +1,17 @@
|
|
1
1
|
# Modifies RuboCop (Static analysis tool)
|
2
2
|
Layout/LineLength:
|
3
|
-
Max: 160
|
3
|
+
Max: 160
|
4
|
+
Layout/SpaceAroundMethodCallOperator:
|
5
|
+
Enabled: true
|
6
|
+
Lint/RaiseException:
|
7
|
+
Enabled: true
|
8
|
+
Lint/StructNewOverride:
|
9
|
+
Enabled: true
|
10
|
+
Style/ExponentialNotation:
|
11
|
+
Enabled: true
|
12
|
+
Style/HashEachMethods:
|
13
|
+
Enabled: true
|
14
|
+
Style/HashTransformKeys:
|
15
|
+
Enabled: true
|
16
|
+
Style/HashTransformValues:
|
17
|
+
Enabled: true
|
data/ChangeLog
CHANGED
@@ -1,3 +1,29 @@
|
|
1
|
+
Version 1.0.0
|
2
|
+
* Enhancement
|
3
|
+
* Disable rubocop output for pending ops when creating/fixing files
|
4
|
+
* Specify that working with Ruby 3 is a work in progress
|
5
|
+
|
6
|
+
Version 0.2.28
|
7
|
+
* Enhancement
|
8
|
+
* Make exclude method able to use class name in exclusion filter (hence easier to use)
|
9
|
+
|
10
|
+
Version 0.2.27
|
11
|
+
* Bug fix
|
12
|
+
* Patch to update deprecated `create_enum` method so it allows 1 parameter
|
13
|
+
|
14
|
+
Version 0.2.26
|
15
|
+
* Enhancement
|
16
|
+
* Create method to exclude picklists being created based on regexp in .leap_salesforce.yml
|
17
|
+
|
18
|
+
Version 0.2.25
|
19
|
+
* Enhancement
|
20
|
+
* `execute_as` user method that raises error if user not present
|
21
|
+
|
22
|
+
Version 0.2.24
|
23
|
+
* Bug fix
|
24
|
+
* Handle metadata label name that is the same name as a method on SoqlData (which one would not want overwriting)
|
25
|
+
such as 'status_code'
|
26
|
+
|
1
27
|
Version 0.2.23
|
2
28
|
* Enhancement
|
3
29
|
* Raise better error when could not find record using query
|
@@ -205,4 +231,4 @@ Version 0.1.1
|
|
205
231
|
* Suggestions for generated factory
|
206
232
|
* Begin unit tests
|
207
233
|
* Handle Macrons by ensuring they're not copied into Ruby names / Modules
|
208
|
-
* Created executable
|
234
|
+
* Created executable
|
data/PITCHME.md
CHANGED
@@ -80,7 +80,7 @@ metadata.
|
|
80
80
|
@[3](Declare what it is you're testing)
|
81
81
|
@[5](Define what 'it' is, a the object under test must do)
|
82
82
|
@[6](Create an instance of the object class - nothing sent to Salesforce yet)
|
83
|
-
@[7-8](Set the first and last name to random names)
|
83
|
+
@[4,7-8](Set the first and last name to random names)
|
84
84
|
@[9](Create the object in Salesforce by sending request via API)
|
85
85
|
@[10](Verify creation was successful)
|
86
86
|
@[11](Verify first name set as expected)
|
@@ -92,8 +92,8 @@ metadata.
|
|
92
92
|
|
93
93
|
---?code=spec/integration/query_spec.rb&lang=ruby&title=Querying entities
|
94
94
|
|
95
|
-
@[
|
96
|
-
@[
|
95
|
+
@[21](Find an object using a specific attribute specific value)
|
96
|
+
@[29-30](Find list of objects meeting condition)
|
97
97
|
|
98
98
|
---
|
99
99
|
|
data/README.md
CHANGED
@@ -258,6 +258,10 @@ This method can be used directly with the backend name. E.g, `contact[:FieldName
|
|
258
258
|
This method in turn sets a value of the `@override_parameters[:body]` variable within the entity.
|
259
259
|
The value of request body can be interrogated with `entity.request_parameters.body`.
|
260
260
|
|
261
|
+
##### Logging
|
262
|
+
|
263
|
+
By default, API traffic will be logged in a log file in a `logs` folder.
|
264
|
+
|
261
265
|
### CRUD of data
|
262
266
|
|
263
267
|
To work data in Salesforce, an object inheriting from the `SoqlData` class is always used. The idea is
|
@@ -560,3 +564,5 @@ Everyone interacting in the LeapSalesforce project’s codebases, issue trackers
|
|
560
564
|
|
561
565
|
* Presentation on this library [here](https://gitpitch.com/leap-dojo/leap_salesforce?grs=gitlab)
|
562
566
|
* Example of this library within a CI/CD pipeline [here](https://gitlab.com/iqa_public/labs/salesforce_cicd_demo)
|
567
|
+
* Using `leap_salesforce` to download event log files [here](https://gitlab.com/samuel-garratt/leap_salesforce_event_log_files)
|
568
|
+
|
data/Rakefile
CHANGED
@@ -34,3 +34,21 @@ YARD::Doctest::RakeTask.new do |task|
|
|
34
34
|
# TODO: Get all examples working in this way
|
35
35
|
task.pattern = 'lib/leap_salesforce/ext/string.rb'
|
36
36
|
end
|
37
|
+
|
38
|
+
desc 'Task to enter pry terminal and types commands using the standard library code'
|
39
|
+
task :pry do
|
40
|
+
require 'pry'
|
41
|
+
Pry.start
|
42
|
+
end
|
43
|
+
|
44
|
+
desc 'Example of cleaning up data'
|
45
|
+
task :remove_contacts do
|
46
|
+
contacts = Contact.where first_name: '!null'
|
47
|
+
puts "Deleting #{contacts.size} contacts"
|
48
|
+
contacts.each do |contact|
|
49
|
+
contact.delete
|
50
|
+
print '.'
|
51
|
+
end
|
52
|
+
contacts = Contact.where first_name: '!null'
|
53
|
+
puts "#{contacts.size} contacts left"
|
54
|
+
end
|
data/config/environments/prod.rb
CHANGED
data/config/general.rb
CHANGED
data/exe/leap_salesforce
CHANGED
@@ -6,14 +6,21 @@ require 'active_support/core_ext/string'
|
|
6
6
|
require 'date'
|
7
7
|
require 'json'
|
8
8
|
|
9
|
+
class MockHandler < Soaspec::RestHandler
|
10
|
+
base_url 'mock_url'
|
11
|
+
end
|
12
|
+
|
9
13
|
# Override string object to provide convenience methods for Strings
|
10
14
|
class String
|
11
15
|
# @return [Array] List of keywords reserved for FactoryBot
|
12
|
-
FACTORY_WORDS = ['sequence']
|
16
|
+
FACTORY_WORDS = ['sequence'].freeze
|
13
17
|
# @return [Array] List of ruby keywords. Some words are only key to FactoryBot like 'sequence'
|
14
18
|
KEYWORDS = %w[BEGIN END __ENCODING__ __END__ __FILE__ __LINE__ alias and begin break case class def defined?
|
15
19
|
do else elsif end ensure false for if in module next nil not or redo rescue retry return
|
16
20
|
self super then true undef unless until when while yield private].freeze
|
21
|
+
Soaspec.api_handler = MockHandler.new
|
22
|
+
SOQLDATA_METHODS = Exchange.new.public_methods.collect(&:to_s)
|
23
|
+
|
17
24
|
# @note This removes '?' which is allowed in a method but is not desired for automatic creation of their names
|
18
25
|
# in the way that is being used here
|
19
26
|
# @return [String] Convert string to something that would be friendly to use as in Ruby
|
@@ -112,6 +119,6 @@ class String
|
|
112
119
|
|
113
120
|
# @return [Boolean] Whether string is a Ruby keyword
|
114
121
|
def keyword?
|
115
|
-
KEYWORDS.include?(self) || FACTORY_WORDS.include?(self)
|
122
|
+
KEYWORDS.include?(self) || FACTORY_WORDS.include?(self) || SOQLDATA_METHODS.include?(self)
|
116
123
|
end
|
117
124
|
end
|
@@ -28,7 +28,10 @@ module LeapSalesforce
|
|
28
28
|
# @param [LeapSalesforce::SoqlData] entity An object representing an object in Salesforce
|
29
29
|
# Object inheriting from SoqlData that has picklists underneath it
|
30
30
|
def create_picklists_for(entity)
|
31
|
-
|
31
|
+
soql_object = LeapSalesforce.soql_objects.find { |so| so.class_name == entity.to_s }
|
32
|
+
raise "Could not find soql object for '#{entity}'" unless soql_object
|
33
|
+
|
34
|
+
unless soql_object.create_enum != false
|
32
35
|
puts "Skipping picklists for #{entity}"
|
33
36
|
return
|
34
37
|
end
|
@@ -36,7 +39,13 @@ module LeapSalesforce
|
|
36
39
|
@entity_name = entity
|
37
40
|
picklists = entity.picklists
|
38
41
|
puts "#{picklists.count} picklists found"
|
39
|
-
picklists.each
|
42
|
+
picklists.each do |picklist|
|
43
|
+
if soql_object.excludes?(picklist)
|
44
|
+
puts "Excluding picklist '#{picklist}'"
|
45
|
+
else
|
46
|
+
generate_picklist_file picklist
|
47
|
+
end
|
48
|
+
end
|
40
49
|
end
|
41
50
|
|
42
51
|
# Generate file for a picklist from it's metadata
|
@@ -61,7 +70,7 @@ module LeapSalesforce
|
|
61
70
|
|
62
71
|
# Clean up files generated for all picklists
|
63
72
|
def cleanup_files_created
|
64
|
-
`rubocop -a #{ENUM_FOLDER}`
|
73
|
+
`rubocop -a #{ENUM_FOLDER} --display-only-fail-level-offenses --enable-pending-cops`
|
65
74
|
end
|
66
75
|
end
|
67
76
|
end
|
@@ -62,8 +62,8 @@ module LeapSalesforce
|
|
62
62
|
generate_field_module
|
63
63
|
generate_factory
|
64
64
|
end
|
65
|
-
`rubocop -a #{SOQL_OBJECT_FOLDER}`
|
66
|
-
`rubocop -a #{FACTORY_FOLDER}`
|
65
|
+
`rubocop -a #{SOQL_OBJECT_FOLDER} --enable-pending-cops`
|
66
|
+
`rubocop -a #{FACTORY_FOLDER} --enable-pending-cops`
|
67
67
|
end
|
68
68
|
|
69
69
|
private
|
@@ -3,5 +3,4 @@ require_relative '<%= @field_name_file %>'
|
|
3
3
|
class <%= @soql_object.class_name %> < SoqlData
|
4
4
|
include <%= @soql_object.class_name %>::Fields
|
5
5
|
<%= "soql_object '#{@soql_object.backend_name}'" unless @soql_object.backend_name == @soql_object.class_name %>
|
6
|
-
<%= "create_enum false" if @soql_object.create_enum == false %>
|
7
6
|
end
|
@@ -4,8 +4,8 @@
|
|
4
4
|
# Depending on validation rules and mandatory fields this may or may not work
|
5
5
|
|
6
6
|
RSpec.describe 'Contact CRUD' do
|
7
|
-
let(:uniq_value) {
|
8
|
-
let(:updated_value) {
|
7
|
+
let(:uniq_value) { "UNIQ #{Faker::Name.first_name} #{Faker::Name.middle_name}" }
|
8
|
+
let(:updated_value) { "New #{Faker::Name.first_name} #{Faker::Name.neutral_first_name}" }
|
9
9
|
it 'Create using factory bot' do
|
10
10
|
@contact = FactoryBot.create(:contact)
|
11
11
|
end
|
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Create a Leaps alias to LeapSalesforce as it's faster to type.
|
2
4
|
# This will not be automatically required in case as 'Leaps' may be defined elsewhere
|
3
5
|
|
4
6
|
require 'leap_salesforce'
|
5
|
-
Leaps = LeapSalesforce
|
7
|
+
Leaps = LeapSalesforce
|
@@ -154,6 +154,12 @@ module SoqlGlobalObjectData
|
|
154
154
|
# @param [Symbol, String] name Name of accessor to refer to field/element with
|
155
155
|
# @param [String] backend_name Name of Salesforce field
|
156
156
|
def soql_element(name, backend_name)
|
157
|
+
if String::SOQLDATA_METHODS.include?(name.to_s)
|
158
|
+
LeapSalesforce.logger.warn "Cannot create metadata for '#{name}' (defined at #{caller_locations[0]})" \
|
159
|
+
' as method already defined in SoqlData'
|
160
|
+
return
|
161
|
+
end
|
162
|
+
|
157
163
|
# Either set the element (if creating a new record) or update the object
|
158
164
|
# @param [String] new_value Value to update record to
|
159
165
|
define_method("#{name}=") do |new_value|
|
@@ -14,18 +14,9 @@ module SoqlSettings
|
|
14
14
|
@soql_object_name || to_s
|
15
15
|
end
|
16
16
|
|
17
|
-
#
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
# @return [Boolean] Whether to create enum for object
|
24
|
-
def create_enum?
|
25
|
-
if @create_enum.nil?
|
26
|
-
true # True by default
|
27
|
-
else
|
28
|
-
@create_enum
|
29
|
-
end
|
17
|
+
# @deprecated Not used, setting in '.leap_salesforce.yml' controls this now
|
18
|
+
def create_enum(_set)
|
19
|
+
LeapSalesforce.logger.warn "Method 'create_enum' called when it is deprecated" \
|
20
|
+
" from #{caller_locations[0]}"
|
30
21
|
end
|
31
22
|
end
|
@@ -11,17 +11,42 @@ module LeapSalesforce
|
|
11
11
|
attr_accessor :reference
|
12
12
|
# @return [String] Description of Soql object from '.leap_salesforce' YAML
|
13
13
|
attr_accessor :description
|
14
|
-
# @return [Boolean] Whether to create enumerations for object
|
14
|
+
# @return [Boolean, Hash] Whether to create enumerations for object
|
15
15
|
attr_accessor :create_enum
|
16
16
|
|
17
17
|
# Create a representation of a Soql object from a description (usually in .leap_salesforce.yml)
|
18
|
-
# @
|
18
|
+
# @example Specific Salesforce object 'Case' to be represented
|
19
|
+
# 'Case'
|
20
|
+
# @example Represent Broker object by class with different name
|
21
|
+
# { 'Broker' => Broker__c }
|
22
|
+
# @example Represent Group object, specifying to ignore enums
|
23
|
+
# {"Group"=>nil, "create_enum"=>true} }
|
24
|
+
# @example Represent User object, specifying to ignore enum with name of Timezone
|
25
|
+
# {"User"=>nil, "create_enum"=>{"exclude"=>["Timezone"]}}
|
26
|
+
# @param [Hash, String] description
|
19
27
|
def initialize(description)
|
20
28
|
self.description = description
|
21
29
|
interpret_description
|
22
30
|
self.reference = @class_name.snakecase
|
23
31
|
end
|
24
32
|
|
33
|
+
# @param [String] picklist
|
34
|
+
# @return [Boolean] Whether picklist should be excluded from being generated
|
35
|
+
def excludes?(picklist)
|
36
|
+
if create_enum.is_a? Hash
|
37
|
+
if create_enum['exclude']
|
38
|
+
picklist_class = picklist.to_class_name
|
39
|
+
create_enum['exclude'].any? do |exclusion_list|
|
40
|
+
!picklist.to_s[Regexp.new(exclusion_list)].nil? || !picklist_class[Regexp.new(exclusion_list)].nil?
|
41
|
+
end
|
42
|
+
else
|
43
|
+
false
|
44
|
+
end
|
45
|
+
else
|
46
|
+
false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
25
50
|
private
|
26
51
|
|
27
52
|
# Set attributes based on description
|
@@ -16,9 +16,9 @@ module LeapSalesforce
|
|
16
16
|
|
17
17
|
# @param [String, Symbol] key Key used to identify a test user
|
18
18
|
# @param [String] username Name used to login with user. In email address format.
|
19
|
-
def initialize(
|
20
|
-
self.key =
|
21
|
-
self.username =
|
19
|
+
def initialize(*user_params, description: nil)
|
20
|
+
self.key = user_params[0]
|
21
|
+
self.username = user_params[1]
|
22
22
|
self.description = description
|
23
23
|
end
|
24
24
|
|
@@ -23,18 +23,31 @@ module LeapSalesforce
|
|
23
23
|
raise LeapSalesforce::UserError, "Incorrect type #{user.class} for user. Expected either " \
|
24
24
|
'type LeapSalesforce::User or Array'
|
25
25
|
end
|
26
|
+
if user[2]
|
27
|
+
desc = user[2].is_a?(Hash) ? user[2].values[0] : user[2].dup
|
28
|
+
user[2] = nil
|
29
|
+
end
|
26
30
|
|
27
|
-
@list << User.new(*user)
|
31
|
+
@list << User.new(*user, description: desc)
|
28
32
|
end
|
29
33
|
|
34
|
+
# @example Filter user by key of :admin
|
35
|
+
# where(key: :admin)
|
36
|
+
# @example Filter user by description containing Payroll
|
37
|
+
# where(description: /Payroll/)
|
38
|
+
# @example Filter user by username
|
39
|
+
# where(username: 'username@domain.com')
|
30
40
|
# @param [Symbol, Hash, String, Regexp, LeapSalesforce::User] filter Filter to find users by
|
31
|
-
# @
|
32
|
-
# @return [LeapSalesforce::User, Array] A user that meets the criteria
|
33
|
-
|
34
|
-
|
41
|
+
# @param_key [Boolean] all Whether to return all users matching criteria, not just first
|
42
|
+
# @return [LeapSalesforce::User, Array] A user that meets the criteria.
|
43
|
+
# If all is true this returns array of users
|
44
|
+
def where(filter)
|
45
|
+
@all = false
|
35
46
|
case filter
|
36
47
|
when :default then list.first # Will then use first user defined
|
37
|
-
when Hash
|
48
|
+
when Hash
|
49
|
+
@all = filter[:all] || false
|
50
|
+
match_params filter
|
38
51
|
when String then match_params(username: filter)
|
39
52
|
when Symbol then match_params(key: filter)
|
40
53
|
when Regexp then match_params(description: filter)
|
@@ -49,7 +62,7 @@ module LeapSalesforce
|
|
49
62
|
# Iterate through each user, narrowing on filter if provided
|
50
63
|
def each(filter = nil)
|
51
64
|
if filter
|
52
|
-
where(filter, all: true).each { yield }
|
65
|
+
where({**filter, all: true}).each { yield }
|
53
66
|
else
|
54
67
|
list.each { yield }
|
55
68
|
end
|
@@ -66,20 +79,26 @@ module LeapSalesforce
|
|
66
79
|
@all ? users : users.first
|
67
80
|
end
|
68
81
|
|
82
|
+
# @param [Symbol, Hash, String, Regexp, LeapSalesforce::User] filter Filter to find user by
|
83
|
+
# @return [Object] Result of block
|
84
|
+
def execute_as(filter)
|
85
|
+
current_user = LeapSalesforce.api_user
|
86
|
+
LeapSalesforce.api_user = LeapSalesforce::Users.where filter
|
87
|
+
result = yield
|
88
|
+
LeapSalesforce.api_user = current_user
|
89
|
+
result
|
90
|
+
end
|
91
|
+
|
69
92
|
# Execute block as user matching filter if that user is present
|
70
93
|
# If user is not present the current user will be used
|
71
94
|
# @return [Object] Result of block
|
72
|
-
def execute_as_if_present(
|
95
|
+
def execute_as_if_present(user_filter)
|
73
96
|
raise ArgumentError, 'Pass block to :execute_as_if_present method' unless block_given?
|
74
97
|
|
75
|
-
|
76
|
-
|
77
|
-
LeapSalesforce.api_user = LeapSalesforce::Users.where filter
|
78
|
-
result = yield
|
79
|
-
LeapSalesforce.api_user = current_user
|
80
|
-
result
|
98
|
+
if any? user_filter
|
99
|
+
execute_as(user_filter) { yield }
|
81
100
|
else
|
82
|
-
LeapSalesforce.logger.warn "No user found user filter #{
|
101
|
+
LeapSalesforce.logger.warn "No user found user filter #{user_filter}, using '#{LeapSalesforce.api_user}'"
|
83
102
|
yield
|
84
103
|
end
|
85
104
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: leap_salesforce
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- IQA
|
8
8
|
- Samuel Garratt
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-01-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -355,7 +355,7 @@ homepage: https://gitlab.com/leap-dojo/leap_salesforce
|
|
355
355
|
licenses:
|
356
356
|
- MIT
|
357
357
|
metadata: {}
|
358
|
-
post_install_message:
|
358
|
+
post_install_message:
|
359
359
|
rdoc_options: []
|
360
360
|
require_paths:
|
361
361
|
- lib
|
@@ -371,7 +371,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
371
371
|
version: '0'
|
372
372
|
requirements: []
|
373
373
|
rubygems_version: 3.0.6
|
374
|
-
signing_key:
|
374
|
+
signing_key:
|
375
375
|
specification_version: 4
|
376
376
|
summary: Helps with setting up integrated automated test frameworks against Salesforce.
|
377
377
|
test_files: []
|