checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
---
2
2
SHA256:
3
- metadata.gz: de9001a9e249f065997001450d453c225bf127ddd03faa337a9ec01054349299
4
- data.tar.gz: 841fc4c60204d05fa101d904dacd5ade476d862258ce5d6c16206b67d8999456
3
+ metadata.gz: 1413d4e46506230bb025b09141ed382ff241a020711771023fdde4c3a5ecf426
4
+ data.tar.gz: 230997aef7c02db7fde6940fe047d59ba63063a4b71a07369a95ac28d935d925
5
5
SHA512:
6
- metadata.gz: b9dff72f5b2a6436cefc6ca8706e7bf6e2956fb8a2d62f3f59444950f800549022f0a2ad7243a52570d1abe516c28d9500ff87ac90f3a2cb5274a9348bc2578e
7
- data.tar.gz: 15da4523a462a3b16a67921a0f29ae78fb1812f7802260980c03a25d84f052dab45ab788cf19654e4cd6fd225fb12f7ed3bfcac9418a066d90cc3ab51e0ffaf3
6
+ metadata.gz: ebf9ed99dc0a9d83de31b3a093f02afef815f4fc699662b320338a9e3d3ffff3dfd41aa5a6cc69460d5deeaad6d4cde88a45a323f91994ea7c7a5f0390d4b0be
7
+ data.tar.gz: 9e3a7a7773a0fca1986bdac76b1a55a38fe63ff12e60825c755cb416ecb98117b6d1025341f14f48b7b22c46f408442d29f7c628ceb2801e64f0fc3e0732e6b7
data/Gemfile CHANGED
@@ -4,6 +4,5 @@ source "https://rubygems.org"
4
4
5
5
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
7
- gem "webmock"
8
7
# Specify your gem's dependencies in bearer.gemspec
9
8
gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
PATH
2
2
remote: .
3
3
specs:
4
- bearer (1.1.0)
4
+ bearer (2.0.0)
5
5
6
6
GEM
7
7
remote: https://rubygems.org/
@@ -9,6 +9,7 @@ GEM
9
9
addressable (2.7.0)
10
10
public_suffix (>= 2.0.2, < 5.0)
11
11
ast (2.4.0)
12
+ backport (1.1.2)
12
13
byebug (11.0.1)
13
14
childprocess (3.0.0)
14
15
coderay (1.1.2)
@@ -16,9 +17,13 @@ GEM
16
17
safe_yaml (~> 1.0.0)
17
18
diff-lcs (1.3)
18
19
hashdiff (1.0.0)
20
+ htmlentities (4.3.4)
19
21
iniparse (1.4.4)
20
22
jaro_winkler (1.5.3)
21
23
method_source (0.9.2)
24
+ mini_portile2 (2.4.0)
25
+ nokogiri (1.10.4)
26
+ mini_portile2 (~> 2.4.0)
22
27
overcommit (0.50.0)
23
28
childprocess (>= 0.6.3, < 4)
24
29
iniparse (~> 1.4)
@@ -36,6 +41,8 @@ GEM
36
41
public_suffix (4.0.1)
37
42
rainbow (3.0.0)
38
43
rake (10.5.0)
44
+ reverse_markdown (1.3.0)
45
+ nokogiri
39
46
rspec (3.8.0)
40
47
rspec-core (~> 3.8.0)
41
48
rspec-expectations (~> 3.8.0)
@@ -60,11 +67,26 @@ GEM
60
67
unicode-display_width (~> 1.4.0)
61
68
ruby-progressbar (1.10.1)
62
69
safe_yaml (1.0.5)
70
+ solargraph (0.37.2)
71
+ backport (~> 1.1)
72
+ bundler (>= 1.17.2)
73
+ htmlentities (~> 4.3, >= 4.3.4)
74
+ jaro_winkler (~> 1.5)
75
+ nokogiri (~> 1.9, >= 1.9.1)
76
+ parser (~> 2.3)
77
+ reverse_markdown (~> 1.0, >= 1.0.5)
78
+ rubocop (~> 0.52)
79
+ thor (~> 0.19, >= 0.19.4)
80
+ tilt (~> 2.0)
81
+ yard (~> 0.9)
82
+ thor (0.20.3)
83
+ tilt (2.0.10)
63
84
unicode-display_width (1.4.1)
64
85
webmock (3.7.6)
65
86
addressable (>= 2.3.6)
66
87
crack (>= 0.3.2)
67
88
hashdiff (>= 0.4.0, < 2.0.0)
89
+ yard (0.9.20)
68
90
69
91
PLATFORMS
70
92
ruby
@@ -78,6 +100,7 @@ DEPENDENCIES
78
100
rake (~> 10.0)
79
101
rspec (~> 3.0)
80
102
rubocop (~> 0.65.0)
103
+ solargraph
81
104
webmock
82
105
83
106
BUNDLED WITH
data/README.md CHANGED
@@ -57,19 +57,6 @@ puts JSON.parse(github.get("/repositories", query: { since: 364 }).body)
57
57
puts JSON.parse(github.post("/user/repos", body: { name: "Just setting up my Bearer.sh" }).body)
58
58
```
59
59
60
- ### Calling custom functions
61
-
62
- ```ruby
63
- require "bearer"
64
-
65
- bearer = Bearer.new("BEARER_SECRET_KEY")
66
- github = bearer.integration("your integration id")
67
-
68
- puts github.invoke("your function name")
69
- ```
70
-
71
- [Learn more](https://docs.bearer.sh/working-with-bearer/manipulating-apis) on how to use custom functions with Bearer.sh.
72
-
73
60
### Global configuration
74
61
75
62
You can configure the client globally with your [Secret Key](https://app.bearer.sh/keys):
@@ -87,6 +74,22 @@ github = Bearer.integration("your integration id").auth("your auth id")
87
74
88
75
puts JSON.parse(github.get("/repositories").body)
89
76
```
77
+ ### Setting the request timeout
78
+
79
+ By default in bearer client read and open timeouts are set to 5 seconds. Bearer allows to increase the read timeout to up to 30 seconds
80
+
81
+ ```ruby
82
+ Bearer::Configuration.setup do |config|
83
+ # increase the request timeout to 10 seconds, and reduce the open connection timeout to 1 second
84
+ config.http_client_settings = { read_timeout: 10, open_timeout: 1 }
85
+ end
86
+
87
+ # it is also possible to set the read_timeout and other Net::HTTP client settings per integration
88
+
89
+ github = Bearer.integration("your integration id", { read_timeout: 10 })
90
+
91
+ puts JSON.parse(github.get("/repositories").body) # This request will timeout after 10 seconds
92
+ ```
90
93
91
94
## Development
92
95
data/bearer.gemspec CHANGED
@@ -33,4 +33,6 @@ Gem::Specification.new do |spec|
33
33
spec.add_development_dependency "pry"
34
34
spec.add_development_dependency "pry-byebug"
35
35
spec.add_development_dependency "overcommit"
36
+ spec.add_development_dependency "webmock"
37
+ spec.add_development_dependency "solargraph"
36
38
end
data/lib/bearer.rb CHANGED
@@ -3,31 +3,34 @@
3
3
require_relative "./bearer/configuration"
4
4
require_relative "./bearer/integration"
5
5
6
+ # Ruby bindings for Bearer
6
7
class Bearer
7
- # Public: Create an instance of the Bearer client
8
- #
9
- # api_key - developer API Key from the Dashboard. Defaults to the value from the `Bearer::Configuration` object
10
- def initialize(secret_key = Bearer::Configuration.secret_key, integration_host: nil)
8
+ # Create an instance of the Bearer client
9
+ # @param secret_key [String] developer secret Key from https://app.bearer.sh/settings.
10
+ # @param host [String] used internally
11
+ def initialize(secret_key = Bearer::Configuration.secret_key, host: Bearer::Configuration.host)
11
12
@secret_key = secret_key
12
- @integration_host = integration_host || Bearer::Configuration.integration_host
13
+ @host = host
13
14
end
14
15
15
- # Public: Return an integration client
16
+ # Return an integration client
16
17
#
17
- # integration_id - the integration's unique identifier from the Dashboard
18
- def integration(integration_id)
19
- Integration.new(integration_id: integration_id, integration_host: @integration_host, secret_key: @secret_key)
18
+ # @param http_client_settings [Hash<String,String>] sent as keyword arguments to Net::HTTP.start method
19
+ # @param integration_id [String] bearer api id
20
+ # @return [Bearer::Integration]
21
+ def integration(integration_id, http_client_settings: {})
22
+ Integration.new(
23
+ integration_id: integration_id,
24
+ host: @host,
25
+ secret_key: @secret_key,
26
+ http_client_settings: http_client_settings
27
+ )
20
28
end
21
29
22
- class << self
23
- def call(integration_buid, integration_name, params: {}, body: {})
24
- integration(integration_buid).invoke(integration_name, body: body, query: params)
25
- end
26
-
30
+ # @see {Bearer#integration}
31
+ # @param (see #integration)
32
+ # @return [Bearer::Integration]
33
+ def self.integration(integration_id, http_client_settings: {})
34
+ new.integration(integration_id, http_client_settings: http_client_settings)
27
- alias invoke call
28
-
29
- def integration(integration_id)
30
- new.integration(integration_id)
31
- end
32
35
end
33
36
end
data/lib/bearer/configuration.rb CHANGED
@@ -5,36 +5,58 @@ require "singleton"
5
5
require_relative "./errors"
6
6
7
7
class Bearer
8
+ # stores global Bearer configuration options
9
+ # @see https://app.bearer.sh/settings
10
+ # @attr_writer [String] secret_key secret key from https://app.bearer.sh/settings
11
+ # @attr_writer [String] publishable_key publishable key from https://app.bearer.sh/settings
12
+ # @attr_writer [String] encryption_key encryption key from https://app.bearer.sh/settings
13
+ # @attr_writer [Hash] http_client_settings options passed as a parameters to Net::HTTP#start
14
+ # @attr_writer [String] host mainly used internally
8
15
class Configuration
9
16
include Singleton
10
17
11
- PRODUCTION_INTEGRATION_HOST = "https://int.bearer.sh"
18
+ PRODUCTION_INTEGRATION_HOST = "https://proxy.bearer.sh"
12
19
13
20
FIELDS = %i[
14
21
secret_key
15
22
publishable_key
16
23
encryption_key
17
- integration_host
18
- http_client_params
24
+ host
25
+ http_client_settings
19
26
].freeze
20
27
21
28
DEPRECATED_FIELDS = %i[
22
29
api_key
23
30
client_id
24
31
secret
32
+ integration_host
33
+ http_client_params
25
34
].freeze
26
35
27
36
DEFAULT_READ_TIMEOUT = 5
28
37
DEFAULT_OPEN_TIMEOUT = 5
29
38
30
- # @return [Hash]
39
+ # @return [String]
31
40
def integration_host
32
- @integration_host ||= PRODUCTION_INTEGRATION_HOST
41
+ deprecate("integration_host", "host")
42
+ host
43
+ end
44
+
45
+ # @return [String]
46
+ def host
47
+ @host ||= PRODUCTION_INTEGRATION_HOST
33
48
end
34
49
35
50
# @return [Hash]
51
+ def http_client_settings
52
+ default_http_client_settings.merge(@http_client_settings || {})
53
+ end
54
+
55
+ # @deprecated use {#http_client_settings} instead
56
+ # @return [Hash<String,String>]
36
57
def http_client_params
37
- default_http_client_params.merge(@http_client_params || {})
58
+ deprecate("http_client_params", "http_client_settings")
59
+ http_client_settings
38
60
end
39
61
40
62
# @return [String]
@@ -52,18 +74,21 @@ class Bearer
52
74
raise_if_missing(:encryption_key)
53
75
end
54
76
77
+ # @deprecated Use {#secret_key} instead.
55
78
# @return [String]
56
79
def api_key
57
80
deprecate("api_key", "secret_key")
58
81
secret_key
59
82
end
60
83
84
+ # @deprecated Use {#publishable_key} instead.
61
85
# @return [String]
62
86
def client_id
63
87
deprecate("client_id", "publishable_key")
64
88
publishable_key
65
89
end
66
90
91
+ # @deprecated Use {#encryption_key} instead.
67
92
# @return [String]
68
93
def secret
69
94
deprecate("secret", "encryption_key")
@@ -72,21 +97,41 @@ class Bearer
72
97
73
98
attr_writer(*FIELDS)
74
99
100
+ # @deprecated Use {#secret_key=} instead.
101
+ # @return [void]
75
102
def api_key=(value)
76
103
deprecate("api_key=", "secret_key=")
77
104
@secret_key = value
78
105
end
79
106
107
+ # @deprecated Use {#publishable_key=} instead.
108
+ # @return [void]
80
109
def client_id=(value)
81
110
deprecate("client_id=", "publishable_key=")
82
111
@publishable_key = value
83
112
end
84
113
114
+ # @deprecated Use {#encryption_key=} instead.
115
+ # @return [void]
85
116
def secret=(value)
86
117
deprecate("secret=", "encryption_key=")
87
118
@encryption_key = value
88
119
end
89
120
121
+ # @deprecated Use {#host=} instead.
122
+ # @return [void]
123
+ def integration_host=(value)
124
+ deprecate("integration_host=", "host=")
125
+ @host = value
126
+ end
127
+
128
+ # @deprecated Use {#http_client_settings=} instead.
129
+ # @return [void]
130
+ def http_client_params=(value)
131
+ deprecate("http_client_params=", "http_client_settings=")
132
+ @http_client_settings = value
133
+ end
134
+
90
135
class << self
91
136
ALL_METHODS = [*FIELDS, *DEPRECATED_FIELDS].freeze
92
137
EXISTING_METHODS = ALL_METHODS.flat_map { |field| [field, "#{field}=".to_sym] }
@@ -138,7 +183,7 @@ class Bearer
138
183
end
139
184
140
185
# @return [Hash]
141
- def default_http_client_params
186
+ def default_http_client_settings
142
187
{
143
188
read_timeout: read_timeout,
144
189
open_timeout: open_timeout
data/lib/bearer/errors.rb CHANGED
@@ -3,14 +3,5 @@
3
3
class Bearer
4
4
module Errors
5
5
class Configuration < StandardError; end
6
-
7
- class FunctionError < StandardError
8
- attr_reader :data
9
-
10
- def initialize(data)
11
- super(data&.to_json)
12
- @data = data
13
- end
14
- end
15
6
end
16
7
end
data/lib/bearer/integration.rb CHANGED
@@ -2,152 +2,122 @@
2
2
3
3
require "net/http"
4
4
require "json"
5
- require "forwardable"
6
5
7
6
require_relative "./errors"
8
7
require_relative "./version"
9
8
10
9
class Bearer
11
10
class Integration
12
- FUNCTIONS_PATH = "api/v4/functions/backend"
13
- PROXY_FUNCTION_NAME = "bearer-proxy"
14
- extend Forwardable
15
-
11
+ # @param integration_id [String] integration id
12
+ # @param host [String] "https://proxy.bearer.sh" | "https://proxy.staging.bearer.sh"
13
+ # @param http_client_settings [Hash<String,String>] http client settings see Net::HTTP#start
14
+ # @param auth_id [String] the auth id used to connect
15
+ # @param setup_id [String] the setup id used to store the credentials
16
+ # @param @deprecated read_timeout [String] use http_client_settings instead
16
17
def initialize(
17
18
integration_id:,
18
- integration_host:,
19
+ host:,
19
20
secret_key:,
21
+ http_client_settings: {},
20
22
read_timeout: nil,
21
- setup_id: nil,
22
- auth_id: nil
23
+ auth_id: nil,
24
+ setup_id: nil
23
25
)
24
26
@integration_id = integration_id
25
- @integration_host = integration_host
27
+ @host = host
26
28
@secret_key = secret_key
27
- @setup_id = setup_id
28
29
@auth_id = auth_id
29
30
@read_timeout = read_timeout
31
+ @http_client_settings = http_client_settings
32
+ @setup_id = setup_id
30
33
end
31
34
32
- # Public: Invoke an integration function
33
- #
34
- # function_name - function to invoke
35
- # body - data to pass in the body of the request
35
+ # Returns a new integration client instance that will use the given auth id for requests
36
+ # @param auth_id [String] the auth id used to connect
37
+ # @return [Bearer::Integration]
38
+ def auth(auth_id)
36
- # query - parameters to pass in the query string of the request
37
- #
38
- # Returns the response from the function
39
- def invoke(function_name, body: nil, query: nil)
40
- url = "#{@integration_host}/#{FUNCTIONS_PATH}/#{@integration_id}/#{function_name}"
41
- headers = {
42
- "Content-Type" => "application/json",
43
- "Authorization": @secret_key,
44
- "User-Agent" => "Bearer-Ruby (#{Bearer::VERSION})"
45
- }
46
-
47
- response = make_request(method: "POST", url: url, query: query, body: body, headers: headers)
48
-
49
- JSON.parse(response.body).tap do |response_data|
50
- raise Errors::FunctionError, response_data["error"] if response_data["error"]
51
- end
52
- end
53
-
54
- # Public: Returns a new integration client instance that will use the given setup id for requests
55
- #
56
- # setup_id - the setup id from the dashboard
57
- def setup(setup_id)
58
39
self.class.new(
59
40
integration_id: @integration_id,
60
- integration_host: @integration_host,
41
+ host: @host,
61
42
secret_key: @secret_key,
62
- setup_id: setup_id,
43
+ auth_id: auth_id
63
- auth_id: @auth_id
64
44
)
65
45
end
66
46
67
- # Public: Returns a new integration client instance that will use the given auth id for requests
68
- #
69
- # auth_id - the auth id used to connect
70
- def auth(auth_id)
47
+ # Returns a new integration client instance that will use the given setup id for requests
48
+ # @param setup_id [String] uuid setup id used to store credentials
49
+ # @return [Bearer::Integration]
50
+ def setup(setup_id)
71
51
self.class.new(
72
52
integration_id: @integration_id,
73
- integration_host: @integration_host,
53
+ host: @host,
74
54
secret_key: @secret_key,
75
- setup_id: @setup_id,
76
- auth_id: auth_id
55
+ setup_id: setup_id,
56
+ auth_id: @auth_id
77
57
)
78
58
end
79
59
80
- # Public: An alias for `#auth`
60
+ # An alias for `#auth`
61
+ # @see {#auth}
81
62
def authenticate(auth_id)
82
63
auth(auth_id)
83
64
end
84
65
85
- # Public: Makes a GET request to the API configured for this integration and returns the response
86
- #
66
+ # Makes a HEAD request to the API configured for this integration and returns the response
67
+ # @param (see #request)
87
- # See `self.request` for a description of the parameters
88
68
def get(endpoint, headers: nil, body: nil, query: nil)
89
69
request("GET", endpoint, headers: headers, body: body, query: query)
90
70
end
91
71
92
- # Public: Makes a GET request to the API configured for this integration and returns the response
93
- #
72
+ # Makes a HEAD request to the API configured for this integration and returns the response
73
+ # @param (see #request)
94
- # See `self.request` for a description of the parameters
95
74
def head(endpoint, headers: nil, body: nil, query: nil)
96
75
request("HEAD", endpoint, headers: headers, body: body, query: query)
97
76
end
98
77
99
- # Public: Makes a GET request to the API configured for this integration and returns the response
100
- #
78
+ # Makes a POST request to the API configured for this integration and returns the response
79
+ # @param (see #request)
101
- # See `self.request` for a description of the parameters
102
80
def post(endpoint, headers: nil, body: nil, query: nil)
103
81
request("POST", endpoint, headers: headers, body: body, query: query)
104
82
end
105
83
106
- # Public: Makes a GET request to the API configured for this integration and returns the response
107
- #
84
+ # Makes a PUT request to the API configured for this integration and returns the response
85
+ # @param (see #request)
108
- # See `self.request` for a description of the parameters
109
86
def put(endpoint, headers: nil, body: nil, query: nil)
110
87
request("PUT", endpoint, headers: headers, body: body, query: query)
111
88
end
112
89
113
- # Public: Makes a GET request to the API configured for this integration and returns the response
114
- #
90
+ # Makes a GET request to the API configured for this integration and returns the response
91
+ # @param (see #request)
115
- # See `self.request` for a description of the parameters
116
92
def patch(endpoint, headers: nil, body: nil, query: nil)
117
93
request("PATCH", endpoint, headers: headers, body: body, query: query)
118
94
end
119
95
120
- # Public: Makes a GET request to the API configured for this integration and returns the response
121
- #
96
+ # Makes a DELETE request to the API configured for this integration and returns the response
97
+ # @param (see #request)
122
- # See `self.request` for a description of the parameters
123
98
def delete(endpoint, headers: nil, body: nil, query: nil)
124
99
request("DELETE", endpoint, headers: headers, body: body, query: query)
125
100
end
126
101
127
- # Public: Makes a request to the API configured for this integration and returns the response
128
-
129
- # method - GET/HEAD/POST/PUT/PATCH/DELETE
130
- # endpoint - the URL relative to the configured API's base URL
131
- # headers - any headers to send to the API
132
- # body - any request body data to send
102
+ # Makes a request to the API configured for this integration and returns the response
103
+ # @param method [String] GET/HEAD/POST/PUT/PATCH/DELETE
104
+ # @param endpoint [String] the URL relative to the configured API's base URL
105
+ # @param headers [Hash<String, String>] any headers to send to the API
106
+ # @param body [Hash] any request body data to send
107
+ # @param query [Hash<String, String>] parameters to add to the URL's query string
133
- # query - parameters to add to the URL's query string
134
108
def request(method, endpoint, headers: nil, body: nil, query: nil)
135
109
pre_headers = {
136
110
"Authorization": @secret_key,
137
111
"User-Agent": "Bearer-Ruby (#{Bearer::VERSION})",
138
112
"Bearer-Auth-Id": @auth_id,
139
113
"Bearer-Setup-Id": @setup_id,
140
- # TODO: Remove this when integration service content type support is fixed
141
114
"Content-Type": "application/json"
142
115
}
143
116
144
- headers&.each do |key, value|
117
+ request_headers = pre_headers.merge(headers || {}).reject { |_k, v| v.nil? }
145
- pre_headers["Bearer-Proxy-#{key}"] = value
146
- end
147
118
148
- request_headers = pre_headers.reject { |_k, v| v.nil? }
149
119
endpoint = endpoint.sub(%r{\A/}, "")
150
- url = "#{@integration_host}/#{FUNCTIONS_PATH}/#{@integration_id}/#{PROXY_FUNCTION_NAME}/#{endpoint}"
120
+ url = "#{@host}/#{@integration_id}/#{endpoint}"
151
121
152
122
make_request(method: method, url: url, query: query, body: body, headers: request_headers)
153
123
end
@@ -155,8 +125,8 @@ class Bearer
155
125
private
156
126
157
127
# @return [Hash]
158
- def http_client_params
159
- Bearer::Configuration.http_client_params
128
+ def http_client_settings
129
+ Bearer::Configuration.http_client_settings.merge(@http_client_settings)
160
130
end
161
131
162
132
def make_request(method:, url:, query:, body:, headers:)
@@ -167,7 +137,7 @@ class Bearer
167
137
parsed_url.hostname,
168
138
parsed_url.port,
169
139
use_ssl: parsed_url.scheme == "https",
170
- **http_client_params
140
+ **http_client_settings
171
141
) do |http|
172
142
http.send_request(method, parsed_url, body ? body.to_json : nil, headers)
173
143
end
data/lib/bearer/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
# frozen_string_literal: true
2
2
3
3
class Bearer
4
- VERSION = "1.1.0"
4
+ VERSION = "2.0.0"
5
5
end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
--- !ruby/object:Gem::Specification
2
2
name: bearer
3
3
version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
platform: ruby
6
6
authors:
7
7
- Bearer Team<engineering@bearer.sh>
8
8
autorequire:
9
9
bindir: exe
10
10
cert_chain: []
11
- date: 2019-10-02 00:00:00.000000000 Z
11
+ date: 2019-10-09 00:00:00.000000000 Z
12
12
dependencies:
13
13
- !ruby/object:Gem::Dependency
14
14
name: bundler
@@ -108,6 +108,34 @@ dependencies:
108
108
- - ">="
109
109
- !ruby/object:Gem::Version
110
110
version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: solargraph
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
111
139
description: Ruby client to universally call any API using Bearer.sh
112
140
email:
113
141
- engineering@bearer.sh
@@ -160,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
188
- !ruby/object:Gem::Version
161
189
version: '0'
162
190
requirements: []
163
- rubygems_version: 3.0.3
191
+ rubygems_version: 3.0.1
164
192
signing_key:
165
193
specification_version: 4
166
194
summary: Bearer Ruby