ecoportal-api 0.7.1 → 0.8.2

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: 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
  - - ">="