ecoportal-api 0.7.1 → 0.8.2

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: 8071a9704b5accb61bd9db43b0bd6c8c6d6f88aee00ef80d16fd4b5522aedf3c
4
- data.tar.gz: fc42e6ea6570565a22cb52d9941ace6bcb081b42553321d552c1d1794ec0f8f9
3
+ metadata.gz: ba5ffaf73f0c065f6aa6572b5ac82132af9ee19f61692f80605ee156b29d24ee
4
+ data.tar.gz: d82d89d09d4ae1edb88a3dc01f613478e7bd5ab38184dadb7c507e53e65bae54
5
5
  SHA512:
6
- metadata.gz: 52a24b2a8f5326e92b42af2781c6a498580dfda7a16458c288b77e7ac5dea01cfa0ed619f27ea7a86d4ce27e4b004c156205a14076ac51cc06203c6abbc28820
7
- data.tar.gz: 7146daf930693399e4935f0b00645768b64e0c44a7772f0c128042ab151bf29f0598e2e357e0462af77dd423561646c98cdd350e59830bd733e9c51bc120684a
6
+ metadata.gz: f3b637bd2bc2970b7f46eb8d92edc6b83a38ef4489d6d185e4cea47d8a5e6cd774d9bf9e8712bd0d76aa9a52c770e89207f0c7af283fcb85bc1cb481d31fca10
7
+ data.tar.gz: 6a5dd4dd6fd2691971c526e79d2278a84351484a0d9ffdd93e3604392f4b59e21515255001c51016835a37506496d1d292f33c4dc69d4db7042e9c3d521721c3
data/CHANGELOG.md CHANGED
@@ -1,6 +1,83 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.8.2] - 2021-02-xx
5
+
6
+ ### Added
7
+
8
+ ### Fixed
9
+ - `Ecoportal::API::V1::Person#filter_tags=` should ignore `nil` values
10
+
11
+ ### Changed
12
+ - removed all the namespace under `Ecoportal::API::V2` as that is managed by `ecoportal-api-oozes` gem
13
+ - url: https://rubygems.org/gems/ecoportal-api-oozes
14
+ - `Ecoportal::API::V1::People.get` should return a `Person` object
15
+ - observe that it was returning the `WrappedResponse` (an `Enumerable` helper that works better when getting multiple people).
16
+
17
+ ## [0.7.5] - 2021-02-12
18
+
19
+ ### Added
20
+
21
+ ### Fixed
22
+ - `pretty_print` method was colliding with `pp` module:
23
+ - renamed to `Ecoportal::API::Common::BaseModel#print_pretty`
24
+ - renamed to `Ecoportal::API::Common::BatchReponse#print_pretty`
25
+ - renamed to `Ecoportal::API::Common::Reponse#print_pretty`
26
+ - renamed to `Ecoportal::API::Common::WrappedResponse#print_pretty`
27
+
28
+ ### Changed
29
+ - forgot to change `Ecoportal::API::VERSION` during last release
30
+
31
+ ## [0.7.4] - 2021-01-2
32
+
33
+ ### Added
34
+
35
+ ### Fixed
36
+ - changed `compact` to `compact!`:
37
+ - `Ecoportal::API::V1::Person#filter_tags=`
38
+ - `Ecoportal::API::Internal::Account#policy_group_ids=`
39
+ - `Ecoportal::API::Internal::Account#login_provider_ids=`
40
+ - `Ecoportal::API::Internal::Account#starred_ids=`
41
+
42
+ ### Changed
43
+
44
+ ## [0.7.3] - 2020-11-30
45
+
46
+ ### Added
47
+
48
+ ### Fixed
49
+ - `Ecoportal::API::V1::Person#email=`: was not showing the incorrect value in the error message
50
+ - added `compact` to remove `null` values on:
51
+ - `Ecoportal::API::V1::Person#filter_tags=`
52
+ - `Ecoportal::API::Internal::Account#policy_group_ids=`
53
+ - `Ecoportal::API::Internal::Account#login_provider_ids=`
54
+ - `Ecoportal::API::Internal::Account#starred_ids=`
55
+
56
+ ### Changed
57
+
58
+
59
+ ## [0.7.2] - 2020-10-19
60
+
61
+ ### Added
62
+ - `Ecoportal::API::V1::Person#email=`:
63
+ - do a minimum validation (no blanks in the email)
64
+ - set in lower case (as this is how it's in the server)
65
+ ### Fixed
66
+ - `Ecoportal::API::V1::People#each`: when `silent` it shouldn't print a blank line
67
+ - fixed so they return empty array `[]` when `nil`:
68
+ - `Ecoportal::API::V1::Person#filter_tags`
69
+ - `Ecoportal::API::Internal::Account#policy_group_ids`
70
+ - `Ecoportal::API::Internal::Account#login_provider_ids`
71
+ - `Ecoportal::API::Internal::Account#starred_ids`
72
+ ### Changed
73
+ - made it so some methods the `Array` with `uniq` values:
74
+ - `Ecoportal::API::V1::Person#filter_tags=`
75
+ - `Ecoportal::API::Internal::Account#policy_group_ids=`
76
+ - made it so it only updates the keys defined in the `Hash` passed to the setter:
77
+ - `Ecoportal::API::Internal::Account#permissions_custom=`
78
+ - `Ecoportal::API::Internal::Account#preferences=`
79
+
80
+
4
81
  ## [0.7.1] - 2020-09-30
5
82
 
6
83
  ### Added
@@ -12,6 +89,10 @@ All notable changes to this project will be documented in this file.
12
89
  ## [0.7.0] - 2020-09-11
13
90
 
14
91
  ### Added
92
+ - added hook, **private** method `body_data` for child classes to define behaviour on `response.body` to
93
+ - `Ecoportal::API::V1::People`
94
+ - `Ecoportal::API::Common::BatchOperation`
95
+
15
96
  ### Changed
16
97
  - `Ecoportal::API::Internal::Permissions`: **update for new abilities of ecoPortal release `1.5.2`**
17
98
  - decoupled abilities: `person_core` into `person_core_create`, `person_core_edit`
@@ -13,6 +13,8 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = "https://www.ecoportal.com"
14
14
  spec.licenses = %w[MIT]
15
15
 
16
+ spec.required_ruby_version = '>= 2.4.4'
17
+
16
18
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
19
  f.match(%r{^(test|spec|features)/})
18
20
  end
@@ -20,13 +22,13 @@ Gem::Specification.new do |spec|
20
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
23
  spec.require_paths = ["lib"]
22
24
 
23
- spec.add_development_dependency "bundler", "~> 2.1", ">= 2.1.3"
24
- spec.add_development_dependency "rake", "~> 12.0"
25
- spec.add_development_dependency "rspec", "~> 3", ">= 3.9"
26
- spec.add_development_dependency "yard", "~> 0.9", ">= 0.9.18"
27
- spec.add_development_dependency "redcarpet", "~> 3.5", ">= 3.5.0"
28
- spec.add_development_dependency "pry" , "~> 0.13"
25
+ spec.add_development_dependency "bundler", ">= 2.2.11", "< 2.3"
26
+ spec.add_development_dependency "rspec", ">= 3.10.0", "< 3.11"
27
+ spec.add_development_dependency "rake", ">= 13.0.3", "< 13.1"
28
+ spec.add_development_dependency "yard", ">= 0.9.26", "< 0.10"
29
+ spec.add_development_dependency "redcarpet", ">= 3.5.1", "< 3.6"
30
+ spec.add_development_dependency "pry" , "~> 0.14"
29
31
 
30
- spec.add_dependency 'http', '~> 3'
32
+ spec.add_dependency 'http', '~> 4.4.1', "< 5"
31
33
  spec.add_dependency 'hash-polyfill', '~> 0'
32
34
  end
@@ -108,7 +108,7 @@ module Ecoportal
108
108
  end
109
109
  end
110
110
 
111
- def pretty_print
111
+ def print_pretty
112
112
  puts JSON.pretty_generate(as_json)
113
113
  self
114
114
  end
@@ -27,7 +27,7 @@ module Ecoportal
27
27
 
28
28
  log(:info) { "Processing batch responses" }
29
29
 
30
- response.body.each.with_index do |subresponse, idx|
30
+ body_data(response.body).each.with_index do |subresponse, idx|
31
31
  callback = @operations[idx][:callback]
32
32
  status = subresponse["status"]
33
33
  body = subresponse["response"]
@@ -97,6 +97,12 @@ module Ecoportal
97
97
 
98
98
  private
99
99
 
100
+ # Hook for other api versions to obtain the raw data of a response
101
+ # @note this was introduced to allow `v2` to reuse this class
102
+ def body_data(body)
103
+ body
104
+ end
105
+
100
106
  def log_batch_response(operation, response)
101
107
  level = response.success?? :debug : :warn
102
108
  log(:info) { "BATCH #{operation[:method]} #{operation[:path]}" }
@@ -21,9 +21,9 @@ module Ecoportal
21
21
  end
22
22
  end
23
23
 
24
- def pretty_print
24
+ def print_pretty
25
25
  if success?
26
- each(&:pretty_print)
26
+ each(&:print_pretty)
27
27
  else
28
28
  puts "Request failed."
29
29
  end
@@ -119,11 +119,18 @@ module Ecoportal
119
119
  Ecoportal::API::Common::Response.new(response)
120
120
  end
121
121
 
122
- # Creates a HTTP object adding the `X-ApiKey` param to the header.
122
+ # Creates a HTTP object adding the `X-ApiKey` or `X-ECOPORTAL-API-KEY` param to the header, depending on the API version.
123
123
  # @note It configures HTTP so it only allows body data in json format.
124
124
  # @return [HTTP] HTTP object.
125
125
  def base_request
126
- @base_request ||= HTTP.headers("X-ApiKey" => @api_key).accept(:json)
126
+ @base_request ||= begin
127
+ case @version
128
+ when "v2"
129
+ HTTP.headers("X-ECOPORTAL-API-KEY" => @api_key).accept(:json)
130
+ else
131
+ HTTP.headers("X-ApiKey" => @api_key).accept(:json)
132
+ end
133
+ end
127
134
  end
128
135
 
129
136
  # Full URl builder of the request
@@ -20,7 +20,7 @@ module Ecoportal
20
20
  @status.success?
21
21
  end
22
22
 
23
- def pretty_print
23
+ def print_pretty
24
24
  puts "Status: #{@status.code}"
25
25
  puts "Body:"
26
26
  puts JSON.pretty_generate(@body)
@@ -40,9 +40,9 @@ module Ecoportal
40
40
  response.success?
41
41
  end
42
42
 
43
- def pretty_print
43
+ def print_pretty
44
44
  if success?
45
- each(&:pretty_print)
45
+ each(&:print_pretty)
46
46
  else
47
47
  puts "Request failed."
48
48
  end
@@ -13,14 +13,49 @@ module Ecoportal
13
13
  embeds_one :preferences, klass: :preferences_class
14
14
 
15
15
  # Sets the `policy_group_ids`
16
+ # @note it preserves the original order
17
+ # @param value [Array<String>] the policy group ids to be set.
16
18
  def policy_group_ids=(value)
17
19
  unless value.is_a?(Array)
18
20
  raise "policy_group_ids= needs to be passed an Array, got #{value.class}"
19
21
  end
20
22
 
23
+ value.uniq!
21
24
  ini_ids = (original_doc && original_doc["policy_group_ids"]) || []
22
25
  # preserve original order to avoid false updates
23
26
  doc["policy_group_ids"] = (ini_ids & value) + (value - ini_ids)
27
+ doc["policy_group_ids"].compact
28
+ end
29
+
30
+ # @return [Array<String>] the policy group ids of this user.
31
+ def policy_group_ids
32
+ doc["policy_group_ids"] ||= []
33
+ end
34
+
35
+ # Sets the `login_provider_ids`
36
+ def login_provider_ids=(value)
37
+ unless value.is_a?(Array)
38
+ raise "login_provider_ids= needs to be passed an Array, got #{value.class}"
39
+ end
40
+ doc["login_provider_ids"] = value.compact
41
+ end
42
+
43
+ # @return [Array<String>] the login provider ids of this user.
44
+ def login_provider_ids
45
+ doc["login_provider_ids"] ||= []
46
+ end
47
+
48
+ # Sets the `starred_ids`
49
+ def starred_ids=(value)
50
+ unless value.is_a?(Array)
51
+ raise "starred_ids= needs to be passed an Array, got #{value.class}"
52
+ end
53
+ doc["starred_ids"] = value.compact
54
+ end
55
+
56
+ # @return [Array<String>] the starred page ids of this user.
57
+ def starred_ids
58
+ doc["starred_ids"] ||= []
24
59
  end
25
60
 
26
61
  # Sets the `permissions_preset`.
@@ -37,6 +72,20 @@ module Ecoportal
37
72
  self.permissions_preset.nil? ? "custom" : self.permissions_preset
38
73
  end
39
74
 
75
+ # It preserves the values of keys that are not defined in `value`.
76
+ # @param value [Hash] the abilities that you want to update.
77
+ def permissions_custom=(value)
78
+ doc["permissions_custom"] ||= {}
79
+ doc["permissions_custom"].merge!(value)
80
+ end
81
+
82
+ # It preserves the values of keys that are not defined in `value`.
83
+ # @param value [Hash] the preferences that you want to update.
84
+ def preferences=(value)
85
+ doc["preferences"] ||= {}
86
+ doc["preferences"].merge!(value)
87
+ end
88
+
40
89
  def as_json
41
90
  super.tap do |hash|
42
91
  if preset == "custom"
@@ -33,14 +33,15 @@ module Ecoportal
33
33
  def each(params: {}, silent: false, &block)
34
34
  return to_enum(:each, params: params, silent: silent) unless block
35
35
  cursor_id = nil; results = 0
36
- puts "\n"
36
+ puts "\n" unless silent
37
37
  loop do
38
38
  params.update(cursor_id: cursor_id) if cursor_id
39
39
  response = client.get("/people", params: params)
40
- raise "Request failed - Status #{response.status}: #{response.body}" unless response.success?
40
+ body = body_data(response.body)
41
+ raise "Request failed - Status #{response.status}: #{body}" unless response.success?
41
42
 
42
- unless silent || (total = response.body["total_results"]) == 0
43
- results += response.body["results"].length
43
+ unless silent || (total = body["total_results"]) == 0
44
+ results += body["results"].length
44
45
  percent = results * 100 / total
45
46
  msg = "People GET"
46
47
  msg += " (search=#{params[:q]})" if params.key?(:q)
@@ -48,10 +49,10 @@ module Ecoportal
48
49
  $stdout.flush
49
50
  end
50
51
 
51
- response.body["results"].each do |person|
52
+ body["results"].each do |person|
52
53
  yield person_class.new(person)
53
54
  end
54
- break unless (cursor_id = response.body["cursor_id"])
55
+ break unless (cursor_id = body["cursor_id"])
55
56
  end
56
57
  self
57
58
  end
@@ -70,10 +71,13 @@ module Ecoportal
70
71
  # Gets a person via api.
71
72
  # @note if the request has `success?` the returned `object.result` gives an object with that `Person`.
72
73
  # @param doc [String, Hash, Person] data containing an `id` (internal or external) of the target person.
73
- # @return [WrappedResponse] an object with the api response.
74
+ # @return [Person] the person with `id` (internal or external) contained in `doc`.
74
75
  def get(doc)
75
- response = client.get("/people/"+CGI.escape(get_id(doc)))
76
- Common::WrappedResponse.new(response, person_class)
76
+ id = get_id(doc)
77
+ response = client.get("/people/"+CGI.escape(id))
78
+ body = body_data(response.body)
79
+ return person_class.new(body) if response.success?
80
+ raise "Could not get person #{id} - Error #{reponse.status}: #{body}"
77
81
  end
78
82
 
79
83
  # Requests an update of a person via api.
@@ -107,7 +111,7 @@ module Ecoportal
107
111
  # @return [Response] an object with the api response.
108
112
  def delete(doc)
109
113
  id = get_id(doc)
110
- client.delete("/people/"+CGI.escape(id))
114
+ client.delete("/people/"+CGI.escape(id))
111
115
  end
112
116
 
113
117
  # Creates a `BatchOperation` and yields it to the given bock.
@@ -150,13 +154,13 @@ module Ecoportal
150
154
  JobStatus = Struct.new(:id, :complete?, :errored?, :progress)
151
155
  def job_status(job_id)
152
156
  response = client.get("/people/job/#{CGI.escape(job_id)}/status")
153
-
157
+ body = body_data(response.body)
154
158
  raise "Status error" unless response.success?
155
159
  JobStatus.new(
156
- response.body["id"],
157
- response.body["complete"],
158
- response.body["errored"],
159
- response.body["progress"]
160
+ body["id"],
161
+ body["complete"],
162
+ body["errored"],
163
+ body["progress"]
160
164
  )
161
165
  end
162
166
 
@@ -186,11 +190,18 @@ module Ecoportal
186
190
  job_id = nil
187
191
  client.without_response_logging do
188
192
  client.post("/people/job", data: operation.as_json).tap do |response|
189
- job_id = response.body["id"]
193
+ job_id = body_data(response.body)["id"]
190
194
  end
191
195
  end
192
196
  job_id
193
197
  end
198
+
199
+ # Hook for other api versions to obtain the raw data of a response
200
+ # @note this was introduced to allow `v2` to reuse this class
201
+ def body_data(body)
202
+ body
203
+ end
204
+
194
205
  end
195
206
  end
196
207
  end
@@ -15,6 +15,7 @@ module Ecoportal
15
15
  embeds_one :details, nullable: true, klass: :person_details_class
16
16
 
17
17
  VALID_TAG_REGEX = /^[A-Za-z0-9 &_'\/-]+$/
18
+ VALID_EMAIL_REGEX = /^[^@\s]+@[^@\s]+\.[^@\s]+$/
18
19
 
19
20
  # Gets the supervisor (`Person`) of this person, with given his `supervisor_id`.
20
21
  #
@@ -41,24 +42,39 @@ module Ecoportal
41
42
  self.supervisor_id = person&.id || person&.external_id
42
43
  end
43
44
 
45
+ # Sets the email of a person.
46
+ # @param value [String, nil] the email of this person.
47
+ def email=(value)
48
+ unless !value || value.match(VALID_EMAIL_REGEX)
49
+ raise "Invalid email #{value.inspect}"
50
+ end
51
+ doc["email"] = value&.downcase
52
+ end
53
+
44
54
  # Validates the string tags of the array, and sets the `filter_tags` property of the account.
45
- # @note all is set in upper case.
55
+ # @note all is set in upper case and preserves the original order.
46
56
  # @raise [Exception] if there was any invalid string tag.
47
57
  # @param value [Array<String>] array of tags.
48
58
  def filter_tags=(value)
49
59
  unless value.is_a?(Array)
50
60
  raise "filter_tags= needs to be passed an Array, got #{value.class}"
51
61
  end
52
- end_tags = value.map do |tag|
62
+ end_tags = value.compact.map do |tag|
53
63
  unless tag.match(VALID_TAG_REGEX)
54
64
  raise "Invalid filter tag #{tag.inspect}"
55
65
  end
56
66
  tag.upcase
57
- end
67
+ end.uniq
58
68
 
59
69
  ini_tags = (original_doc && original_doc["filter_tags"]) || []
60
70
  # preserve original order to avoid false updates
61
71
  doc["filter_tags"] = (ini_tags & end_tags) + (end_tags - ini_tags)
72
+ doc["filter_tags"].compact
73
+ end
74
+
75
+ # @return [Array<String>] the filter tags of this person.
76
+ def filter_tags
77
+ doc["filter_tags"] ||= []
62
78
  end
63
79
 
64
80
  def as_json
@@ -1,5 +1,5 @@
1
1
  module Ecoportal
2
2
  module API
3
- VERSION = "0.7.1"
3
+ VERSION = "0.8.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,137 +1,149 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecoportal-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tapio Saarinen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-30 00:00:00.000000000 Z
11
+ date: 2021-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '2.1'
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
- version: 2.1.3
19
+ version: 2.2.11
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.3'
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '2.1'
30
27
  - - ">="
31
28
  - !ruby/object:Gem::Version
32
- version: 2.1.3
29
+ version: 2.2.11
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.3'
33
33
  - !ruby/object:Gem::Dependency
34
- name: rake
34
+ name: rspec
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 3.10.0
40
+ - - "<"
38
41
  - !ruby/object:Gem::Version
39
- version: '12.0'
42
+ version: '3.11'
40
43
  type: :development
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
- - - "~>"
47
+ - - ">="
45
48
  - !ruby/object:Gem::Version
46
- version: '12.0'
49
+ version: 3.10.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '3.11'
47
53
  - !ruby/object:Gem::Dependency
48
- name: rspec
54
+ name: rake
49
55
  requirement: !ruby/object:Gem::Requirement
50
56
  requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '3'
54
57
  - - ">="
55
58
  - !ruby/object:Gem::Version
56
- version: '3.9'
59
+ version: 13.0.3
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '13.1'
57
63
  type: :development
58
64
  prerelease: false
59
65
  version_requirements: !ruby/object:Gem::Requirement
60
66
  requirements:
61
- - - "~>"
62
- - !ruby/object:Gem::Version
63
- version: '3'
64
67
  - - ">="
65
68
  - !ruby/object:Gem::Version
66
- version: '3.9'
69
+ version: 13.0.3
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '13.1'
67
73
  - !ruby/object:Gem::Dependency
68
74
  name: yard
69
75
  requirement: !ruby/object:Gem::Requirement
70
76
  requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '0.9'
74
77
  - - ">="
75
78
  - !ruby/object:Gem::Version
76
- version: 0.9.18
79
+ version: 0.9.26
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.10'
77
83
  type: :development
78
84
  prerelease: false
79
85
  version_requirements: !ruby/object:Gem::Requirement
80
86
  requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: '0.9'
84
87
  - - ">="
85
88
  - !ruby/object:Gem::Version
86
- version: 0.9.18
89
+ version: 0.9.26
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: '0.10'
87
93
  - !ruby/object:Gem::Dependency
88
94
  name: redcarpet
89
95
  requirement: !ruby/object:Gem::Requirement
90
96
  requirements:
91
97
  - - ">="
92
98
  - !ruby/object:Gem::Version
93
- version: 3.5.0
94
- - - "~>"
99
+ version: 3.5.1
100
+ - - "<"
95
101
  - !ruby/object:Gem::Version
96
- version: '3.5'
102
+ version: '3.6'
97
103
  type: :development
98
104
  prerelease: false
99
105
  version_requirements: !ruby/object:Gem::Requirement
100
106
  requirements:
101
107
  - - ">="
102
108
  - !ruby/object:Gem::Version
103
- version: 3.5.0
104
- - - "~>"
109
+ version: 3.5.1
110
+ - - "<"
105
111
  - !ruby/object:Gem::Version
106
- version: '3.5'
112
+ version: '3.6'
107
113
  - !ruby/object:Gem::Dependency
108
114
  name: pry
109
115
  requirement: !ruby/object:Gem::Requirement
110
116
  requirements:
111
117
  - - "~>"
112
118
  - !ruby/object:Gem::Version
113
- version: '0.13'
119
+ version: '0.14'
114
120
  type: :development
115
121
  prerelease: false
116
122
  version_requirements: !ruby/object:Gem::Requirement
117
123
  requirements:
118
124
  - - "~>"
119
125
  - !ruby/object:Gem::Version
120
- version: '0.13'
126
+ version: '0.14'
121
127
  - !ruby/object:Gem::Dependency
122
128
  name: http
123
129
  requirement: !ruby/object:Gem::Requirement
124
130
  requirements:
125
131
  - - "~>"
126
132
  - !ruby/object:Gem::Version
127
- version: '3'
133
+ version: 4.4.1
134
+ - - "<"
135
+ - !ruby/object:Gem::Version
136
+ version: '5'
128
137
  type: :runtime
129
138
  prerelease: false
130
139
  version_requirements: !ruby/object:Gem::Requirement
131
140
  requirements:
132
141
  - - "~>"
133
142
  - !ruby/object:Gem::Version
134
- version: '3'
143
+ version: 4.4.1
144
+ - - "<"
145
+ - !ruby/object:Gem::Version
146
+ version: '5'
135
147
  - !ruby/object:Gem::Dependency
136
148
  name: hash-polyfill
137
149
  requirement: !ruby/object:Gem::Requirement
@@ -218,7 +230,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
218
230
  requirements:
219
231
  - - ">="
220
232
  - !ruby/object:Gem::Version
221
- version: '0'
233
+ version: 2.4.4
222
234
  required_rubygems_version: !ruby/object:Gem::Requirement
223
235
  requirements:
224
236
  - - ">="