my_api_client 0.14.0 → 0.18.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 +4 -4
- data/.circleci/config.yml +99 -53
- data/.dependabot/config.yml +19 -1
- data/.rubocop.yml +5 -1
- data/.rubocop_challenge.yml +5 -0
- data/.rubocop_todo.yml +53 -1
- data/CHANGELOG.md +192 -0
- data/Gemfile +0 -3
- data/Gemfile.lock +60 -56
- data/README.jp.md +159 -24
- data/bin/console +4 -0
- data/example/api_clients/application_api_client.rb +2 -10
- data/example/api_clients/my_pagination_api_client.rb +18 -0
- data/example/api_clients/my_rest_api_client.rb +9 -3
- data/lib/generators/rails/USAGE +1 -1
- data/lib/generators/rails/api_client_generator.rb +6 -0
- data/lib/generators/rails/templates/api_client.rb.erb +1 -1
- data/lib/generators/rails/templates/application_api_client.rb.erb +0 -11
- data/lib/generators/rspec/USAGE +1 -1
- data/lib/generators/rspec/api_client_generator.rb +6 -0
- data/lib/generators/rspec/templates/api_client_spec.rb.erb +23 -16
- data/lib/my_api_client.rb +7 -0
- data/lib/my_api_client/base.rb +4 -2
- data/lib/my_api_client/default_error_handlers.rb +64 -0
- data/lib/my_api_client/error_handling.rb +6 -6
- data/lib/my_api_client/error_handling/generator.rb +23 -7
- data/lib/my_api_client/errors.rb +1 -53
- data/lib/my_api_client/errors/api_limit_error.rb +6 -0
- data/lib/my_api_client/errors/client_error.rb +93 -0
- data/lib/my_api_client/errors/network_error.rb +43 -0
- data/lib/my_api_client/errors/server_error.rb +42 -0
- data/lib/my_api_client/params/params.rb +1 -3
- data/lib/my_api_client/request.rb +29 -34
- data/lib/my_api_client/request/basic.rb +32 -0
- data/lib/my_api_client/request/executor.rb +1 -1
- data/lib/my_api_client/request/pagination.rb +39 -0
- data/lib/my_api_client/version.rb +1 -1
- data/my_api/.ruby-version +1 -1
- data/my_api/Gemfile.lock +86 -86
- data/my_api/README.md +6 -0
- data/my_api/app/controllers/pagination_controller.rb +58 -0
- data/my_api/config/routes.rb +1 -0
- data/my_api/spec/controllers/pagination_controller_spec.rb +73 -0
- data/my_api/spec/controllers/rest_controller_spec.rb +23 -5
- data/my_api/spec/spec_helper.rb +5 -0
- data/my_api_client.gemspec +2 -2
- data/rails_app/rails_5.2/.rspec +3 -0
- data/rails_app/rails_5.2/Gemfile +17 -0
- data/rails_app/rails_5.2/Gemfile.lock +171 -0
- data/rails_app/rails_5.2/README.md +24 -0
- data/rails_app/rails_5.2/Rakefile +8 -0
- data/rails_app/rails_5.2/app/controllers/application_controller.rb +4 -0
- data/rails_app/rails_5.2/app/jobs/application_job.rb +4 -0
- data/rails_app/rails_5.2/bin/bundle +5 -0
- data/rails_app/rails_5.2/bin/rails +6 -0
- data/rails_app/rails_5.2/bin/rake +6 -0
- data/rails_app/rails_5.2/bin/setup +27 -0
- data/rails_app/rails_5.2/bin/update +27 -0
- data/rails_app/rails_5.2/config.ru +7 -0
- data/rails_app/rails_5.2/config/application.rb +37 -0
- data/rails_app/rails_5.2/config/boot.rb +6 -0
- data/rails_app/rails_5.2/config/credentials.yml.enc +1 -0
- data/rails_app/rails_5.2/config/environment.rb +7 -0
- data/rails_app/rails_5.2/config/environments/development.rb +41 -0
- data/rails_app/rails_5.2/config/environments/production.rb +70 -0
- data/rails_app/rails_5.2/config/environments/test.rb +38 -0
- data/rails_app/rails_5.2/config/initializers/application_controller_renderer.rb +9 -0
- data/rails_app/rails_5.2/config/initializers/backtrace_silencers.rb +8 -0
- data/rails_app/rails_5.2/config/initializers/cors.rb +17 -0
- data/rails_app/rails_5.2/config/initializers/filter_parameter_logging.rb +6 -0
- data/rails_app/rails_5.2/config/initializers/inflections.rb +17 -0
- data/rails_app/rails_5.2/config/initializers/mime_types.rb +5 -0
- data/rails_app/rails_5.2/config/initializers/wrap_parameters.rb +11 -0
- data/rails_app/rails_5.2/config/locales/en.yml +33 -0
- data/rails_app/rails_5.2/config/routes.rb +5 -0
- data/rails_app/rails_5.2/config/spring.rb +8 -0
- data/rails_app/rails_5.2/public/robots.txt +1 -0
- data/rails_app/rails_5.2/spec/rails_helper.rb +14 -0
- data/rails_app/rails_5.2/spec/spec_helper.rb +13 -0
- data/rails_app/rails_6.0/.rspec +3 -0
- data/rails_app/rails_6.0/Gemfile +17 -0
- data/rails_app/rails_6.0/Gemfile.lock +186 -0
- data/rails_app/rails_6.0/README.md +24 -0
- data/rails_app/rails_6.0/Rakefile +8 -0
- data/rails_app/rails_6.0/app/controllers/application_controller.rb +4 -0
- data/rails_app/rails_6.0/app/jobs/application_job.rb +9 -0
- data/rails_app/rails_6.0/bin/rails +6 -0
- data/rails_app/rails_6.0/bin/rake +6 -0
- data/rails_app/rails_6.0/bin/setup +27 -0
- data/rails_app/rails_6.0/config.ru +7 -0
- data/rails_app/rails_6.0/config/application.rb +39 -0
- data/rails_app/rails_6.0/config/boot.rb +6 -0
- data/rails_app/rails_6.0/config/credentials.yml.enc +1 -0
- data/rails_app/rails_6.0/config/environment.rb +7 -0
- data/rails_app/rails_6.0/config/environments/development.rb +39 -0
- data/rails_app/rails_6.0/config/environments/production.rb +90 -0
- data/rails_app/rails_6.0/config/environments/test.rb +41 -0
- data/rails_app/rails_6.0/config/initializers/application_controller_renderer.rb +9 -0
- data/rails_app/rails_6.0/config/initializers/backtrace_silencers.rb +8 -0
- data/rails_app/rails_6.0/config/initializers/cors.rb +17 -0
- data/rails_app/rails_6.0/config/initializers/filter_parameter_logging.rb +6 -0
- data/rails_app/rails_6.0/config/initializers/inflections.rb +17 -0
- data/rails_app/rails_6.0/config/initializers/mime_types.rb +5 -0
- data/rails_app/rails_6.0/config/initializers/wrap_parameters.rb +11 -0
- data/rails_app/rails_6.0/config/locales/en.yml +33 -0
- data/rails_app/rails_6.0/config/routes.rb +5 -0
- data/rails_app/rails_6.0/config/spring.rb +8 -0
- data/rails_app/rails_6.0/public/robots.txt +1 -0
- data/rails_app/rails_6.0/spec/rails_helper.rb +14 -0
- data/rails_app/rails_6.0/spec/spec_helper.rb +13 -0
- metadata +81 -8
- data/gemfiles/rails_4.2.gemfile +0 -15
- data/renovate.json +0 -21
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MyApiClient
|
4
|
+
# For 4xx client error
|
5
|
+
class ClientError < Error
|
6
|
+
# 400 Bad Request
|
7
|
+
class BadRequest < ClientError; end
|
8
|
+
|
9
|
+
# 401 Unauthorized
|
10
|
+
class Unauthorized < ClientError; end
|
11
|
+
|
12
|
+
# 402 Payment Required
|
13
|
+
class PaymentRequired < ClientError; end
|
14
|
+
|
15
|
+
# 403 Forbidden
|
16
|
+
class Forbidden < ClientError; end
|
17
|
+
|
18
|
+
# 404 Not Found
|
19
|
+
class NotFound < ClientError; end
|
20
|
+
|
21
|
+
# 405 Method Not Allowed
|
22
|
+
class MethodNotAllowed < ClientError; end
|
23
|
+
|
24
|
+
# 406 Not Acceptable
|
25
|
+
class NotAcceptable < ClientError; end
|
26
|
+
|
27
|
+
# 407 Proxy Authentication Required
|
28
|
+
class ProxyAuthenticationRequired < ClientError; end
|
29
|
+
|
30
|
+
# 408 Request Timeout
|
31
|
+
class RequestTimeout < ClientError; end
|
32
|
+
|
33
|
+
# 409 Conflict
|
34
|
+
class Conflict < ClientError; end
|
35
|
+
|
36
|
+
# 410 Gone
|
37
|
+
class Gone < ClientError; end
|
38
|
+
|
39
|
+
# 411 Length Required
|
40
|
+
class LengthRequired < ClientError; end
|
41
|
+
|
42
|
+
# 412 Precondition Failed
|
43
|
+
class PreconditionFailed < ClientError; end
|
44
|
+
|
45
|
+
# 413 Payload Too Large
|
46
|
+
class RequestEntityTooLarge < ClientError; end
|
47
|
+
|
48
|
+
# 414 URI Too Long
|
49
|
+
class RequestUriTooLong < ClientError; end
|
50
|
+
|
51
|
+
# 415 Unsupported Media Type
|
52
|
+
class UnsupportedMediaType < ClientError; end
|
53
|
+
|
54
|
+
# 416 Range Not Satisfiable
|
55
|
+
class RequestedRangeNotSatisfiable < ClientError; end
|
56
|
+
|
57
|
+
# 417 Expectation Failed
|
58
|
+
class ExpectationFailed < ClientError; end
|
59
|
+
|
60
|
+
# 418 I'm a teapot
|
61
|
+
class IamTeapot < ClientError; end
|
62
|
+
|
63
|
+
# 421 Misdirected Request
|
64
|
+
class MisdirectedRequest < ClientError; end
|
65
|
+
|
66
|
+
# 422 Unprocessable Entity
|
67
|
+
class UnprocessableEntity < ClientError; end
|
68
|
+
|
69
|
+
# 423 Locked
|
70
|
+
class Locked < ClientError; end
|
71
|
+
|
72
|
+
# 424 Failed Dependency
|
73
|
+
class FailedDependency < ClientError; end
|
74
|
+
|
75
|
+
# 425 Too Early
|
76
|
+
class TooEarly < ClientError; end
|
77
|
+
|
78
|
+
# 426 Upgrade Required
|
79
|
+
class UpgradeRequired < ClientError; end
|
80
|
+
|
81
|
+
# 428 Precondition Required
|
82
|
+
class PreconditionRequired < ClientError; end
|
83
|
+
|
84
|
+
# 429 Too Many Requests
|
85
|
+
class TooManyRequests < ClientError; end
|
86
|
+
|
87
|
+
# 431 Request Header Fields Too Large
|
88
|
+
class RequestHeaderFieldsTooLarge < ClientError; end
|
89
|
+
|
90
|
+
# 451 Unavailable for Legal Reasons
|
91
|
+
class UnavailableForLegalReasons < ClientError; end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MyApiClient
|
4
|
+
NETWORK_ERRORS = [
|
5
|
+
Faraday::TimeoutError,
|
6
|
+
Faraday::ConnectionFailed,
|
7
|
+
Faraday::SSLError,
|
8
|
+
OpenSSL::SSL::SSLError,
|
9
|
+
Net::OpenTimeout,
|
10
|
+
Net::ReadTimeout,
|
11
|
+
SocketError,
|
12
|
+
].freeze
|
13
|
+
|
14
|
+
# Raises it when occurred to some network error
|
15
|
+
class NetworkError < Error
|
16
|
+
attr_reader :original_error
|
17
|
+
|
18
|
+
# Initialize the error class
|
19
|
+
#
|
20
|
+
# @param params [MyApiClient::Params::Params]
|
21
|
+
# The request and response parameters
|
22
|
+
# @param original_error [StandardError]
|
23
|
+
# Some network error
|
24
|
+
def initialize(params, original_error)
|
25
|
+
@original_error = original_error
|
26
|
+
super params, original_error.message
|
27
|
+
end
|
28
|
+
|
29
|
+
# Returns contents as string for to be readable for human
|
30
|
+
#
|
31
|
+
# @return [String] Contents as string
|
32
|
+
def inspect
|
33
|
+
{ error: original_error, params: params }.inspect
|
34
|
+
end
|
35
|
+
|
36
|
+
# Generate metadata for bugsnag.
|
37
|
+
#
|
38
|
+
# @return [Hash] Metadata for bugsnag
|
39
|
+
def metadata
|
40
|
+
super.merge(original_error: original_error.inspect)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MyApiClient
|
4
|
+
# For 5xx server error
|
5
|
+
class ServerError < Error
|
6
|
+
# 500 Internal Server Error
|
7
|
+
class InternalServerError < ServerError; end
|
8
|
+
|
9
|
+
# 501 Not Implemented
|
10
|
+
class NotImplemented < ServerError; end
|
11
|
+
|
12
|
+
# 502 Bad Gateway
|
13
|
+
class BadGateway < ServerError; end
|
14
|
+
|
15
|
+
# 503 Service Unavailable
|
16
|
+
class ServiceUnavailable < ServerError; end
|
17
|
+
|
18
|
+
# 504 Gateway Timeout
|
19
|
+
class GatewayTimeout < ServerError; end
|
20
|
+
|
21
|
+
# 505 HTTP Version Not Supported
|
22
|
+
class HttpVersionNotSupported < ServerError; end
|
23
|
+
|
24
|
+
# 506 Variant Also Negotiates
|
25
|
+
class VariantAlsoNegotiates < ServerError; end
|
26
|
+
|
27
|
+
# 507 Insufficient Storage
|
28
|
+
class InsufficientStorage < ServerError; end
|
29
|
+
|
30
|
+
# 508 Loop Detected
|
31
|
+
class LoopDetected < ServerError; end
|
32
|
+
|
33
|
+
# 509 Bandwidth Limit Exceeded
|
34
|
+
class BandwidthLimitExceeded < ServerError; end
|
35
|
+
|
36
|
+
# 510 Not Extended
|
37
|
+
class NotExtended < ServerError; end
|
38
|
+
|
39
|
+
# 511 Network Authentication Required
|
40
|
+
class NetworkAuthenticationRequired < ServerError; end
|
41
|
+
end
|
42
|
+
end
|
@@ -40,9 +40,7 @@ module MyApiClient
|
|
40
40
|
# @return [Hash] Metadata for bugsnag
|
41
41
|
def request_metadata
|
42
42
|
if request.present?
|
43
|
-
request.metadata.
|
44
|
-
memo[:"request_#{key}"] = value
|
45
|
-
end
|
43
|
+
request.metadata.transform_keys { |key| :"request_#{key}" }
|
46
44
|
else
|
47
45
|
{}
|
48
46
|
end
|
@@ -1,41 +1,38 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MyApiClient
|
4
|
-
#
|
4
|
+
# Provides HTTP request method.
|
5
5
|
module Request
|
6
|
-
|
7
|
-
|
8
|
-
HTTP_METHODS.each do |http_method|
|
9
|
-
class_eval <<~METHOD, __FILE__, __LINE__ + 1
|
10
|
-
# Executes HTTP request with #{http_method.upcase} method
|
11
|
-
#
|
12
|
-
# @param pathname [String]
|
13
|
-
# Pathname of the request target URL.
|
14
|
-
# It's joined with the defined `endpoint`.
|
15
|
-
# @param headers [Hash, nil]
|
16
|
-
# Request headers.
|
17
|
-
# @param query [Hash, nil]
|
18
|
-
# Query string.
|
19
|
-
# @param body [Hash, nil]
|
20
|
-
# Request body. You should not specify it when use GET method.
|
21
|
-
# @return [Sawyer::Resouce]
|
22
|
-
# Response body instance.
|
23
|
-
def #{http_method}(pathname, headers: nil, query: nil, body: nil)
|
24
|
-
query_strings = query.present? ? '?' + query&.to_query : ''
|
25
|
-
uri = URI.join(File.join(endpoint, pathname), query_strings)
|
26
|
-
response = call(:_request, :#{http_method}, uri, headers, body)
|
27
|
-
response.data
|
28
|
-
end
|
29
|
-
METHOD
|
30
|
-
end
|
31
|
-
alias put patch
|
6
|
+
include Basic
|
7
|
+
include Pagination
|
32
8
|
|
33
9
|
private
|
34
10
|
|
35
|
-
# Executes HTTP request.
|
11
|
+
# Executes HTTP request with relative URI.
|
12
|
+
#
|
13
|
+
# @param http_method [Symbol]
|
14
|
+
# HTTP method. e.g. `:get`, `:post`, `:put`, `:patch` and `:delete`.
|
15
|
+
# @param pathname [String]
|
16
|
+
# Pathname of the request target URL.
|
17
|
+
# It's joined with the defined by `endpoint`.
|
18
|
+
# @param headers [Hash, nil]
|
19
|
+
# Request headers.
|
20
|
+
# @param query [Hash, nil]
|
21
|
+
# Query string.
|
22
|
+
# @param body [Hash, nil]
|
23
|
+
# Request body.
|
24
|
+
# @return [Sawyer::Response]
|
25
|
+
# Response instance.
|
26
|
+
def _request_with_relative_uri(http_method, pathname, headers, query, body)
|
27
|
+
query_strings = query.present? ? '?' + query&.to_query : ''
|
28
|
+
uri = URI.join(File.join(endpoint, pathname), query_strings)
|
29
|
+
_request_with_absolute_uri(http_method, uri, headers, body)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Executes HTTP request with absolute URI.
|
36
33
|
#
|
37
34
|
# @param http_method [Symbol]
|
38
|
-
# HTTP method. e.g. `:get`, `:post`, `:patch` and `:delete`.
|
35
|
+
# HTTP method. e.g. `:get`, `:post`, `:put`, `:patch` and `:delete`.
|
39
36
|
# @param uri [URI]
|
40
37
|
# Request target URI including query strings.
|
41
38
|
# @param headers [Hash, nil]
|
@@ -44,13 +41,11 @@ module MyApiClient
|
|
44
41
|
# Request body.
|
45
42
|
# @return [Sawyer::Response]
|
46
43
|
# Response instance.
|
47
|
-
def
|
48
|
-
request_params = Params::Request.new(http_method, uri, headers, body)
|
49
|
-
request_logger = Logger.new(logger, http_method, uri)
|
44
|
+
def _request_with_absolute_uri(http_method, uri, headers, body)
|
50
45
|
Executor.call(
|
51
46
|
instance: self,
|
52
|
-
request_params:
|
53
|
-
request_logger:
|
47
|
+
request_params: Params::Request.new(http_method, uri, headers, body),
|
48
|
+
request_logger: Logger.new(logger, http_method, uri),
|
54
49
|
faraday_options: faraday_options
|
55
50
|
)
|
56
51
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MyApiClient
|
4
|
+
module Request
|
5
|
+
# Provides basic HTTP request method.
|
6
|
+
module Basic
|
7
|
+
HTTP_METHODS = %i[get post put patch delete].freeze
|
8
|
+
|
9
|
+
HTTP_METHODS.each do |http_method|
|
10
|
+
class_eval <<~METHOD, __FILE__, __LINE__ + 1
|
11
|
+
# Executes HTTP request with #{http_method.upcase} method
|
12
|
+
#
|
13
|
+
# @param pathname [String]
|
14
|
+
# Pathname of the request target URL.
|
15
|
+
# It's joined with the defined by `endpoint`.
|
16
|
+
# @param headers [Hash, nil]
|
17
|
+
# Request headers.
|
18
|
+
# @param query [Hash, nil]
|
19
|
+
# Query string.
|
20
|
+
# @param body [Hash, nil]
|
21
|
+
# Request body. You should not specify it when use GET method.
|
22
|
+
# @return [Sawyer::Resource]
|
23
|
+
# Response body instance.
|
24
|
+
def #{http_method}(pathname, headers: nil, query: nil, body: nil)
|
25
|
+
response = call(:_request_with_relative_uri, :#{http_method}, pathname, headers, query, body)
|
26
|
+
response.data
|
27
|
+
end
|
28
|
+
METHOD
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -32,7 +32,7 @@ module MyApiClient
|
|
32
32
|
def call
|
33
33
|
request_logger.info('Start')
|
34
34
|
response = api_request
|
35
|
-
request_logger.info("Duration #{response.timing}
|
35
|
+
request_logger.info("Duration #{response.timing.in_milliseconds} msec")
|
36
36
|
verify(response)
|
37
37
|
rescue MyApiClient::Error => e
|
38
38
|
request_logger.warn("Failure (#{e.message})")
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MyApiClient
|
4
|
+
module Request
|
5
|
+
# Provides enumerable HTTP request method.
|
6
|
+
module Pagination
|
7
|
+
# Executes HTTP request with GET method, for pagination API. Expects the
|
8
|
+
# pagination API to provide pagination links as part of the content of the response.
|
9
|
+
#
|
10
|
+
# @param pathname [String]
|
11
|
+
# Pathname of the request target URL. It's joined with the defined by `endpoint`.
|
12
|
+
# @param paging [String]
|
13
|
+
# Specify the pagination link path included in the response body as JsonPath expression
|
14
|
+
# @param headers [Hash, nil]
|
15
|
+
# Request headers.
|
16
|
+
# @param query [Hash, nil]
|
17
|
+
# Query string.
|
18
|
+
# @param body [Hash, nil]
|
19
|
+
# Request body. You should not specify it when use GET method.
|
20
|
+
# @return [Enumerator::Lazy]
|
21
|
+
# Yields the pagination API response.
|
22
|
+
def pageable_get(pathname, paging:, headers: nil, query: nil)
|
23
|
+
Enumerator.new do |y|
|
24
|
+
response = call(:_request_with_relative_uri, :get, pathname, headers, query, nil)
|
25
|
+
loop do
|
26
|
+
y << response.data
|
27
|
+
|
28
|
+
next_uri = JsonPath.new(paging).first(response.body)
|
29
|
+
break if next_uri.blank?
|
30
|
+
|
31
|
+
response = call(:_request_with_absolute_uri, :get, next_uri, headers, nil)
|
32
|
+
end
|
33
|
+
end.lazy
|
34
|
+
end
|
35
|
+
|
36
|
+
alias pget pageable_get
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/my_api/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.7
|
1
|
+
2.5.7
|
data/my_api/Gemfile.lock
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
GEM
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
|
-
actionmailer (6.0.
|
5
|
-
actionpack (= 6.0.
|
6
|
-
actionview (= 6.0.
|
7
|
-
activejob (= 6.0.
|
4
|
+
actionmailer (6.0.3.4)
|
5
|
+
actionpack (= 6.0.3.4)
|
6
|
+
actionview (= 6.0.3.4)
|
7
|
+
activejob (= 6.0.3.4)
|
8
8
|
mail (~> 2.5, >= 2.5.4)
|
9
9
|
rails-dom-testing (~> 2.0)
|
10
|
-
actionpack (6.0.
|
11
|
-
actionview (= 6.0.
|
12
|
-
activesupport (= 6.0.
|
10
|
+
actionpack (6.0.3.4)
|
11
|
+
actionview (= 6.0.3.4)
|
12
|
+
activesupport (= 6.0.3.4)
|
13
13
|
rack (~> 2.0, >= 2.0.8)
|
14
14
|
rack-test (>= 0.6.3)
|
15
15
|
rails-dom-testing (~> 2.0)
|
16
16
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
17
|
-
actionview (6.0.
|
18
|
-
activesupport (= 6.0.
|
17
|
+
actionview (6.0.3.4)
|
18
|
+
activesupport (= 6.0.3.4)
|
19
19
|
builder (~> 3.1)
|
20
20
|
erubi (~> 1.4)
|
21
21
|
rails-dom-testing (~> 2.0)
|
22
22
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
23
|
-
activejob (6.0.
|
24
|
-
activesupport (= 6.0.
|
23
|
+
activejob (6.0.3.4)
|
24
|
+
activesupport (= 6.0.3.4)
|
25
25
|
globalid (>= 0.3.6)
|
26
|
-
activemodel (6.0.
|
27
|
-
activesupport (= 6.0.
|
28
|
-
activerecord (6.0.
|
29
|
-
activemodel (= 6.0.
|
30
|
-
activesupport (= 6.0.
|
31
|
-
activesupport (6.0.
|
26
|
+
activemodel (6.0.3.4)
|
27
|
+
activesupport (= 6.0.3.4)
|
28
|
+
activerecord (6.0.3.4)
|
29
|
+
activemodel (= 6.0.3.4)
|
30
|
+
activesupport (= 6.0.3.4)
|
31
|
+
activesupport (6.0.3.4)
|
32
32
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
33
33
|
i18n (>= 0.7, < 2)
|
34
34
|
minitest (~> 5.1)
|
35
35
|
tzinfo (~> 1.1)
|
36
|
-
zeitwerk (~> 2.2)
|
36
|
+
zeitwerk (~> 2.2, >= 2.2.2)
|
37
37
|
addressable (2.7.0)
|
38
38
|
public_suffix (>= 2.0.2, < 5.0)
|
39
|
-
aws-eventstream (1.0
|
40
|
-
aws-mfa-secure (0.4.
|
39
|
+
aws-eventstream (1.1.0)
|
40
|
+
aws-mfa-secure (0.4.2)
|
41
41
|
activesupport
|
42
42
|
aws-sdk-core
|
43
43
|
aws_config
|
@@ -45,52 +45,52 @@ GEM
|
|
45
45
|
rainbow
|
46
46
|
thor
|
47
47
|
zeitwerk
|
48
|
-
aws-partitions (1.
|
49
|
-
aws-sdk-apigateway (1.
|
50
|
-
aws-sdk-core (~> 3, >= 3.
|
48
|
+
aws-partitions (1.358.0)
|
49
|
+
aws-sdk-apigateway (1.49.0)
|
50
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
51
51
|
aws-sigv4 (~> 1.1)
|
52
|
-
aws-sdk-cloudformation (1.
|
53
|
-
aws-sdk-core (~> 3, >= 3.
|
52
|
+
aws-sdk-cloudformation (1.41.0)
|
53
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
54
54
|
aws-sigv4 (~> 1.1)
|
55
|
-
aws-sdk-cloudwatchlogs (1.
|
56
|
-
aws-sdk-core (~> 3, >= 3.
|
55
|
+
aws-sdk-cloudwatchlogs (1.34.0)
|
56
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
57
57
|
aws-sigv4 (~> 1.1)
|
58
|
-
aws-sdk-core (3.
|
59
|
-
aws-eventstream (~> 1
|
58
|
+
aws-sdk-core (3.104.4)
|
59
|
+
aws-eventstream (~> 1, >= 1.0.2)
|
60
60
|
aws-partitions (~> 1, >= 1.239.0)
|
61
61
|
aws-sigv4 (~> 1.1)
|
62
62
|
jmespath (~> 1.0)
|
63
|
-
aws-sdk-dynamodb (1.
|
64
|
-
aws-sdk-core (~> 3, >= 3.
|
63
|
+
aws-sdk-dynamodb (1.51.0)
|
64
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
65
65
|
aws-sigv4 (~> 1.1)
|
66
|
-
aws-sdk-kinesis (1.
|
67
|
-
aws-sdk-core (~> 3, >= 3.
|
66
|
+
aws-sdk-kinesis (1.27.0)
|
67
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
68
68
|
aws-sigv4 (~> 1.1)
|
69
|
-
aws-sdk-kms (1.
|
70
|
-
aws-sdk-core (~> 3, >= 3.
|
69
|
+
aws-sdk-kms (1.36.0)
|
70
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
71
71
|
aws-sigv4 (~> 1.1)
|
72
|
-
aws-sdk-lambda (1.
|
73
|
-
aws-sdk-core (~> 3, >= 3.
|
72
|
+
aws-sdk-lambda (1.48.0)
|
73
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
74
74
|
aws-sigv4 (~> 1.1)
|
75
|
-
aws-sdk-s3 (1.
|
76
|
-
aws-sdk-core (~> 3, >= 3.
|
75
|
+
aws-sdk-s3 (1.78.0)
|
76
|
+
aws-sdk-core (~> 3, >= 3.104.3)
|
77
77
|
aws-sdk-kms (~> 1)
|
78
78
|
aws-sigv4 (~> 1.1)
|
79
|
-
aws-sdk-sns (1.
|
80
|
-
aws-sdk-core (~> 3, >= 3.
|
79
|
+
aws-sdk-sns (1.29.0)
|
80
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
81
81
|
aws-sigv4 (~> 1.1)
|
82
|
-
aws-sdk-sqs (1.
|
83
|
-
aws-sdk-core (~> 3, >= 3.
|
82
|
+
aws-sdk-sqs (1.30.0)
|
83
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
84
84
|
aws-sigv4 (~> 1.1)
|
85
|
-
aws-sdk-ssm (1.
|
86
|
-
aws-sdk-core (~> 3, >= 3.
|
85
|
+
aws-sdk-ssm (1.86.0)
|
86
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
87
87
|
aws-sigv4 (~> 1.1)
|
88
|
-
aws-sigv4 (1.
|
89
|
-
aws-eventstream (~> 1
|
88
|
+
aws-sigv4 (1.2.2)
|
89
|
+
aws-eventstream (~> 1, >= 1.0.2)
|
90
90
|
aws_config (0.1.0)
|
91
91
|
builder (3.2.4)
|
92
|
-
byebug (11.1.
|
93
|
-
capybara (3.
|
92
|
+
byebug (11.1.3)
|
93
|
+
capybara (3.34.0)
|
94
94
|
addressable
|
95
95
|
mini_mime (>= 0.1.3)
|
96
96
|
nokogiri (~> 1.8)
|
@@ -103,11 +103,11 @@ GEM
|
|
103
103
|
memoist
|
104
104
|
rainbow
|
105
105
|
cfnresponse (0.4.0)
|
106
|
-
concurrent-ruby (1.1.
|
106
|
+
concurrent-ruby (1.1.7)
|
107
107
|
crass (1.0.6)
|
108
|
-
diff-lcs (1.
|
109
|
-
dotenv (2.7.
|
110
|
-
dynomite (1.2.
|
108
|
+
diff-lcs (1.4.4)
|
109
|
+
dotenv (2.7.6)
|
110
|
+
dynomite (1.2.6)
|
111
111
|
activesupport
|
112
112
|
aws-sdk-dynamodb
|
113
113
|
rainbow
|
@@ -116,9 +116,9 @@ GEM
|
|
116
116
|
globalid (0.4.2)
|
117
117
|
activesupport (>= 4.2.0)
|
118
118
|
hashie (4.1.0)
|
119
|
-
i18n (1.8.
|
119
|
+
i18n (1.8.5)
|
120
120
|
concurrent-ruby (~> 1.0)
|
121
|
-
jets (2.3.
|
121
|
+
jets (2.3.17)
|
122
122
|
actionmailer (~> 6.0.0)
|
123
123
|
actionpack (~> 6.0.0)
|
124
124
|
actionview (~> 6.0.0)
|
@@ -142,7 +142,6 @@ GEM
|
|
142
142
|
hashie
|
143
143
|
jets-gems
|
144
144
|
jets-html-sanitizer
|
145
|
-
json
|
146
145
|
kramdown
|
147
146
|
memoist
|
148
147
|
mimemagic
|
@@ -154,33 +153,33 @@ GEM
|
|
154
153
|
text-table
|
155
154
|
thor
|
156
155
|
zeitwerk
|
157
|
-
jets-gems (0.2.
|
156
|
+
jets-gems (0.2.2)
|
158
157
|
gems
|
159
158
|
jets-html-sanitizer (1.0.4)
|
160
159
|
loofah (~> 2.2, >= 2.2.2)
|
161
160
|
jmespath (1.4.0)
|
162
|
-
|
163
|
-
|
161
|
+
kramdown (2.3.0)
|
162
|
+
rexml
|
164
163
|
launchy (2.5.0)
|
165
164
|
addressable (~> 2.7)
|
166
|
-
loofah (2.
|
165
|
+
loofah (2.7.0)
|
167
166
|
crass (~> 1.0.2)
|
168
167
|
nokogiri (>= 1.5.9)
|
169
168
|
mail (2.7.1)
|
170
169
|
mini_mime (>= 0.1.1)
|
171
170
|
memoist (0.16.2)
|
172
|
-
method_source (0.
|
173
|
-
mimemagic (0.3.
|
171
|
+
method_source (1.0.0)
|
172
|
+
mimemagic (0.3.5)
|
174
173
|
mini_mime (1.0.2)
|
175
174
|
mini_portile2 (2.4.0)
|
176
|
-
minitest (5.14.
|
177
|
-
nio4r (2.5.
|
178
|
-
nokogiri (1.10.
|
175
|
+
minitest (5.14.2)
|
176
|
+
nio4r (2.5.4)
|
177
|
+
nokogiri (1.10.10)
|
179
178
|
mini_portile2 (~> 2.4.0)
|
180
|
-
public_suffix (4.0.
|
181
|
-
puma (
|
179
|
+
public_suffix (4.0.6)
|
180
|
+
puma (5.1.0)
|
182
181
|
nio4r (~> 2.0)
|
183
|
-
rack (2.2.
|
182
|
+
rack (2.2.3)
|
184
183
|
rack-test (1.1.0)
|
185
184
|
rack (>= 1.0, < 3)
|
186
185
|
rails-dom-testing (2.0.3)
|
@@ -188,29 +187,30 @@ GEM
|
|
188
187
|
nokogiri (>= 1.6)
|
189
188
|
rails-html-sanitizer (1.3.0)
|
190
189
|
loofah (~> 2.3)
|
191
|
-
railties (6.0.
|
192
|
-
actionpack (= 6.0.
|
193
|
-
activesupport (= 6.0.
|
190
|
+
railties (6.0.3.4)
|
191
|
+
actionpack (= 6.0.3.4)
|
192
|
+
activesupport (= 6.0.3.4)
|
194
193
|
method_source
|
195
194
|
rake (>= 0.8.7)
|
196
195
|
thor (>= 0.20.3, < 2.0)
|
197
196
|
rainbow (3.0.0)
|
198
197
|
rake (13.0.1)
|
199
|
-
recursive-open-struct (1.1.
|
200
|
-
regexp_parser (1.
|
201
|
-
|
202
|
-
|
203
|
-
rspec-
|
204
|
-
rspec-
|
205
|
-
|
206
|
-
|
207
|
-
|
198
|
+
recursive-open-struct (1.1.2)
|
199
|
+
regexp_parser (1.8.2)
|
200
|
+
rexml (3.2.4)
|
201
|
+
rspec (3.10.0)
|
202
|
+
rspec-core (~> 3.10.0)
|
203
|
+
rspec-expectations (~> 3.10.0)
|
204
|
+
rspec-mocks (~> 3.10.0)
|
205
|
+
rspec-core (3.10.0)
|
206
|
+
rspec-support (~> 3.10.0)
|
207
|
+
rspec-expectations (3.10.0)
|
208
208
|
diff-lcs (>= 1.2.0, < 2.0)
|
209
|
-
rspec-support (~> 3.
|
210
|
-
rspec-mocks (3.
|
209
|
+
rspec-support (~> 3.10.0)
|
210
|
+
rspec-mocks (3.10.0)
|
211
211
|
diff-lcs (>= 1.2.0, < 2.0)
|
212
|
-
rspec-support (~> 3.
|
213
|
-
rspec-support (3.
|
212
|
+
rspec-support (~> 3.10.0)
|
213
|
+
rspec-support (3.10.0)
|
214
214
|
rspec_junit_formatter (0.4.1)
|
215
215
|
rspec-core (>= 2, < 4, != 2.12.0)
|
216
216
|
shotgun (0.9.2)
|
@@ -218,11 +218,11 @@ GEM
|
|
218
218
|
text-table (1.2.4)
|
219
219
|
thor (1.0.1)
|
220
220
|
thread_safe (0.3.6)
|
221
|
-
tzinfo (1.2.
|
221
|
+
tzinfo (1.2.7)
|
222
222
|
thread_safe (~> 0.1)
|
223
223
|
xpath (3.2.0)
|
224
224
|
nokogiri (~> 1.8)
|
225
|
-
zeitwerk (2.
|
225
|
+
zeitwerk (2.4.0)
|
226
226
|
|
227
227
|
PLATFORMS
|
228
228
|
ruby
|