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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da79723306cce1184458cea71bcd195548c701f48fa3de87961d2d95becc99d4
4
- data.tar.gz: 587308a13bfd4164e27638c82ee8adc59a833165aaeb3561b26b17e944ab455e
3
+ metadata.gz: 985b2a787327d829a036c867917e750a9fcbcd6c1a06879b70b99d4ca7712ef6
4
+ data.tar.gz: 3b743a1a1f41024f5f97f1213c36949ec5f447f88ed070c593851caf74dc2ee2
5
5
  SHA512:
6
- metadata.gz: eeb1dfacd0c1812b5637c7709d34303a7e852e308f87d8c789e6993aecf9ab3261a3c90df42cdde17d49ed337b14ac5c0a00998de639fc8bd98b2617150a2a9e
7
- data.tar.gz: 0d5ca787cdebd092f3a21c1489d57b56f0236272740fe1129e945729cda776eea007f66b2e1b021a5b217db9c28f6c696fa7836f9df841cb89cdb4049239449d
6
+ metadata.gz: 97b52f1ef171e95bfaccb1564b1956d375bbdb2293b95015e87e8bcd38130d9cc46cda400330560dff5cdd23f75b8ac6f57eb3c7bce15f15ba57bb3a3a16f097
7
+ data.tar.gz: 5efd8b9a0679ac8472ae9ee8d11652c0a01c88ff51f531fbea468cf284aa9341c1a667666f6a16bf323deb183f9af8af5ce98da792f169f96d4c98484d8d3afb
@@ -1,7 +1,7 @@
1
1
  include:
2
2
  - template: Code-Quality.gitlab-ci.yml
3
3
 
4
- image: ruby:2.6
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
- - test
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
- test:
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
- - openssl aes-256-cbc -d -md md5 -in assets/server.key.enc -out assets/server.key -k $SERVER_KEY_PASSWORD
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 rspec_booster --job $CI_NODE_INDEX/$CI_NODE_TOTAL
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
@@ -6,9 +6,15 @@ soql_objects:
6
6
  - Contact
7
7
  - Document: ContentDocument
8
8
  - User:
9
- create_enum: true # Set this to false to not track enums for object
10
- - Group
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
@@ -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
- @[6](Find an object using a specific attribute specific value)
96
- @[19](Find an object using a comparator)
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Files with the format 'env.rb' should be used if
2
4
 
3
5
  Soaspec::OAuth2.debug_oauth = false # Turn this true if you need debug authentication
@@ -7,4 +7,4 @@ module LeapSalesforce
7
7
  Users.add User.new :cet, 'test.cet@brave-otter-ttxype.com'
8
8
  end
9
9
 
10
- ENV['SF_USERNAME'] = 'samuel.garratt@brave-otter-ttxype.com'
10
+ ENV['SF_USERNAME'] = 'samuel.garratt@brave-otter-ttxype.com'
@@ -56,4 +56,4 @@ module LeapSalesforce
56
56
  end
57
57
  end
58
58
 
59
- LeapSalesforce::Exe.start(ARGV)
59
+ LeapSalesforce::Exe.start(ARGV)
@@ -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
- unless entity.create_enum?
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 { |picklist| generate_picklist_file picklist }
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) { 'UNIQ FIRST NAME' }
8
- let(:updated_value) { 'New 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
- # Whether to create enumerations for object when running generation tasks. By default this is true
18
- # For some objects you may want to use them without tracking their enumerations
19
- def create_enum(set)
20
- @create_enum = set
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
- # @param [Hash, String]
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(key, username, description: nil)
20
- self.key = key
21
- self.username = 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
- # @param [Boolean] all Whether to return all users matching criteria, not just first
32
- # @return [LeapSalesforce::User, Array] A user that meets the criteria
33
- def where(filter, all: false)
34
- @all = all
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 then match_params filter
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(filter)
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
- current_user = LeapSalesforce.api_user
76
- if any? filter
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 #{filter}, using '#{current_user}'"
101
+ LeapSalesforce.logger.warn "No user found user filter #{user_filter}, using '#{LeapSalesforce.api_user}'"
83
102
  yield
84
103
  end
85
104
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module LeapSalesforce
4
4
  # @return [String] Version of leap salesforce
5
- VERSION = '0.2.23'
5
+ VERSION = '1.0.0'
6
6
  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.2.23
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: 2020-03-14 00:00:00.000000000 Z
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: []