chatwork 0.12.3 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +2 -5
- data/.rubocop.yml +23 -2
- data/CHANGELOG.md +7 -1
- data/Gemfile +1 -1
- data/bin/console +1 -1
- data/chatwork.gemspec +9 -6
- data/gemfiles/{faraday_0.gemfile → faraday_2.gemfile} +2 -2
- data/lib/chatwork/base_client.rb +1 -4
- data/lib/chatwork/chatwork_error.rb +3 -4
- data/lib/chatwork/client/task_methods.rb +2 -2
- data/lib/chatwork/converter.rb +0 -4
- data/lib/chatwork/multipart.rb +2 -2
- data/lib/chatwork/version.rb +1 -1
- data/lib/chatwork.rb +3 -1
- data/spec/lib/chatwork/oauth_client/token_methods_spec.rb +2 -2
- data/spec/lib/chatwork_spec.rb +3 -6
- data/spec/spec_helper.rb +2 -2
- data/spec/support/contexts/api_context.rb +4 -4
- data/spec/support/utils/raml_parser.rb +1 -1
- metadata +29 -17
- data/gemfiles/common.gemfile +0 -18
- data/gemfiles/faraday_1.gemfile +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ebd6f01a2cc37a47a6257aeb737ff651136d8648fdbc789d7b04ead47871b7f
|
4
|
+
data.tar.gz: cc0dd6dad262c74a62a60935c0fd2f7eeacbbcc354e8c9537dcac32484b005ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4adfba5cbacb2c7d013890d1e023b2b8e3edec7c0a485f3d9e73c0142c34e1f84ecf67cf9238abab519640ecbb932eb2270075829ff7268a316e0f684714f880
|
7
|
+
data.tar.gz: eee04c8ba3baf1754b1b497f265dad2be39583a24bda1ba8d6f29ae9b9f85442e2b55570c0c8d9fa45526070621d3c9e423e6ed852937cbc1c7e84240a822631
|
data/.github/workflows/test.yml
CHANGED
@@ -26,15 +26,13 @@ jobs:
|
|
26
26
|
|
27
27
|
matrix:
|
28
28
|
ruby:
|
29
|
-
- ruby:2.4
|
30
|
-
- ruby:2.5
|
31
29
|
- ruby:2.6
|
32
30
|
- ruby:2.7
|
33
31
|
- ruby:3.0
|
32
|
+
- ruby:3.1
|
34
33
|
- rubylang/ruby:master-nightly-bionic
|
35
34
|
gemfile:
|
36
|
-
-
|
37
|
-
- faraday_1
|
35
|
+
- faraday_2
|
38
36
|
include:
|
39
37
|
- ruby: rubylang/ruby:master-nightly-bionic
|
40
38
|
allow_failures: "true"
|
@@ -76,7 +74,6 @@ jobs:
|
|
76
74
|
|
77
75
|
- run: bundle exec rubocop
|
78
76
|
continue-on-error: ${{ matrix.allow_failures == 'true' }}
|
79
|
-
if: matrix.ruby < 'ruby:3.0' # FIXME: remove this after upgrade rubocop
|
80
77
|
|
81
78
|
finish:
|
82
79
|
needs: test
|
data/.rubocop.yml
CHANGED
@@ -6,6 +6,9 @@ inherit_gem:
|
|
6
6
|
require: rubocop-rspec
|
7
7
|
|
8
8
|
AllCops:
|
9
|
+
NewCops: enable
|
10
|
+
SuggestExtensions: false
|
11
|
+
TargetRubyVersion: 2.6
|
9
12
|
Exclude:
|
10
13
|
- 'gemfiles/vendor/**/*'
|
11
14
|
|
@@ -15,9 +18,27 @@ AllCops:
|
|
15
18
|
- 'vendor/**/*'
|
16
19
|
- '.git/**/*'
|
17
20
|
|
18
|
-
|
19
|
-
|
21
|
+
Layout/HashAlignment:
|
22
|
+
EnforcedColonStyle: table
|
23
|
+
|
24
|
+
Lint/BinaryOperatorWithIdenticalOperands:
|
20
25
|
Enabled: false
|
21
26
|
|
22
27
|
Metrics/ParameterLists:
|
23
28
|
Max: 6
|
29
|
+
|
30
|
+
# module name is `ChatWork`, but I want to use `chatwork` as filename
|
31
|
+
RSpec/FilePath:
|
32
|
+
Enabled: false
|
33
|
+
|
34
|
+
RSpec/MultipleExpectations:
|
35
|
+
Enabled: false
|
36
|
+
|
37
|
+
RSpec/MultipleMemoizedHelpers:
|
38
|
+
Enabled: false
|
39
|
+
|
40
|
+
RSpec/SharedExamples:
|
41
|
+
Enabled: false
|
42
|
+
|
43
|
+
Style/KeywordParametersOrder:
|
44
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
# Change Log
|
2
2
|
## Unreleased
|
3
|
-
[Full Changelog](https://github.com/asonas/chatwork-ruby/compare/
|
3
|
+
[Full Changelog](https://github.com/asonas/chatwork-ruby/compare/v1.0.0...master)
|
4
|
+
|
5
|
+
## v1.0.0
|
6
|
+
[Full Changelog](https://github.com/asonas/chatwork-ruby/compare/v0.12.3...v1.0.0)
|
7
|
+
|
8
|
+
* :bomb: **[BREAKING CHANGE]** Support faraday v2+ and drop support ruby < 2.6
|
9
|
+
* https://github.com/asonas/chatwork-ruby/pull/78
|
4
10
|
|
5
11
|
## v0.12.3
|
6
12
|
[Full Changelog](https://github.com/asonas/chatwork-ruby/compare/v0.12.2...v0.12.3)
|
data/Gemfile
CHANGED
data/bin/console
CHANGED
data/chatwork.gemspec
CHANGED
@@ -22,21 +22,24 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
23
23
|
spec.require_paths = ["lib"]
|
24
24
|
|
25
|
-
spec.
|
26
|
-
|
27
|
-
spec.add_dependency "
|
25
|
+
spec.required_ruby_version = ">= 2.6.0"
|
26
|
+
|
27
|
+
spec.add_dependency "faraday", ">= 2.0.0"
|
28
|
+
spec.add_dependency "faraday-mashify"
|
29
|
+
spec.add_dependency "faraday-multipart"
|
28
30
|
|
29
31
|
spec.add_development_dependency "activesupport"
|
30
32
|
spec.add_development_dependency "bundler", ">= 1.3"
|
31
33
|
spec.add_development_dependency "dotenv"
|
32
34
|
spec.add_development_dependency "faraday_curl"
|
33
|
-
spec.add_development_dependency "onkcop", "0.
|
35
|
+
spec.add_development_dependency "onkcop", "1.0.0.0"
|
34
36
|
spec.add_development_dependency "rake"
|
35
37
|
spec.add_development_dependency "rspec"
|
36
38
|
spec.add_development_dependency "rspec-its"
|
37
39
|
spec.add_development_dependency "rspec-parameterized"
|
38
|
-
spec.add_development_dependency "rubocop", "
|
39
|
-
spec.add_development_dependency "
|
40
|
+
spec.add_development_dependency "rubocop", "1.24.1"
|
41
|
+
spec.add_development_dependency "rubocop_auto_corrector"
|
42
|
+
spec.add_development_dependency "rubocop-rspec", "2.7.0"
|
40
43
|
spec.add_development_dependency "simplecov"
|
41
44
|
spec.add_development_dependency "simplecov-lcov"
|
42
45
|
spec.add_development_dependency "webmock"
|
data/lib/chatwork/base_client.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require "faraday"
|
2
|
-
require "faraday_middleware"
|
3
|
-
|
4
1
|
module ChatWork
|
5
2
|
class BaseClient
|
6
3
|
include Converter
|
@@ -44,7 +41,7 @@ module ChatWork
|
|
44
41
|
end
|
45
42
|
|
46
43
|
begin
|
47
|
-
response = @conn.__send__(method, @api_version + url,
|
44
|
+
response = @conn.__send__(method, @api_version + url, args.compact)
|
48
45
|
rescue *faraday_errors => e
|
49
46
|
raise ChatWork::APIConnectionError.faraday_error(e)
|
50
47
|
end
|
@@ -21,8 +21,7 @@ module ChatWork
|
|
21
21
|
APIConnectionError.new("Invalid response #{body.to_hash} (status: #{status})")
|
22
22
|
end
|
23
23
|
|
24
|
-
attr_reader :status
|
25
|
-
attr_reader :error_response
|
24
|
+
attr_reader :status, :error_response
|
26
25
|
|
27
26
|
def initialize(message, status = nil, error_response = nil)
|
28
27
|
@status = status
|
@@ -69,10 +68,10 @@ module ChatWork
|
|
69
68
|
end
|
70
69
|
|
71
70
|
def self.from_www_authenticate(www_authenticate:, status:, error_response:)
|
72
|
-
www_authenticate =~ /error="([
|
71
|
+
www_authenticate =~ /error="([^"]+)"/
|
73
72
|
error = Regexp.last_match(1)
|
74
73
|
|
75
|
-
www_authenticate =~ /error_description="([
|
74
|
+
www_authenticate =~ /error_description="([^"]+)"/
|
76
75
|
error_description = Regexp.last_match(1)
|
77
76
|
|
78
77
|
AuthenticateError.new(
|
@@ -65,8 +65,8 @@ module ChatWork::Client::TaskMethods
|
|
65
65
|
# }
|
66
66
|
def create_task(room_id:, body:, to_ids:, limit: nil, limit_type: nil, &block)
|
67
67
|
params = {
|
68
|
-
body:
|
69
|
-
to_ids:
|
68
|
+
body: body,
|
69
|
+
to_ids: Array(to_ids).join(","),
|
70
70
|
limit_type: limit_type,
|
71
71
|
}
|
72
72
|
params[:limit] = limit.to_i if limit
|
data/lib/chatwork/converter.rb
CHANGED
data/lib/chatwork/multipart.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module ChatWork
|
2
|
-
class Multipart < ::Faraday::
|
2
|
+
class Multipart < ::Faraday::Multipart::Middleware
|
3
3
|
self.mime_type = "multipart/form-data".freeze
|
4
4
|
|
5
5
|
def create_multipart(env, params)
|
@@ -17,7 +17,7 @@ module ChatWork
|
|
17
17
|
end
|
18
18
|
|
19
19
|
class EpiloguePart < ::Faraday::Parts::EpiloguePart
|
20
|
-
def initialize(boundary)
|
20
|
+
def initialize(boundary) # rubocop:disable Lint/MissingSuper
|
21
21
|
# NOTE: ChatWork doesn't accepts ending "\r\n\r\n" of payload...
|
22
22
|
# @part = "--#{boundary}--\r\n\r\n"
|
23
23
|
@part = "--#{boundary}--\r\n"
|
data/lib/chatwork/version.rb
CHANGED
data/lib/chatwork.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require "chatwork/version"
|
2
2
|
require "hashie"
|
3
3
|
require "faraday"
|
4
|
+
require "faraday/mashify"
|
5
|
+
require "faraday/multipart"
|
4
6
|
|
5
7
|
module ChatWork
|
6
8
|
autoload :BaseClient, "chatwork/base_client"
|
@@ -34,7 +36,7 @@ module ChatWork
|
|
34
36
|
@client_secret = nil
|
35
37
|
|
36
38
|
Faraday::Request.register_middleware(
|
37
|
-
chatwork_multipart:
|
39
|
+
chatwork_multipart: ChatWork::Multipart,
|
38
40
|
)
|
39
41
|
|
40
42
|
class << self
|
@@ -13,7 +13,7 @@ describe ChatWork::OAuthClient::TokenMethods do
|
|
13
13
|
context "when successful" do
|
14
14
|
before do
|
15
15
|
stub_request(:post, "https://oauth.chatwork.com/token").
|
16
|
-
with(body:
|
16
|
+
with(body: { "grant_type" => "refresh_token", "refresh_token" => refresh_token },
|
17
17
|
headers: { "Authorization" => "Basic #{signature}", "Content-Type" => "application/x-www-form-urlencoded" }).
|
18
18
|
to_return(status: 200, body: token.to_json, headers: { "Content-Type" => "application/json" })
|
19
19
|
end
|
@@ -38,7 +38,7 @@ describe ChatWork::OAuthClient::TokenMethods do
|
|
38
38
|
context "when failure" do
|
39
39
|
before do
|
40
40
|
stub_request(:post, "https://oauth.chatwork.com/token").
|
41
|
-
with(body:
|
41
|
+
with(body: { "grant_type" => "refresh_token", "refresh_token" => refresh_token },
|
42
42
|
headers: { "Authorization" => "Basic #{signature}", "Content-Type" => "application/x-www-form-urlencoded" }).
|
43
43
|
to_return(status: 401, body: body.to_json, headers: { "Content-Type" => "application/json" })
|
44
44
|
end
|
data/spec/lib/chatwork_spec.rb
CHANGED
@@ -14,6 +14,7 @@ describe ChatWork do
|
|
14
14
|
|
15
15
|
it { should eq("https://api.chatwork.com/") }
|
16
16
|
end
|
17
|
+
|
17
18
|
describe "#api_base=" do
|
18
19
|
before { ChatWork.api_base = "https://test.example.com/" }
|
19
20
|
|
@@ -22,12 +23,6 @@ describe ChatWork do
|
|
22
23
|
|
23
24
|
it { should eq("https://test.example.com/") }
|
24
25
|
end
|
25
|
-
|
26
|
-
describe "#api_base" do
|
27
|
-
subject { super().api_base }
|
28
|
-
|
29
|
-
it { should eq("https://test.example.com/") }
|
30
|
-
end
|
31
26
|
end
|
32
27
|
|
33
28
|
describe "#api_key" do
|
@@ -42,6 +37,7 @@ describe ChatWork do
|
|
42
37
|
|
43
38
|
let(:test_token) { "chatwork_test_token" }
|
44
39
|
before { ENV["CHATWORK_API_TOKEN"] = test_token }
|
40
|
+
|
45
41
|
it { is_expected.to eq test_token }
|
46
42
|
end
|
47
43
|
end
|
@@ -58,6 +54,7 @@ describe ChatWork do
|
|
58
54
|
|
59
55
|
let(:test_token) { "chatwork_test_token" }
|
60
56
|
before { ENV["CHATWORK_ACCESS_TOKEN"] = test_token }
|
57
|
+
|
61
58
|
it { is_expected.to eq test_token }
|
62
59
|
end
|
63
60
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -26,10 +26,10 @@ require "active_support/all"
|
|
26
26
|
|
27
27
|
begin
|
28
28
|
require "backport_dig"
|
29
|
-
rescue LoadError # rubocop:disable Lint/
|
29
|
+
rescue LoadError # rubocop:disable Lint/SuppressedException
|
30
30
|
end
|
31
31
|
|
32
|
-
Dir["#{__dir__}/support/**/*.rb"].each {|f| require f }
|
32
|
+
Dir["#{__dir__}/support/**/*.rb"].sort.each {|f| require f }
|
33
33
|
|
34
34
|
def spec_dir
|
35
35
|
Pathname(__dir__)
|
@@ -4,10 +4,10 @@ RSpec.shared_context :api_context, type: :api do
|
|
4
4
|
|
5
5
|
let(:response_headers) do
|
6
6
|
{
|
7
|
-
"Content-Type"
|
8
|
-
"X-RateLimit-Limit"
|
7
|
+
"Content-Type" => "application/json",
|
8
|
+
"X-RateLimit-Limit" => ratelimit_limit,
|
9
9
|
"X-RateLimit-Remaining" => ratelimit_remaining,
|
10
|
-
"X-RateLimit-Reset"
|
10
|
+
"X-RateLimit-Reset" => ratelimit_reset,
|
11
11
|
}
|
12
12
|
end
|
13
13
|
|
@@ -30,7 +30,7 @@ RSpec.shared_context :api_context, type: :api do
|
|
30
30
|
unless query_example.empty?
|
31
31
|
case expected_verb
|
32
32
|
when :get, :delete
|
33
|
-
query_string = "
|
33
|
+
query_string = "?#{query_example.to_query}"
|
34
34
|
when :post, :put
|
35
35
|
request_options[:headers]["Content-Type"] = "application/x-www-form-urlencoded"
|
36
36
|
request_options[:body] = query_example.transform_values(&:to_s)
|
@@ -33,7 +33,7 @@ module RamlParser
|
|
33
33
|
nil
|
34
34
|
end
|
35
35
|
|
36
|
-
def self.find_query_parameter_example(verb, path)
|
36
|
+
def self.find_query_parameter_example(verb, path) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
37
37
|
resource = find_resource(verb, path)
|
38
38
|
return {} unless resource
|
39
39
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chatwork
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- asonas
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-01-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -17,16 +17,16 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 2.0.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: 2.0.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: faraday-mashify
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: faraday-multipart
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
@@ -115,14 +115,14 @@ dependencies:
|
|
115
115
|
requirements:
|
116
116
|
- - '='
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: 0.
|
118
|
+
version: 1.0.0.0
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - '='
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: 0.
|
125
|
+
version: 1.0.0.0
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: rake
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -185,28 +185,42 @@ dependencies:
|
|
185
185
|
requirements:
|
186
186
|
- - '='
|
187
187
|
- !ruby/object:Gem::Version
|
188
|
-
version:
|
188
|
+
version: 1.24.1
|
189
189
|
type: :development
|
190
190
|
prerelease: false
|
191
191
|
version_requirements: !ruby/object:Gem::Requirement
|
192
192
|
requirements:
|
193
193
|
- - '='
|
194
194
|
- !ruby/object:Gem::Version
|
195
|
-
version:
|
195
|
+
version: 1.24.1
|
196
|
+
- !ruby/object:Gem::Dependency
|
197
|
+
name: rubocop_auto_corrector
|
198
|
+
requirement: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
203
|
+
type: :development
|
204
|
+
prerelease: false
|
205
|
+
version_requirements: !ruby/object:Gem::Requirement
|
206
|
+
requirements:
|
207
|
+
- - ">="
|
208
|
+
- !ruby/object:Gem::Version
|
209
|
+
version: '0'
|
196
210
|
- !ruby/object:Gem::Dependency
|
197
211
|
name: rubocop-rspec
|
198
212
|
requirement: !ruby/object:Gem::Requirement
|
199
213
|
requirements:
|
200
214
|
- - '='
|
201
215
|
- !ruby/object:Gem::Version
|
202
|
-
version:
|
216
|
+
version: 2.7.0
|
203
217
|
type: :development
|
204
218
|
prerelease: false
|
205
219
|
version_requirements: !ruby/object:Gem::Requirement
|
206
220
|
requirements:
|
207
221
|
- - '='
|
208
222
|
- !ruby/object:Gem::Version
|
209
|
-
version:
|
223
|
+
version: 2.7.0
|
210
224
|
- !ruby/object:Gem::Dependency
|
211
225
|
name: simplecov
|
212
226
|
requirement: !ruby/object:Gem::Requirement
|
@@ -285,9 +299,7 @@ files:
|
|
285
299
|
- Rakefile
|
286
300
|
- bin/console
|
287
301
|
- chatwork.gemspec
|
288
|
-
- gemfiles/
|
289
|
-
- gemfiles/faraday_0.gemfile
|
290
|
-
- gemfiles/faraday_1.gemfile
|
302
|
+
- gemfiles/faraday_2.gemfile
|
291
303
|
- lib/chatwork.rb
|
292
304
|
- lib/chatwork/base_client.rb
|
293
305
|
- lib/chatwork/chatwork_error.rb
|
@@ -371,14 +383,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
371
383
|
requirements:
|
372
384
|
- - ">="
|
373
385
|
- !ruby/object:Gem::Version
|
374
|
-
version:
|
386
|
+
version: 2.6.0
|
375
387
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
376
388
|
requirements:
|
377
389
|
- - ">="
|
378
390
|
- !ruby/object:Gem::Version
|
379
391
|
version: '0'
|
380
392
|
requirements: []
|
381
|
-
rubygems_version: 3.
|
393
|
+
rubygems_version: 3.3.3
|
382
394
|
signing_key:
|
383
395
|
specification_version: 4
|
384
396
|
summary: Ruby bindings of ChatWork API
|
data/gemfiles/common.gemfile
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.3.0")
|
2
|
-
group :test do
|
3
|
-
gem "backport_dig", group: :development
|
4
|
-
end
|
5
|
-
end
|
6
|
-
|
7
|
-
if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.2.2")
|
8
|
-
group :test do
|
9
|
-
gem "activesupport", "< 5.0.0", group: :development
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.5.0")
|
14
|
-
group :test do
|
15
|
-
# NOTE: unparser v0.3.0+ requires Ruby 2.5+
|
16
|
-
gem "unparser", "< 0.3.0"
|
17
|
-
end
|
18
|
-
end
|