twitch_oauth2 0.1.0 → 0.2.0

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: 774bd262b409e02731b8d17031f22130f886a821b8042e8eb948e8e6b7137114
4
- data.tar.gz: 32afb0a9c9406acc3225d468e9d23245470eaaa40ae94c6d0795d7137bf3a8bf
3
+ metadata.gz: 3dafbbd8897dad15761967a8ff1d9842438948cc88c753955e1d3c121b0fb4f8
4
+ data.tar.gz: 1cad9f6de68da7ab3f0052aab03f57dac98122b0e542dae33f75a29d7a379462
5
5
  SHA512:
6
- metadata.gz: 6b0220445931a12f5cb271b178ead318674d4a9c9e113758dc8784853e16a3305d1623c6595cf3783d40a84293fe28e60abd537c5f7e33148d4ac70c314d5972
7
- data.tar.gz: 28dc850d48767600756bcba6ff1a609f062ff971dd05e39a257a34c8c59892b7069191e7b74ae932de751c6e752297b6de57561e0f8077c7fbfd443a1f725a7b
6
+ metadata.gz: e0736d7951b1ad4c0faa6b8b582fd22966096a8bd7b038996e104c0414ae80903f27653adf8e9b6a71c663c6f795cc138ae544905ff45067b8d9f26fb61f6990
7
+ data.tar.gz: 94e1bad7e2b47eaf0d2dce14e73f7a08a1525e0b9bffa788789f66a428a4bbe9e18e71b338dd3de4a7d1cc8db4a792329096ab0f6e691354c47b655821153c2b
@@ -0,0 +1,9 @@
1
+ # Changelog
2
+
3
+ ## master (unreleased)
4
+
5
+ ## 0.2.0 (2020-11-05)
6
+
7
+ ## 0.1.0 (2020-05-23)
8
+
9
+ * Initial release
data/README.md CHANGED
@@ -1,9 +1,17 @@
1
1
  # TwitchOAuth2
2
2
 
3
+ [![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/AlexWayfer/twitch_oauth2?style=flat-square)](https://cirrus-ci.com/github/AlexWayfer/twitch_oauth2)
4
+ [![Codecov branch](https://img.shields.io/codecov/c/github/AlexWayfer/twitch_oauth2/master.svg?style=flat-square)](https://codecov.io/gh/AlexWayfer/twitch_oauth2)
5
+ [![Code Climate](https://img.shields.io/codeclimate/maintainability/AlexWayfer/twitch_oauth2.svg?style=flat-square)](https://codeclimate.com/github/AlexWayfer/twitch_oauth2)
6
+ [![Depfu](https://img.shields.io/depfu/AlexWayfer/twitch_oauth2?style=flat-square)](https://depfu.com/repos/github/AlexWayfer/twitch_oauth2)
7
+ [![Inline docs](https://inch-ci.org/github/AlexWayfer/twitch_oauth2.svg?branch=master)](https://inch-ci.org/github/AlexWayfer/twitch_oauth2)
8
+ [![license](https://img.shields.io/github/license/AlexWayfer/twitch_oauth2.svg?style=flat-square)](https://github.com/AlexWayfer/twitch_oauth2/blob/master/LICENSE.txt)
9
+ [![Gem](https://img.shields.io/gem/v/twitch_oauth2.svg?style=flat-square)](https://rubygems.org/gems/twitch_oauth2)
10
+
3
11
  Twitch authentication with OAuth 2.
4
12
  Result tokens can be used for API libraries, chat libraries or something else.
5
13
 
6
- [Twitch Authentication Documentation]
14
+ [Twitch Authentication Documentation](https://dev.twitch.tv/docs/authentication)
7
15
 
8
16
  ## Installation
9
17
 
@@ -47,14 +55,24 @@ tokens = previously_saved_tokens
47
55
  # => { access_token: 'abcdef', refresh_token: 'ghikjl' }
48
56
  # Can be empty.
49
57
 
50
- client.check_tokens **tokens
58
+ client.check_tokens **tokens, token_type: :user
51
59
  ```
52
60
 
61
+ `:token_type` is optional and is `:application` by default,
62
+ but a number of available API end-points is limited in this case.
63
+
64
+ Also, Application Access Token has no `refresh_token`, but this gem just receive a new one
65
+ if a given one is invalid.
66
+
53
67
  #### The first run
54
68
 
55
69
  You can pass nothing to `#check_tokens`, then client will generate new ones.
56
- You will be asked to open a Twitch link in a browser and login as user
57
- for whom tokens are intended.
70
+
71
+ If you've specified `:token_type` as `:application` or have not specify it at all (default),
72
+ there will be an Application Access Token (without refresh token).
73
+
74
+ Otherwise, for User Access Token you will be asked to open a Twitch link in a browser
75
+ and login as user for whom tokens are intended.
58
76
 
59
77
  #### Reusing tokens
60
78
 
@@ -72,22 +90,18 @@ client.refreshed_tokens refresh_token: 'ghikjl'
72
90
  This is used internally in `#check_tokens`, and can be used separately
73
91
  for failed requests to API.
74
92
 
93
+ And, because Application Access Tokens have no refresh tokens — this method will not work for them.
94
+
75
95
  ## Development
76
96
 
77
97
  After checking out the repo, run `bundle install` to install dependencies.
78
- Then, run `bundle exec rake spec` to run the tests.
79
98
 
80
- We're using [VCR](https://relishapp.com/vcr/vcr/docs) cassettes
81
- with filtered sensitive data, so you don't need for real credentials
82
- (like Twitch Client ID and Client Secret) for changing existing methods,
83
- but you need for them to add new requests.
84
- You can read how to get them [here][Twitch Authentication Documentation].
99
+ Then, run `toys rspec` to run the tests.
85
100
 
86
- To install this gem onto your local machine, run `bundle exec rake install`.
87
- To release a new version, update the version number in `version.rb`,
88
- and then run `bundle exec rake release`, which will create a git tag
89
- for the version, push git commits and tags, and push the `.gem` file
90
- to [rubygems.org](https://rubygems.org).
101
+ To install this gem onto your local machine, run `toys gem install`.
102
+
103
+ To release a new version, run `toys gem release %version%`.
104
+ See how it works [here](https://github.com/AlexWayfer/gem_toys#release).
91
105
 
92
106
  ## Contributing
93
107
 
@@ -97,5 +111,3 @@ Bug reports and pull requests are welcome on [GitHub](https://github.com/AlexWay
97
111
 
98
112
  The gem is available as open source under the terms of the
99
113
  [MIT License](https://opensource.org/licenses/MIT).
100
-
101
- [Twitch Authentication Documentation]: https://dev.twitch.tv/docs/authentication
@@ -26,24 +26,20 @@ module TwitchOAuth2
26
26
  @client_secret = client_secret
27
27
  @redirect_uri = redirect_uri
28
28
  @scopes = scopes
29
-
30
- @state = SecureRandom.alphanumeric(32)
31
29
  end
32
30
 
33
- def check_tokens(access_token: nil, refresh_token: nil)
31
+ def check_tokens(access_token: nil, refresh_token: nil, token_type: :user)
34
32
  if access_token
35
33
  validate_result = validate access_token: access_token
36
34
 
37
35
  if validate_result[:status] == 401
38
- return refreshed_tokens(refresh_token: refresh_token)
39
- end
40
-
41
- if validate_result[:expires_in].positive?
36
+ return refreshed_tokens(refresh_token: refresh_token) if token_type == :user
37
+ elsif validate_result[:expires_in].positive?
42
38
  return { access_token: access_token, refresh_token: refresh_token }
43
39
  end
44
40
  end
45
41
 
46
- flow
42
+ flow token_type: token_type
47
43
  end
48
44
 
49
45
  def refreshed_tokens(refresh_token:)
@@ -52,7 +48,13 @@ module TwitchOAuth2
52
48
 
53
49
  private
54
50
 
55
- def flow
51
+ def flow(token_type:)
52
+ code = request_code if token_type == :user
53
+
54
+ token(code: code, token_type: token_type).slice(:access_token, :refresh_token)
55
+ end
56
+
57
+ def request_code
56
58
  link = authorize
57
59
 
58
60
  puts <<~TEXT
@@ -63,9 +65,7 @@ module TwitchOAuth2
63
65
  4. Insert below:
64
66
  TEXT
65
67
 
66
- code = STDIN.gets.chomp
67
-
68
- token(code: code).slice(:access_token, :refresh_token)
68
+ $stdin.gets.chomp
69
69
  end
70
70
 
71
71
  def authorize
@@ -83,17 +83,27 @@ module TwitchOAuth2
83
83
  raise Error, response.body[:message]
84
84
  end
85
85
 
86
- def token(code:)
86
+ def token(code:, token_type:)
87
87
  response = CONNECTION.post(
88
88
  'token',
89
89
  client_id: @client_id,
90
90
  client_secret: @client_secret,
91
91
  code: code,
92
- grant_type: :authorization_code,
92
+ grant_type: grant_type_by_token_type(token_type),
93
93
  redirect_uri: @redirect_uri
94
94
  )
95
95
 
96
- response.body
96
+ return response.body if response.success?
97
+
98
+ raise Error, response.body[:message]
99
+ end
100
+
101
+ def grant_type_by_token_type(token_type)
102
+ case token_type
103
+ when :user then :authorization_code
104
+ when :application then :client_credentials
105
+ else raise Error, 'unsupported token type'
106
+ end
97
107
  end
98
108
 
99
109
  def validate(access_token:)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TwitchOAuth2
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitch_oauth2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Popov
8
- autorequire:
9
- bindir: exe
8
+ autorequire:
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-23 00:00:00.000000000 Z
11
+ date: 2020-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -39,61 +39,75 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: codecov
42
+ name: pry-byebug
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.1.0
47
+ version: '3.9'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.1.0
54
+ version: '3.9'
55
55
  - !ruby/object:Gem::Dependency
56
- name: mdl
56
+ name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.9.0
61
+ version: '2.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.9.0
68
+ version: '2.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: pry-byebug
70
+ name: gem_toys
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.9'
75
+ version: 0.4.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.9'
82
+ version: 0.4.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: rake
84
+ name: toys
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '13.0'
89
+ version: 0.11.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '13.0'
96
+ version: 0.11.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: codecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.2.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.2.1
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rspec
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -109,75 +123,75 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '3.9'
111
125
  - !ruby/object:Gem::Dependency
112
- name: rubocop
126
+ name: simplecov
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: 0.83.0
131
+ version: 0.19.0
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: 0.83.0
138
+ version: 0.19.0
125
139
  - !ruby/object:Gem::Dependency
126
- name: rubocop-performance
140
+ name: vcr
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - "~>"
130
144
  - !ruby/object:Gem::Version
131
- version: '1.0'
145
+ version: '6.0'
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
- version: '1.0'
152
+ version: '6.0'
139
153
  - !ruby/object:Gem::Dependency
140
- name: rubocop-rspec
154
+ name: rubocop
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
- version: '1.0'
159
+ version: 0.93.1
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: '1.0'
166
+ version: 0.93.1
153
167
  - !ruby/object:Gem::Dependency
154
- name: simplecov
168
+ name: rubocop-performance
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
171
  - - "~>"
158
172
  - !ruby/object:Gem::Version
159
- version: 0.18.0
173
+ version: '1.0'
160
174
  type: :development
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
178
  - - "~>"
165
179
  - !ruby/object:Gem::Version
166
- version: 0.18.0
180
+ version: '1.0'
167
181
  - !ruby/object:Gem::Dependency
168
- name: vcr
182
+ name: rubocop-rspec
169
183
  requirement: !ruby/object:Gem::Requirement
170
184
  requirements:
171
185
  - - "~>"
172
186
  - !ruby/object:Gem::Version
173
- version: '5.1'
187
+ version: '1.44'
174
188
  type: :development
175
189
  prerelease: false
176
190
  version_requirements: !ruby/object:Gem::Requirement
177
191
  requirements:
178
192
  - - "~>"
179
193
  - !ruby/object:Gem::Version
180
- version: '5.1'
194
+ version: '1.44'
181
195
  description: |
182
196
  Twitch authentication with OAuth 2.
183
197
  Result tokens can be used for API libraries, chat libraries
@@ -188,27 +202,21 @@ executables: []
188
202
  extensions: []
189
203
  extra_rdoc_files: []
190
204
  files:
191
- - ".cirrus.yml"
192
- - ".editorconfig"
193
- - ".gitignore"
194
- - ".rspec"
195
- - ".rubocop.yml"
196
- - Gemfile
205
+ - CHANGELOG.md
197
206
  - LICENSE.txt
198
207
  - README.md
199
- - Rakefile
200
208
  - lib/twitch_oauth2.rb
201
209
  - lib/twitch_oauth2/client.rb
202
210
  - lib/twitch_oauth2/error.rb
203
211
  - lib/twitch_oauth2/version.rb
204
- - twitch_oauth2.gemspec
205
212
  homepage: https://github.com/AlexWayfer/twitch_oauth2
206
213
  licenses:
207
214
  - MIT
208
215
  metadata:
209
216
  source_code_uri: https://github.com/AlexWayfer/twitch_oauth2
210
217
  homepage_uri: https://github.com/AlexWayfer/twitch_oauth2
211
- post_install_message:
218
+ changelog_uri: https://github.com/AlexWayfer/twitch_oauth2/blob/master/CHANGELOG.md
219
+ post_install_message:
212
220
  rdoc_options: []
213
221
  require_paths:
214
222
  - lib
@@ -223,8 +231,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
231
  - !ruby/object:Gem::Version
224
232
  version: '0'
225
233
  requirements: []
226
- rubygems_version: 3.1.2
227
- signing_key:
234
+ rubygems_version: 3.1.4
235
+ signing_key:
228
236
  specification_version: 4
229
237
  summary: Twitch authentication with OAuth 2.
230
238
  test_files: []
@@ -1,32 +0,0 @@
1
- bundle_cache: &bundle_cache
2
- bundle_cache:
3
- folder: /usr/local/bundle
4
- fingerprint_script:
5
- - echo $CIRRUS_OS
6
- - ruby -v
7
- - cat Gemfile
8
- - cat *.gemspec
9
- install_script: bundle update
10
-
11
- test_task:
12
- container:
13
- matrix:
14
- image: ruby:2.5
15
- image: ruby:2.6
16
- image: ruby:2.7
17
- <<: *bundle_cache
18
- environment:
19
- CODECOV_TOKEN: ENCRYPTED[b26ecd3e49540f09f5c9bf830caa29f5daedaf6769d6b1ba1a650eb6e81432ffb857f19421aed8e8dfddf21724fb57b6]
20
- test_script: bundle exec rake
21
-
22
- rubocop_task:
23
- container:
24
- image: ruby:latest
25
- <<: *bundle_cache
26
- rubocop_script: bundle exec rubocop
27
-
28
- markdown_lint_task:
29
- container:
30
- image: ruby:latest
31
- <<: *bundle_cache
32
- rubocop_script: bundle exec mdl .
@@ -1,17 +0,0 @@
1
- root = true
2
-
3
- [*]
4
- indent_style = tab
5
- indent_size = 2
6
- end_of_line = lf
7
- charset = utf-8
8
- trim_trailing_whitespace = true
9
- insert_final_newline = true
10
-
11
- [*.y{a,}ml]
12
- indent_style = space
13
- indent_size = 2
14
-
15
- [*.md]
16
- indent_style = space
17
- indent_size = 4
data/.gitignore DELETED
@@ -1,2 +0,0 @@
1
- Gemfile.lock
2
- /coverage/
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
@@ -1,47 +0,0 @@
1
- require:
2
- - rubocop-performance
3
- - rubocop-rspec
4
-
5
- Layout/IndentationStyle:
6
- EnforcedStyle: tabs
7
- IndentationWidth: 2
8
- Layout/IndentationWidth:
9
- Width: 1
10
- Layout/MultilineMethodCallIndentation:
11
- EnforcedStyle: indented
12
- Layout/ArgumentAlignment:
13
- EnforcedStyle: with_fixed_indentation
14
- Layout/SpaceAroundMethodCallOperator:
15
- Enabled: true
16
- Layout/EmptyLinesAroundAttributeAccessor:
17
- Enabled: true
18
-
19
- Lint/StructNewOverride:
20
- Enabled: true
21
- Lint/RaiseException:
22
- Enabled: true
23
-
24
- Style/HashEachMethods:
25
- Enabled: true
26
- Style/HashTransformKeys:
27
- Enabled: true
28
- Style/HashTransformValues:
29
- Enabled: true
30
- Style/ExponentialNotation:
31
- Enabled: true
32
- Style/SlicingWithRange:
33
- Enabled: true
34
-
35
- Metrics/BlockLength:
36
- Exclude:
37
- - '*.gemspec'
38
- - spec/**/*.rb
39
-
40
- AllCops:
41
- TargetRubyVersion: 2.5
42
-
43
- RSpec/FilePath:
44
- CustomTransform:
45
- TwitchOAuth2: twitch_oauth2
46
- RSpec/NestedGroups:
47
- Max: 4
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- # Specify your gem's dependencies in twitch_oauth2.gemspec
6
- gemspec
data/Rakefile DELETED
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/gem_tasks'
4
- require 'rspec/core/rake_task'
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
-
8
- task default: :spec
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'lib/twitch_oauth2/version'
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = 'twitch_oauth2'
7
- spec.version = TwitchOAuth2::VERSION
8
- spec.authors = ['Alexander Popov']
9
- spec.email = ['alex.wayfer@gmail.com']
10
-
11
- spec.summary = 'Twitch authentication with OAuth 2.'
12
- spec.description = <<~DESC
13
- Twitch authentication with OAuth 2.
14
- Result tokens can be used for API libraries, chat libraries
15
- or something else.
16
- DESC
17
- spec.license = 'MIT'
18
-
19
- spec.required_ruby_version = '>= 2.5'
20
-
21
- source_code_uri = 'https://github.com/AlexWayfer/twitch_oauth2'
22
-
23
- spec.homepage = source_code_uri
24
-
25
- spec.metadata['source_code_uri'] = source_code_uri
26
-
27
- spec.metadata['homepage_uri'] = spec.homepage
28
-
29
- # TODO: Put your gem's CHANGELOG.md URL here.
30
- # spec.metadata["changelog_uri"] = ""
31
-
32
- # Specify which files should be added to the gem when it is released.
33
- # The `git ls-files -z` loads the files in the RubyGem that have been added
34
- # into git.
35
- spec.files = Dir.chdir(__dir__) do
36
- `git ls-files -z`.split("\x0").reject do |file|
37
- file.match(%r{^(test|spec|features)/})
38
- end
39
- end
40
- spec.bindir = 'exe'
41
- spec.executables = spec.files.grep(%r{^exe/}) { |file| File.basename(file) }
42
- spec.require_paths = ['lib']
43
-
44
- spec.add_dependency 'faraday', '~> 1.0'
45
- spec.add_dependency 'faraday_middleware', '~> 1.0'
46
-
47
- spec.add_development_dependency 'codecov', '~> 0.1.0'
48
- spec.add_development_dependency 'mdl', '~> 0.9.0'
49
- spec.add_development_dependency 'pry-byebug', '~> 3.9'
50
- spec.add_development_dependency 'rake', '~> 13.0'
51
- spec.add_development_dependency 'rspec', '~> 3.9'
52
- spec.add_development_dependency 'rubocop', '~> 0.83.0'
53
- spec.add_development_dependency 'rubocop-performance', '~> 1.0'
54
- spec.add_development_dependency 'rubocop-rspec', '~> 1.0'
55
- spec.add_development_dependency 'simplecov', '~> 0.18.0'
56
- spec.add_development_dependency 'vcr', '~> 5.1'
57
- end