spearly-sdk-ruby 0.2.4 → 0.6.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: 67814c681befa771a269e339b41cd446c68bdc242dd3a61900c3a1f507165167
4
- data.tar.gz: ae7c1f34d649ebc34c0bd8ec4d1e468542c5c7c13bbf351fc0c9e3c294010996
3
+ metadata.gz: b08e74792de34fcc6c4e74ff511041fe8da3f689bb61c9923e1497d6d5bfd546
4
+ data.tar.gz: dd8486d9492fe690cd3aae7a48960931313e4718285848364a5926cf077df2e4
5
5
  SHA512:
6
- metadata.gz: b5e943c498662cd93bcaaa2a5db68e5f16129a337860f8f35637a3d4056bcda54684a5f542201017ac1642ca9dab50549a77324d5d1c7c0354178eaa92b9c88c
7
- data.tar.gz: a7fff0b9890ee300d37a958cfd714057d5684dbd534fb05e7a8cd24b6f7f59c1e45fd084ab64a457da3fcbf5c2a51c437e7d11704174db4fb00b1db30040e855
6
+ metadata.gz: 6e1a7c46099f4a227892d2400ea8625a9b2ded28aa9a3cc178d64ba6bd6de91b17521e4174c0f72a8b5dec71bf7ecd1a795814f37c535fd4ce7fa6e17da8a99d
7
+ data.tar.gz: 32829ececead704d08c8ed4b43b84d23c28322ec695543d28b190e790aa51717924afdfc095cbd69dfb5b2454fb86ccae72e508774f2ab9280361ff4bdb2e019
data/.gitignore CHANGED
@@ -1,11 +1,12 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
-
10
- # rspec failure tracking
1
+ .bundle
11
2
  .rspec_status
3
+ .ruby-version
4
+ .yardoc
5
+ _yardoc/
6
+ coverage/
7
+ doc/
8
+ Gemfile.local
9
+ Gemfile.lock
10
+ pkg/
11
+ spec/reports/
12
+ tmp/
data/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## [0.6.0] - 2022-01-20
2
+
3
+ - `Spearly::Auth::Client#get_team_features`
4
+
5
+ ## [0.5.0] - 2021-12-13
6
+
7
+ - `Spearly::Auth::Client`
8
+
9
+ ## [0.4.0] - 2021-09-13
10
+
11
+ - Error handling improvements
12
+
13
+ ## [0.3.2] - 2021-09-13
14
+
15
+ - Use the new `Spearly API v2`
16
+ - Refactors parsing `JSON` data
17
+
18
+ ## [0.2.4] - 2021-07-16
19
+
20
+ - Rescue `Signet::AuthorizationError` on `Spearly::Auth::Authorizer`
21
+
1
22
  ## [0.2.3] - 2021-06-18
2
23
 
3
24
  - Raise `Spearly::Auth::AuthorizationError` and `Spearly::Auth::ServerError` from `Spearly::Auth::User` and `Spearly::Auth::Token`
data/README.md CHANGED
@@ -20,29 +20,42 @@ Or install it manually:
20
20
  gem install spearly-sdk-ruby
21
21
  ```
22
22
 
23
- ## Publish
23
+ ## Contribute
24
24
  ### Increment version
25
25
  ```sh
26
26
  vim lib/spearly/version.rb
27
27
  ```
28
28
 
29
- ### Build
29
+ ### Update CHANGELOG
30
30
  ```sh
31
- rake build
31
+ vim CHANGELOG.md
32
32
  ```
33
33
 
34
- ### Push to RubyGems
34
+ ### Update Gemfile.lock
35
35
  ```sh
36
- new_version=$(ruby -e "require 'spearly/version'; puts Spearly::VERSION")
37
-
38
- gem push pkg/spearly-sdk-ruby-$new_version.gem
36
+ bundle install
39
37
  ```
40
38
 
41
- ## Contribute
42
39
  ### New version commit
43
40
  ```sh
44
- new_version=$(ruby -e "require 'spearly/version'; puts Spearly::VERSION")
41
+ new_version=$(ruby -e "require './lib/spearly/version'; puts Spearly::VERSION")
45
42
 
46
43
  git commit -m "v$new_version"
47
44
  git tag -a v$new_version -m "Release $new_version"
45
+
46
+ git push origin main
47
+ git push origin --tags
48
+ ```
49
+
50
+ ## Publish
51
+ ### Build
52
+ ```sh
53
+ rake build
54
+ ```
55
+
56
+ ### Push to RubyGems
57
+ ```sh
58
+ new_version=$(ruby -e "require './lib/spearly/version'; puts Spearly::VERSION")
59
+
60
+ gem push pkg/spearly-sdk-ruby-$new_version.gem
48
61
  ```
@@ -19,13 +19,19 @@ module Spearly
19
19
  private
20
20
 
21
21
  def initialize_client
22
+ Faraday.default_connection_options = {
23
+ headers: {
24
+ 'Accept' => 'application/vnd.spearly.v2+json'
25
+ }
26
+ }
27
+
22
28
  client = ::Signet::OAuth2::Client.new
23
29
  client.client_id = @params[:client_id] || @params['client_id']
24
30
  client.client_secret = @params[:client_secret] || @params['client_secret']
25
31
  client.code = @params[:code] || @params['code']
26
32
  client.grant_type = @params[:grant_type] || @params['grant_type']
27
- client.authorization_uri = "#{ENV['SPEARLY_AUTH_API_URL']}/api/v1/oauth/authorize"
28
- client.token_credential_uri = "#{ENV['SPEARLY_AUTH_API_URL']}/api/v1/oauth/token"
33
+ client.authorization_uri = "#{ENV['SPEARLY_API_URL']}/oauth/authorize"
34
+ client.token_credential_uri = "#{ENV['SPEARLY_API_URL']}/oauth/token"
29
35
  client.redirect_uri = @params[:redirect_uri] || @params['redirect_uri']
30
36
 
31
37
  client.access_token = @params[:access_token] || @params['access_token']
@@ -0,0 +1,145 @@
1
+ module Spearly
2
+ module Auth
3
+ class Client
4
+ def initialize(token)
5
+ @token = token
6
+ end
7
+
8
+ def create_team(params)
9
+ uri = "#{ENV['SPEARLY_API_URL']}/teams"
10
+ uri_parsed = Addressable::URI.parse(uri).normalize.to_s
11
+ client = Faraday.default_connection
12
+
13
+ res = client.post(uri_parsed,
14
+ params.as_json,
15
+ 'Accept' => 'application/vnd.spearly.v2+json',
16
+ 'Authorization' => @token)
17
+
18
+ if res.status == 201
19
+ JSON.parse(res.body)['data']
20
+ else
21
+ {}
22
+ end
23
+ end
24
+
25
+ def get_team(team_id)
26
+ uri = "#{ENV['SPEARLY_API_URL']}/teams/#{team_id}"
27
+ uri_parsed = Addressable::URI.parse(uri).normalize.to_s
28
+ client = Faraday.default_connection
29
+
30
+ res = client.get(uri_parsed,
31
+ nil,
32
+ 'Accept' => 'application/vnd.spearly.v2+json',
33
+ 'Authorization' => @token)
34
+
35
+ if res.status == 200
36
+ JSON.parse(res.body)['data']
37
+ else
38
+ {}
39
+ end
40
+ end
41
+
42
+ def get_teams(params = {})
43
+ uri = "#{ENV['SPEARLY_API_URL']}/teams"
44
+ uri_parsed = Addressable::URI.parse(uri).normalize.to_s
45
+ client = Faraday.default_connection
46
+
47
+ res = client.get(uri_parsed,
48
+ params.as_json,
49
+ 'Accept' => 'application/vnd.spearly.v2+json',
50
+ 'Authorization' => @token)
51
+
52
+ if res.status == 200
53
+ JSON.parse(res.body)['data']
54
+ else
55
+ []
56
+ end
57
+ end
58
+
59
+ def update_team(team_id, params)
60
+ uri = "#{ENV['SPEARLY_API_URL']}/teams/#{team_id}"
61
+ uri_parsed = Addressable::URI.parse(uri).normalize.to_s
62
+ client = Faraday.default_connection
63
+
64
+ res = client.put(uri_parsed,
65
+ params.as_json,
66
+ 'Accept' => 'application/vnd.spearly.v2+json',
67
+ 'Authorization' => @token)
68
+
69
+ if res.status == 200
70
+ JSON.parse(res.body)['data']
71
+ else
72
+ nil
73
+ end
74
+ end
75
+
76
+ def regenerate_team_api_access_token(team_id)
77
+ uri = "#{ENV['SPEARLY_API_URL']}/teams/#{team_id}/regenerate_api_access_token"
78
+ uri_parsed = Addressable::URI.parse(uri).normalize.to_s
79
+ client = Faraday.default_connection
80
+
81
+ res = client.post(uri_parsed,
82
+ nil,
83
+ 'Accept' => 'application/vnd.spearly.v2+json',
84
+ 'Authorization' => @token)
85
+
86
+ if res.status == 200
87
+ JSON.parse(res.body)['data']
88
+ else
89
+ nil
90
+ end
91
+ end
92
+
93
+ def invite_user_to_team(team_id, params)
94
+ uri = "#{ENV['SPEARLY_API_URL']}/teams/#{team_id}/invite"
95
+ uri_parsed = Addressable::URI.parse(uri).normalize.to_s
96
+ client = Faraday.default_connection
97
+
98
+ res = client.post(uri_parsed,
99
+ params.as_json,
100
+ 'Accept' => 'application/vnd.spearly.v2+json',
101
+ 'Authorization' => @token)
102
+
103
+ if res.status == 201
104
+ JSON.parse(res.body)['data']
105
+ else
106
+ nil
107
+ end
108
+ end
109
+
110
+ def get_team_members(team_id)
111
+ uri = "#{ENV['SPEARLY_API_URL']}/teams/#{team_id}/members"
112
+ uri_parsed = Addressable::URI.parse(uri).normalize.to_s
113
+ client = Faraday.default_connection
114
+
115
+ res = client.get(uri_parsed,
116
+ nil,
117
+ 'Accept' => 'application/vnd.spearly.v2+json',
118
+ 'Authorization' => @token)
119
+
120
+ if res.status == 200
121
+ JSON.parse(res.body)['data']
122
+ else
123
+ []
124
+ end
125
+ end
126
+
127
+ def get_team_features(team_id)
128
+ uri = "#{ENV['SPEARLY_API_URL']}/teams/#{team_id}/features"
129
+ uri_parsed = Addressable::URI.parse(uri).normalize.to_s
130
+ client = Faraday.default_connection
131
+
132
+ res = client.get(uri_parsed,
133
+ nil,
134
+ 'Accept' => 'application/vnd.spearly.v2+json',
135
+ 'Authorization' => @token)
136
+
137
+ if res.status == 200
138
+ JSON.parse(res.body)['data']
139
+ else
140
+ {}
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
@@ -6,22 +6,22 @@ require 'faraday'
6
6
  module Spearly
7
7
  module Auth
8
8
  class OauthUser
9
- attr_reader :attributes
9
+ attr_reader :data
10
10
 
11
- def initialize(attributes)
12
- @attributes = attributes
11
+ def initialize(data)
12
+ @data = data
13
13
  end
14
14
 
15
15
  def method_missing(name, *_args)
16
- @attributes[name.to_s]
16
+ @data[name.to_s]
17
17
  end
18
18
 
19
19
  def to_json(*_args)
20
- @attributes.to_json
20
+ @data.to_json
21
21
  end
22
22
 
23
23
  def as_json
24
- @attributes.as_json
24
+ @data.as_json
25
25
  end
26
26
  end
27
27
  end
@@ -1,27 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'addressable/uri'
4
- require 'faraday'
5
-
6
3
  module Spearly
7
4
  module Auth
8
5
  class Team
9
- attr_reader :attributes
6
+ attr_reader :data
10
7
 
11
- def initialize(attributes)
12
- @attributes = attributes
8
+ def initialize(data)
9
+ @data = data
13
10
  end
14
11
 
15
12
  def method_missing(name, *_args)
16
- @attributes[name.to_s]
13
+ @data[name.to_s]
17
14
  end
18
15
 
19
16
  def to_json(*_args)
20
- @attributes.to_json
17
+ @data.to_json
21
18
  end
22
19
 
23
20
  def as_json
24
- @attributes.as_json
21
+ @data.as_json
25
22
  end
26
23
  end
27
24
  end
@@ -6,32 +6,33 @@ require 'faraday'
6
6
  module Spearly
7
7
  module Auth
8
8
  class Token
9
- attr_reader :attributes, :token
9
+ attr_reader :data, :token
10
10
 
11
11
  def initialize(token)
12
12
  @token = token
13
13
  end
14
14
 
15
15
  def method_missing(name, *_args)
16
- @attributes[name.to_s]
16
+ @data[name.to_s]
17
17
  end
18
18
 
19
19
  def info
20
- token_info_uri = "#{ENV['SPEARLY_AUTH_API_URL']}/api/v1/oauth/token/info"
20
+ token_info_uri = "#{ENV['SPEARLY_API_URL']}/oauth/token/info"
21
21
  url = Addressable::URI.parse(token_info_uri).normalize.to_s
22
22
  client = Faraday.default_connection
23
23
 
24
24
  res = client.get(url,
25
25
  nil,
26
+ 'Accept' => 'application/vnd.spearly.v2+json',
26
27
  'Authorization' => @token)
27
28
 
28
29
  return unless res.status == 200
29
30
 
30
- @attributes = JSON.parse(res.body)
31
+ @data = JSON.parse(res.body)
31
32
  end
32
33
 
33
34
  def revoke(params)
34
- token_revoke_uri = "#{ENV['SPEARLY_AUTH_API_URL']}/api/v1/oauth/revoke"
35
+ token_revoke_uri = "#{ENV['SPEARLY_API_URL']}/oauth/revoke"
35
36
  url = Addressable::URI.parse(token_revoke_uri).normalize.to_s
36
37
  client = Faraday.default_connection
37
38
 
@@ -46,11 +47,11 @@ module Spearly
46
47
  end
47
48
 
48
49
  def to_json(*_args)
49
- @attributes.to_json
50
+ @data.to_json
50
51
  end
51
52
 
52
53
  def as_json
53
- @attributes.as_json
54
+ @data.as_json
54
55
  end
55
56
  end
56
57
  end
@@ -6,72 +6,56 @@ require 'faraday'
6
6
  module Spearly
7
7
  module Auth
8
8
  class User
9
- attr_reader :attributes
9
+ attr_reader :data
10
10
 
11
11
  def initialize(token)
12
12
  @token = token
13
13
  end
14
14
 
15
15
  def method_missing(name, *_args)
16
- @attributes[name.to_s]
16
+ @data[name.to_s]
17
17
  end
18
18
 
19
19
  def find
20
- user_profile_uri = "#{ENV['SPEARLY_AUTH_API_URL']}/api/v1/oauth/profile"
20
+ user_profile_uri = "#{ENV['SPEARLY_API_URL']}/profile"
21
21
  url = Addressable::URI.parse(user_profile_uri).normalize.to_s
22
22
  client = Faraday.default_connection
23
23
 
24
24
  res = client.get(url,
25
25
  nil,
26
+ 'Accept' => 'application/vnd.spearly.v2+json',
26
27
  'Authorization' => @token)
27
28
 
28
29
  return unless res.status == 200
29
30
 
30
- @attributes = JSON.parse(res.body)['user']
31
+ @data = JSON.parse(res.body)['data']
31
32
  end
32
33
 
33
34
  def teams
34
- teams_uri = "#{ENV['SPEARLY_AUTH_API_URL']}/api/v1/teams"
35
+ teams_uri = "#{ENV['SPEARLY_API_URL']}/teams"
35
36
  url = Addressable::URI.parse(teams_uri).normalize.to_s
36
37
  client = Faraday.default_connection
37
38
 
38
39
  res = client.get(url,
39
40
  nil,
41
+ 'Accept' => 'application/vnd.spearly.v2+json',
40
42
  'Authorization' => @token)
41
43
 
42
44
  return [] unless res.status == 200
43
45
 
44
- team_hashes = JSON.parse(res.body)['teams']
46
+ team_hashes = JSON.parse(res.body)['data']
45
47
 
46
48
  team_hashes.map do |team_hash|
47
49
  Spearly::Auth::Team.new(team_hash)
48
50
  end
49
51
  end
50
52
 
51
- def oauth_users
52
- oauth_users_uri = "#{ENV['SPEARLY_AUTH_API_URL']}/api/v1/oauth_users"
53
- url = Addressable::URI.parse(oauth_users_uri).normalize.to_s
54
- client = Faraday.default_connection
55
-
56
- res = client.get(url,
57
- nil,
58
- 'Authorization' => @token)
59
-
60
- return [] unless res.status == 200
61
-
62
- oauth_user_hashes = JSON.parse(res.body)['oauth_users']
63
-
64
- oauth_user_hashes.map do |oauth_user_hash|
65
- Spearly::Auth::OauthUser.new(oauth_user_hash)
66
- end
67
- end
68
-
69
53
  def to_json(*_args)
70
- @attributes.to_json
54
+ @data.to_json
71
55
  end
72
56
 
73
57
  def as_json
74
- @attributes.as_json
58
+ @data.as_json
75
59
  end
76
60
  end
77
61
  end
data/lib/spearly/auth.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'auth/authorizer'
4
+ require_relative 'auth/client'
4
5
  require_relative 'auth/engine'
5
6
  require_relative 'auth/oauth_user'
6
7
  require_relative 'auth/team'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spearly
4
- VERSION = '0.2.4'
4
+ VERSION = '0.6.0'
5
5
  end
data/spearly.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |gem|
13
13
  gem.required_ruby_version = Gem::Requirement.new('>= 2.7.2')
14
14
  gem.metadata['homepage_uri'] = gem.homepage
15
15
  gem.metadata['source_code_uri'] = 'https://github.com/unimal-jp/spearly-sdk-ruby'
16
- gem.metadata['changelog_uri'] = "https://github.com/unimal-jp/spearly-sdk-ruby/blob/#{Spearly::VERSION}/CHANGELOG.md"
16
+ gem.metadata['changelog_uri'] = "https://github.com/unimal-jp/spearly-sdk-ruby/blob/v#{Spearly::VERSION}/CHANGELOG.md"
17
17
 
18
18
  gem.files = `git ls-files`.split("\n")
19
19
  gem.executables = 'spearly'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spearly-sdk-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spearly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-16 00:00:00.000000000 Z
11
+ date: 2022-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -142,7 +142,6 @@ files:
142
142
  - ".rubocop.yml"
143
143
  - CHANGELOG.md
144
144
  - Gemfile
145
- - Gemfile.lock
146
145
  - README.md
147
146
  - Rakefile
148
147
  - bin/console
@@ -151,6 +150,7 @@ files:
151
150
  - lib/spearly.rb
152
151
  - lib/spearly/auth.rb
153
152
  - lib/spearly/auth/authorizer.rb
153
+ - lib/spearly/auth/client.rb
154
154
  - lib/spearly/auth/engine.rb
155
155
  - lib/spearly/auth/oauth_user.rb
156
156
  - lib/spearly/auth/rails/helpers.rb
@@ -166,7 +166,7 @@ licenses: []
166
166
  metadata:
167
167
  homepage_uri: https://github.com/unimal-jp/spearly-sdk-ruby
168
168
  source_code_uri: https://github.com/unimal-jp/spearly-sdk-ruby
169
- changelog_uri: https://github.com/unimal-jp/spearly-sdk-ruby/blob/0.2.4/CHANGELOG.md
169
+ changelog_uri: https://github.com/unimal-jp/spearly-sdk-ruby/blob/v0.6.0/CHANGELOG.md
170
170
  post_install_message:
171
171
  rdoc_options: []
172
172
  require_paths:
data/Gemfile.lock DELETED
@@ -1,93 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- spearly-sdk-ruby (0.2.3)
5
- addressable (~> 2.3)
6
- faraday (>= 0.17.4, < 2.0)
7
- rake (~> 13.0)
8
- signet (~> 0.15)
9
-
10
- GEM
11
- remote: https://rubygems.org/
12
- specs:
13
- addressable (2.7.0)
14
- public_suffix (>= 2.0.2, < 5.0)
15
- ast (2.4.2)
16
- coderay (1.1.3)
17
- diff-lcs (1.4.4)
18
- faraday (1.4.2)
19
- faraday-em_http (~> 1.0)
20
- faraday-em_synchrony (~> 1.0)
21
- faraday-excon (~> 1.1)
22
- faraday-net_http (~> 1.0)
23
- faraday-net_http_persistent (~> 1.1)
24
- multipart-post (>= 1.2, < 3)
25
- ruby2_keywords (>= 0.0.4)
26
- faraday-em_http (1.0.0)
27
- faraday-em_synchrony (1.0.0)
28
- faraday-excon (1.1.0)
29
- faraday-net_http (1.0.1)
30
- faraday-net_http_persistent (1.1.0)
31
- jwt (2.2.3)
32
- method_source (1.0.0)
33
- multi_json (1.15.0)
34
- multipart-post (2.1.1)
35
- parallel (1.20.1)
36
- parser (3.0.1.1)
37
- ast (~> 2.4.1)
38
- pry (0.13.1)
39
- coderay (~> 1.1)
40
- method_source (~> 1.0)
41
- public_suffix (4.0.6)
42
- rainbow (3.0.0)
43
- rake (13.0.3)
44
- regexp_parser (2.1.1)
45
- rexml (3.2.5)
46
- rspec (3.10.0)
47
- rspec-core (~> 3.10.0)
48
- rspec-expectations (~> 3.10.0)
49
- rspec-mocks (~> 3.10.0)
50
- rspec-core (3.10.1)
51
- rspec-support (~> 3.10.0)
52
- rspec-expectations (3.10.1)
53
- diff-lcs (>= 1.2.0, < 2.0)
54
- rspec-support (~> 3.10.0)
55
- rspec-mocks (3.10.2)
56
- diff-lcs (>= 1.2.0, < 2.0)
57
- rspec-support (~> 3.10.0)
58
- rspec-support (3.10.2)
59
- rubocop (1.15.0)
60
- parallel (~> 1.10)
61
- parser (>= 3.0.0.0)
62
- rainbow (>= 2.2.2, < 4.0)
63
- regexp_parser (>= 1.8, < 3.0)
64
- rexml
65
- rubocop-ast (>= 1.5.0, < 2.0)
66
- ruby-progressbar (~> 1.7)
67
- unicode-display_width (>= 1.4.0, < 3.0)
68
- rubocop-ast (1.5.0)
69
- parser (>= 3.0.1.1)
70
- rubocop-rspec (2.3.0)
71
- rubocop (~> 1.0)
72
- rubocop-ast (>= 1.1.0)
73
- ruby-progressbar (1.11.0)
74
- ruby2_keywords (0.0.4)
75
- signet (0.15.0)
76
- addressable (~> 2.3)
77
- faraday (>= 0.17.3, < 2.0)
78
- jwt (>= 1.5, < 3.0)
79
- multi_json (~> 1.10)
80
- unicode-display_width (2.0.0)
81
-
82
- PLATFORMS
83
- x86_64-darwin-20
84
-
85
- DEPENDENCIES
86
- pry (~> 0.13.1)
87
- rspec (~> 3.0)
88
- rubocop (~> 1.15)
89
- rubocop-rspec (~> 2.3)
90
- spearly-sdk-ruby!
91
-
92
- BUNDLED WITH
93
- 2.2.15