leap_salesforce 0.1.13 → 0.1.15

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: f2bdee6f535909036c914ded9bf6a3e558947795a7e2368a3cf0c9ba21901b3d
4
- data.tar.gz: 26e600cd1fab6236d251738837e19c9034e0bb2e98cbfdfa7f535c93f4899a4e
3
+ metadata.gz: a9ac3a7c96d31655ef2684afb14ba1088656bfba4bdba621d1c282163783b6a4
4
+ data.tar.gz: 5aad78509c4ef1844c58bd0dbe600f81248126e4570eec154ef0a35abe1091a4
5
5
  SHA512:
6
- metadata.gz: 47508644606e0aa2b11a6654e4369ad469ae783df0f2c777a981b97332508420112e5a0e3297d959903f4a296bc306b891f95ce85ea5dd2680f4c6fd8b2ba3dd
7
- data.tar.gz: fca8cb67769917a6542bbf27fc6047f9038d0078bd05ed1aa696f3215b45b84b114f2b87e82c66a8163432a8ac6c3aeddf0270548800f3848721bc1436f513c8
6
+ metadata.gz: 1efdda645ee1103bce00418fd65f75badfc570191a60f7f6d5b44dca2eda1d38a395c3b9f164ec4a10a8a7f980401e1a88d031663fa76ef3d1c752626d2fca10
7
+ data.tar.gz: 917b74365cc67fe2d4ec7d9ab6bb3e723c8a7a4b3cdcf2cfcdfa7f42d901d37807c689d940f7be933f764117160016e8595a54e348eb8053dc9b4bb872791f1d
data/.gitlab-ci.yml CHANGED
@@ -1,3 +1,6 @@
1
+ include:
2
+ - template: Code-Quality.gitlab-ci.yml
3
+
1
4
  image: ruby:2.5
2
5
 
3
6
  stages:
@@ -8,15 +11,13 @@ variables:
8
11
  client_id: $client_id
9
12
  client_secret: $client_secret
10
13
 
11
- before_script:
12
- - ruby -v
13
- - which ruby
14
- - gem install bundler rake
15
- - bundle install
16
-
17
14
  test:
18
15
  stage: test
19
16
  script:
17
+ - ruby -v
18
+ - which ruby
19
+ - gem install bundler rake
20
+ - bundle install
20
21
  - bundle exec rake leaps:create_soql_objects
21
22
  - bundle exec rake leaps:create_enums
22
23
  - bundle exec rake
data/.idea/.rakeTasks CHANGED
@@ -1,7 +1,7 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
2
  <Settings><!--This file was automatically generated by Ruby plugin.
3
3
  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.11.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.11.gem into system gems" fullCmd="install" taksId="install" /><RakeGroup description="" fullCmd="" taksId="install"><RakeTask description="Build and install leap_salesforce-0.1.11.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.11 and build and push leap_salesforce-0.1.11.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" /><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>
7
+ --><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build leap_salesforce-0.1.14.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.14.gem into system gems" fullCmd="install" taksId="install" /><RakeGroup description="" fullCmd="" taksId="install"><RakeTask description="Build and install leap_salesforce-0.1.14.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.14 and build and push leap_salesforce-0.1.14.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>
@@ -1,6 +1,7 @@
1
1
  <component name="ProjectDictionaryState">
2
2
  <dictionary name="iqa">
3
3
  <words>
4
+ <w>rubocop</w>
4
5
  <w>salesforce</w>
5
6
  <w>soql</w>
6
7
  <w>topoisomerase</w>
@@ -22,7 +22,7 @@
22
22
  <orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.3, RVM: ruby-2.6.0) [gem]" level="application" />
23
23
  <orderEntry type="library" scope="PROVIDED" name="domain_name (v0.5.20190701, RVM: ruby-2.6.0) [gem]" level="application" />
24
24
  <orderEntry type="library" scope="PROVIDED" name="factory_bot (v5.0.2, RVM: ruby-2.6.0) [gem]" level="application" />
25
- <orderEntry type="library" scope="PROVIDED" name="faker (v2.0.0, RVM: ruby-2.6.0) [gem]" level="application" />
25
+ <orderEntry type="library" scope="PROVIDED" name="faker (v2.1.0, RVM: ruby-2.6.0) [gem]" level="application" />
26
26
  <orderEntry type="library" scope="PROVIDED" name="gyoku (v1.3.1, RVM: ruby-2.6.0) [gem]" level="application" />
27
27
  <orderEntry type="library" scope="PROVIDED" name="hashie (v3.6.0, RVM: ruby-2.6.0) [gem]" level="application" />
28
28
  <orderEntry type="library" scope="PROVIDED" name="http-cookie (v1.0.3, RVM: ruby-2.6.0) [gem]" level="application" />
@@ -80,5 +80,7 @@
80
80
  <orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v1.6.0, RVM: ruby-2.6.0) [gem]" level="application" />
81
81
  <orderEntry type="library" scope="PROVIDED" name="wasabi (v3.5.0, RVM: ruby-2.6.0) [gem]" level="application" />
82
82
  <orderEntry type="library" scope="PROVIDED" name="xml-simple (v1.1.5, RVM: ruby-2.6.0) [gem]" level="application" />
83
+ <orderEntry type="library" scope="PROVIDED" name="yard (v0.9.19, RVM: ruby-2.6.0) [gem]" level="application" />
84
+ <orderEntry type="library" scope="PROVIDED" name="yard-doctest (v0.1.16, RVM: ruby-2.6.0) [gem]" level="application" />
83
85
  </component>
84
86
  </module>
data/ChangeLog CHANGED
@@ -1,3 +1,13 @@
1
+ Version 0.1.15
2
+ * Enhancements
3
+ * Handle greater than/less than equal comparator in query
4
+ * Fail before request is sent if querying based on a field that is not on object
5
+ * Don't wait by default for an object to appear
6
+
7
+ Version 0.1.14
8
+ * Bug Fix
9
+ * Fixed order of picklist comparison so error message shows error correctly
10
+
1
11
  Version 0.1.13
2
12
  * Bug Fix
3
13
  * Updated 'Delete' where must_pass of true was calling 'successful?' method on wrong object
data/README.md CHANGED
@@ -152,19 +152,59 @@ For example
152
152
  ```
153
153
 
154
154
  The `log` for this call will look like the following:
155
+ (Note that explanations are in ALL CAPS and line numbers have been added)
155
156
 
156
157
  ```verilog
157
- Leaps, [13:39:14] : Example Factory for 'Contact'
158
- Leaps, [13:39:14] : request body: {"FirstName":"Lewis","LastName":"Gleichner"}
159
- Leaps, [13:39:14] : RestClient.post "https://brave-otter-ttxype-dev-ed.my.salesforce.com/services/data/v45.0/sobjects/Contact", "{\"FirstName\":\"Lewis\",\"LastName\":\"Gleichner\"}", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate", "Authorization"=>"Bearer 00D2v000001eBDw!AREAQK_UWp9onsfZdv5ag5j70WIbwe_IG5tLJHKC1Ti0lpVZY0EsKcmpCE8bqTd7GtGx9WmN57PRpp06yhmfczK9TUR9rZx2", "Content-Length"=>"44", "Content-Type"=>"application/json", "User-Agent"=>"rest-client/2.0.2 (linux-gnu x86_64) ruby/2.6.0p0"
158
+ 1. Leaps, [13:39:14] : Example Factory for 'Contact'
159
+ 2. Leaps, [13:39:14] : request body: {"LastName":"Gleichner"}
160
+ 3. Leaps, [13:39:14] : RestClient.post "https://SALESFORCE_INSTANCE_URL/services/data/v45.0/sobjects/Contact", "{\"FirstName\":\"Lewis\"}", HEADERS INFO
160
161
 
161
- Leaps, [13:39:16] : # => 201 Created | application/json 71 bytes
162
+ 4. Leaps, [13:39:16] : # => 201 Created | application/json 71 bytes
162
163
 
163
- Leaps, [13:39:16] : response:
164
- headers: {:date=>"Thu, 01 Aug 2019 01:39:15 GMT", :strict_transport_security=>"max-age=31536002; includeSubDomains", :public_key_pins_report_only=>"pin-sha256=\"9n0izTnSRF+W4W4JTq51avSXkWhQB8duS2bxVLfzXsY=\"; pin-sha256=\"5kJvNEMw0KjrCAu7eXY5HZdvyCS13BbA0VJG1RSP91w=\"; pin-sha256=\"njN4rRG+22dNXAi+yb8e3UMypgzPUPHlv4+foULwl1g=\"; max-age=86400; includeSubDomains; report-uri=\"https://a.forcesslreports.com/hpkp-report/00D2v000001eBDwm\";", :expect_ct=>"max-age=86400; report-uri=\"https://a.forcesslreports.com/Expect-CT-report/00D2v000001eBDwm\";", :x_content_type_options=>"nosniff", :x_xss_protection=>"1; mode=block", :x_robots_tag=>"none", :cache_control=>"no-cache,must-revalidate,max-age=0,no-store,private", :set_cookie=>["BrowserId=DOR6nshpQC659waq6EKS3A;Path=/;Domain=.salesforce.com;Expires=Mon, 30-Sep-2019 01:39:15 GMT;Max-Age=5184000"], :expires=>"Thu, 01 Jan 1970 00:00:00 GMT", :sforce_limit_info=>"api-usage=331/15000", :location=>"/services/data/v45.0/sobjects/Contact/0032v00002qU3hvAAC", :content_type=>"application/json;charset=UTF-8", :vary=>"Accept-Encoding", :content_encoding=>"gzip", :transfer_encoding=>"chunked"}
165
- body: {"id":"0032v00002qU3hvAAC","success":true,"errors":[]}
164
+ 5. Leaps, [13:39:16] : response:
165
+ 6. headers: {:date=>"Thu, 01 Aug 2019 01:39:15 GMT", OTHER_HEADER_INFO}
166
+ 7. body: {"id":"0032v00002qU3hvAAC","success":true,"errors":[]}
166
167
  ```
167
168
 
169
+ Following is a step by step explanation of each log line:
170
+ 1. Brief description of what's being done. Creating a Contact.
171
+ 2. Parameters used in HTTP request. This will be the fields set on the object created
172
+ 3. The actual REST Post made to the Salesforce API showing the URL, payload, headers, etc
173
+ 4. A brief summary of the response. Object has been created successfully
174
+ 5. A more in depth description of the response follows in next two lines
175
+ 6. Headers of the response
176
+ 7. Body of the response
177
+
178
+ Representation of the details for created an entity can be handled much neater by `FactoryBot`.
179
+ If we had the following `factory` for Contact
180
+ ```ruby
181
+ FactoryBot.define do
182
+ factory :contact do
183
+ first_name { 'Test Person' }
184
+ end
185
+ end
186
+ ```
187
+ then we could perform the same creation of a contact with simply
188
+
189
+ ```ruby
190
+ @contact = FactoryBot.create(:contact)
191
+ ```
192
+
193
+ FactoryBot has traits, associations, after blocks for helping with creating objects with fast number
194
+ of relationships. See FactoryBot's getting started for more information and have a look at the
195
+ examples in the `spec` folder.
196
+
197
+ To create an object using a factory, the `create` method can also be used on the object itself. For
198
+ example:
199
+
200
+ ```ruby
201
+ @contact = Contact.create
202
+ ```
203
+
204
+ ##### Reading entities
205
+
206
+
207
+
168
208
  ## Structure
169
209
 
170
210
  Following is the general structure of test automation suite that uses this approach. Details may vary depending on the
data/Rakefile CHANGED
@@ -3,6 +3,8 @@
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
5
  require 'rake/clean'
6
+ require 'yard'
7
+ require 'yard/doctest/rake'
6
8
 
7
9
  require 'leap_salesforce/rake'
8
10
 
@@ -24,3 +26,11 @@ task :stub do
24
26
  require 'topoisomerase'
25
27
  Topoisomerase.create_stubs_based_on SoqlData
26
28
  end
29
+
30
+ desc 'Test examples shown in documentation'
31
+ YARD::Doctest::RakeTask.new do |task|
32
+ task.doctest_opts = %w[-v]
33
+ # task.pattern = 'lib/**/*.rb'
34
+ # TODO: Get all examples working in this way
35
+ task.pattern = 'lib/leap_salesforce/ext/string.rb'
36
+ end
@@ -30,6 +30,7 @@ It reads the Metadata from Salesforce and creates the foundation for API tests.'
30
30
  spec.add_development_dependency 'pry'
31
31
  spec.add_development_dependency 'rspec', '~> 3.0'
32
32
  spec.add_development_dependency 'topoisomerase'
33
+ spec.add_development_dependency 'yard-doctest'
33
34
  spec.add_dependency 'activerecord'
34
35
  spec.add_dependency 'colorize'
35
36
  spec.add_dependency 'factory_bot'
@@ -1,6 +1,8 @@
1
1
  module LeapSalesforce
2
2
  # Any error specific to LeapSalesforce
3
3
  class Error < StandardError; end
4
+ # Error related to handling a request
5
+ class RequestError < StandardError; end
4
6
  # Error related to handling a response
5
7
  class ResponseError < StandardError; end
6
8
  # Error related to setup of test automation suite
@@ -19,7 +19,12 @@ class String
19
19
  .humanize_numbered_string
20
20
  end
21
21
 
22
- # @return [String] If all characters were stripped out, put a placeholder 'X'. If starts with underscore remove it
22
+ # @example Remove stripped characters
23
+ # ''.handle_initial_characters # => 'X'
24
+ # @example Remove leading underscores
25
+ # '_leading'.handle_initial_characters # => 'leading'
26
+ # @return [String] If all characters were stripped out, put a placeholder 'X'.
27
+ # If starts with underscore remove it
23
28
  def handle_initial_characters
24
29
  if size.zero?
25
30
  +'X'
@@ -2,6 +2,8 @@
2
2
 
3
3
  # Module all SoqlEnums include
4
4
  module SoqlEnum
5
+ # @param [Class] object Object inheriting from SoqlData that has picklists underneath it
6
+ # @return [Array] List of picklist classes that inherit from SoqlEnum and relate to provided class
5
7
  def self.values_for(object)
6
8
  ObjectSpace.each_object(Module).select { |class_name| class_name < self && class_name.to_s.start_with?("#{object}::") }
7
9
  end
@@ -24,12 +24,11 @@ module SoqlGlobalObjectData
24
24
  # (see https://www.w3schools.com/tags/ref_urlencode.asp)
25
25
  # @param [String] soql_query String representing SOQL query
26
26
  # @param [Boolean] wait Whether to wait for record if no result returned
27
- # @example
28
- # query SELECT Name from Account WHERE Name = 'TEST Org 001'
29
- # This is converted to:
30
- # perform_query "SELECT+Name+from+Account+WHERE+Name+=+'TEST+Org+001'"
27
+ # @example Find an account with test organisation name
28
+ # my_query = "SELECT Name from Account WHERE Name = 'TEST Org 001'"
29
+ # query my_query # => "SELECT+Name+from+Account+WHERE+Name+=+'TEST+Org+001'"
31
30
  # @return [Exchange] Exchange object from which JSON response can be obtained (i.e, with exchange.response)
32
- def query(soql_query, wait: true)
31
+ def query(soql_query, wait: false)
33
32
  rest_query = soql_query.gsub('%', '%25').gsub('+', '%2B').tr(' ', '+')
34
33
  if wait
35
34
  new("SOQL Query: #{soql_query}", method: :get, suburl: "query/?q=#{rest_query}").until(timeout: 20, interval: 1) do
@@ -56,6 +55,10 @@ module SoqlGlobalObjectData
56
55
  conditional = ''
57
56
  lookup.each do |key, value|
58
57
  conditional_term = conditional.empty? ? 'WHERE' : 'AND'
58
+ unless field_names.include? key.to_s
59
+ raise LeapSalesforce::RequestError, "#{key} not in #{self}. " \
60
+ " Must be one of #{field_names}"
61
+ end
59
62
  conditional += "#{conditional_term} #{key} #{condition_for(value)} "
60
63
  end
61
64
  query = conditional + 'ORDER BY CreatedDate DESC NULLS FIRST'
@@ -73,10 +76,10 @@ module SoqlGlobalObjectData
73
76
  # Contact.find CreatedDate: "<#{10.days.ago}"
74
77
  # @param [Hash] lookup Key value pair unique to Salesforce to query for
75
78
  # @option lookup [Boolean] :teardown Whether to remove id after scenario finished
76
- # @return [SoqlData]
79
+ # @return [self] Instance of itself storing reference to found object
77
80
  def find(lookup)
78
81
  teardown = lookup.delete(:teardown)
79
- wait = lookup.delete(:wait) || true
82
+ wait = lookup.delete(:wait) || false
80
83
  SoqlHandler.new("Query on #{self}").use
81
84
  instance_to_get = if lookup.key? :Id
82
85
  new("Lookup id: #{lookup[:Id]}", method: :get, suburl: "sobjects/#{soql_object_name}/#{lookup[:Id]}")
@@ -206,25 +209,34 @@ module SoqlGlobalObjectData
206
209
  # rubocop:enable Metrics/MethodLength
207
210
  # rubocop:enable Metrics/AbcSize
208
211
 
209
- private
210
-
211
- # @todo: Cover >= condition
212
- # @param [String] value Value to search for. Certain
213
- # @return [String] Condition criteria to match value
212
+ # Returns SOQL condition for value passed to be used in SOQL query
213
+ # @example Greater than or equal to yesterday's date
214
+ # condition_for("<=#{Time.mktime(2019,1,1)}") # => '<= 2019-01-01T00:00:00.000Z'
215
+ # @param [String] value Value to search for. Certain characters modify this to be more of a complex
216
+ # check
217
+ # @return [String] Condition criteria to match value using SOQL
214
218
  def condition_for(value)
215
- operator = case value[0]
216
- when '>' then '>'
217
- when '<' then '<'
218
- when '~' then 'LIKE'
219
- else
220
- return "= '#{value}'" unless value.type_of_time?
219
+ operator, value = case value[0]
220
+ when '>', '<' then extract_comparator(value)
221
+ when '~' then ['LIKE', value[1..-1]]
222
+ else
223
+ return "= '#{value}'" unless value.type_of_time?
221
224
 
222
- return "= #{value.to_zulu_date_string}"
223
- end
225
+ return "= #{value.to_zulu_date_string}"
226
+ end
224
227
 
225
- value = value[1..-1]
226
228
  return "#{operator} #{value.to_zulu_date_string}" if value.type_of_time?
227
229
 
228
230
  "#{operator} '#{value}'"
229
231
  end
232
+
233
+ # @param [String] value Value to extract comparator for
234
+ # @return [Array] Extract of >, >, >= from string and rest of string
235
+ def extract_comparator(value)
236
+ if value[1] == '='
237
+ [value[0..1], value[2..-1]]
238
+ else
239
+ [value[0], value[1..-1]]
240
+ end
241
+ end
230
242
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module LeapSalesforce
4
4
  # @return [String] Version of leap salesforce
5
- VERSION = '0.1.13'
5
+ VERSION = '0.1.15'
6
6
  end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'leap_salesforce/ext/string'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leap_salesforce
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.1.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - IQA
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-08-01 00:00:00.000000000 Z
12
+ date: 2019-08-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -67,6 +67,20 @@ dependencies:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: yard-doctest
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
70
84
  - !ruby/object:Gem::Dependency
71
85
  name: activerecord
72
86
  requirement: !ruby/object:Gem::Requirement
@@ -303,6 +317,7 @@ files:
303
317
  - lib/leap_salesforce/users/user.rb
304
318
  - lib/leap_salesforce/users/users.rb
305
319
  - lib/leap_salesforce/version.rb
320
+ - support/doctest_helper.rb
306
321
  homepage: https://gitlab.com/leap-dojo/leap_salesforce
307
322
  licenses:
308
323
  - MIT