leap_salesforce 0.1.13 → 0.1.15

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
  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