my_api_client 0.16.0 → 0.20.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.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +95 -135
  3. data/.gem_comet.yml +13 -2
  4. data/.rubocop.yml +5 -1
  5. data/.rubocop_todo.yml +39 -1
  6. data/CHANGELOG.md +142 -0
  7. data/Gemfile +0 -3
  8. data/Gemfile.lock +70 -64
  9. data/README.jp.md +126 -5
  10. data/bin/console +4 -0
  11. data/example/api_clients/application_api_client.rb +2 -2
  12. data/example/api_clients/my_rest_api_client.rb +9 -3
  13. data/gemfiles/{rails_4.2.gemfile → rails_6.1.gemfile} +1 -1
  14. data/lib/generators/rails/USAGE +1 -1
  15. data/lib/generators/rails/api_client_generator.rb +6 -0
  16. data/lib/generators/rails/templates/api_client.rb.erb +1 -1
  17. data/lib/generators/rspec/USAGE +1 -1
  18. data/lib/generators/rspec/api_client_generator.rb +6 -0
  19. data/lib/generators/rspec/templates/api_client_spec.rb.erb +23 -16
  20. data/lib/my_api_client/base.rb +2 -9
  21. data/lib/my_api_client/error_handling/generator.rb +0 -2
  22. data/lib/my_api_client/errors.rb +1 -0
  23. data/lib/my_api_client/integrations/bugsnag.rb +1 -1
  24. data/lib/my_api_client/params/params.rb +1 -3
  25. data/lib/my_api_client/request.rb +3 -3
  26. data/lib/my_api_client/request/basic.rb +1 -3
  27. data/lib/my_api_client/request/executor.rb +1 -1
  28. data/lib/my_api_client/rspec/matchers/request_to.rb +1 -1
  29. data/lib/my_api_client/rspec/stub.rb +30 -9
  30. data/lib/my_api_client/version.rb +1 -1
  31. data/my_api/.ruby-version +1 -1
  32. data/my_api/Gemfile +3 -0
  33. data/my_api/Gemfile.lock +116 -108
  34. data/my_api/app/controllers/pagination_controller.rb +2 -2
  35. data/my_api/spec/controllers/rest_controller_spec.rb +23 -5
  36. data/my_api_client.gemspec +3 -3
  37. data/rails_app/rails_5.2/.rspec +3 -0
  38. data/rails_app/rails_5.2/Gemfile +17 -0
  39. data/rails_app/rails_5.2/Gemfile.lock +174 -0
  40. data/rails_app/rails_5.2/README.md +24 -0
  41. data/rails_app/rails_5.2/Rakefile +8 -0
  42. data/rails_app/rails_5.2/app/controllers/application_controller.rb +4 -0
  43. data/rails_app/rails_5.2/app/jobs/application_job.rb +4 -0
  44. data/rails_app/rails_5.2/bin/bundle +5 -0
  45. data/rails_app/rails_5.2/bin/rails +6 -0
  46. data/rails_app/rails_5.2/bin/rake +6 -0
  47. data/rails_app/rails_5.2/bin/setup +27 -0
  48. data/rails_app/rails_5.2/bin/update +27 -0
  49. data/rails_app/rails_5.2/config.ru +7 -0
  50. data/rails_app/rails_5.2/config/application.rb +37 -0
  51. data/rails_app/rails_5.2/config/boot.rb +6 -0
  52. data/rails_app/rails_5.2/config/credentials.yml.enc +1 -0
  53. data/rails_app/rails_5.2/config/environment.rb +7 -0
  54. data/rails_app/rails_5.2/config/environments/development.rb +41 -0
  55. data/rails_app/rails_5.2/config/environments/production.rb +70 -0
  56. data/rails_app/rails_5.2/config/environments/test.rb +38 -0
  57. data/rails_app/rails_5.2/config/initializers/application_controller_renderer.rb +9 -0
  58. data/rails_app/rails_5.2/config/initializers/backtrace_silencers.rb +8 -0
  59. data/rails_app/rails_5.2/config/initializers/cors.rb +17 -0
  60. data/rails_app/rails_5.2/config/initializers/filter_parameter_logging.rb +6 -0
  61. data/rails_app/rails_5.2/config/initializers/inflections.rb +17 -0
  62. data/rails_app/rails_5.2/config/initializers/mime_types.rb +5 -0
  63. data/rails_app/rails_5.2/config/initializers/wrap_parameters.rb +11 -0
  64. data/rails_app/rails_5.2/config/locales/en.yml +33 -0
  65. data/rails_app/rails_5.2/config/routes.rb +5 -0
  66. data/rails_app/rails_5.2/config/spring.rb +8 -0
  67. data/rails_app/rails_5.2/public/robots.txt +1 -0
  68. data/rails_app/rails_5.2/spec/rails_helper.rb +14 -0
  69. data/rails_app/rails_5.2/spec/spec_helper.rb +13 -0
  70. data/rails_app/rails_6.0/.rspec +3 -0
  71. data/rails_app/rails_6.0/Gemfile +17 -0
  72. data/rails_app/rails_6.0/Gemfile.lock +190 -0
  73. data/rails_app/rails_6.0/README.md +24 -0
  74. data/rails_app/rails_6.0/Rakefile +8 -0
  75. data/rails_app/rails_6.0/app/controllers/application_controller.rb +4 -0
  76. data/rails_app/rails_6.0/app/jobs/application_job.rb +9 -0
  77. data/rails_app/rails_6.0/bin/rails +6 -0
  78. data/rails_app/rails_6.0/bin/rake +6 -0
  79. data/rails_app/rails_6.0/bin/setup +27 -0
  80. data/rails_app/rails_6.0/config.ru +7 -0
  81. data/rails_app/rails_6.0/config/application.rb +39 -0
  82. data/rails_app/rails_6.0/config/boot.rb +6 -0
  83. data/rails_app/rails_6.0/config/credentials.yml.enc +1 -0
  84. data/rails_app/rails_6.0/config/environment.rb +7 -0
  85. data/rails_app/rails_6.0/config/environments/development.rb +39 -0
  86. data/rails_app/rails_6.0/config/environments/production.rb +90 -0
  87. data/rails_app/rails_6.0/config/environments/test.rb +41 -0
  88. data/rails_app/rails_6.0/config/initializers/application_controller_renderer.rb +9 -0
  89. data/rails_app/rails_6.0/config/initializers/backtrace_silencers.rb +8 -0
  90. data/rails_app/rails_6.0/config/initializers/cors.rb +17 -0
  91. data/rails_app/rails_6.0/config/initializers/filter_parameter_logging.rb +6 -0
  92. data/rails_app/rails_6.0/config/initializers/inflections.rb +17 -0
  93. data/rails_app/rails_6.0/config/initializers/mime_types.rb +5 -0
  94. data/rails_app/rails_6.0/config/initializers/wrap_parameters.rb +11 -0
  95. data/rails_app/rails_6.0/config/locales/en.yml +33 -0
  96. data/rails_app/rails_6.0/config/routes.rb +5 -0
  97. data/rails_app/rails_6.0/config/spring.rb +8 -0
  98. data/rails_app/rails_6.0/public/robots.txt +1 -0
  99. data/rails_app/rails_6.0/spec/rails_helper.rb +14 -0
  100. data/rails_app/rails_6.0/spec/spec_helper.rb +13 -0
  101. data/rails_app/rails_6.1/.gitattributes +8 -0
  102. data/rails_app/rails_6.1/.gitignore +28 -0
  103. data/rails_app/rails_6.1/.rspec +3 -0
  104. data/rails_app/rails_6.1/Gemfile +17 -0
  105. data/rails_app/rails_6.1/Gemfile.lock +197 -0
  106. data/rails_app/rails_6.1/README.md +24 -0
  107. data/rails_app/rails_6.1/Rakefile +6 -0
  108. data/rails_app/rails_6.1/app/controllers/application_controller.rb +4 -0
  109. data/rails_app/rails_6.1/app/controllers/concerns/.keep +0 -0
  110. data/rails_app/rails_6.1/app/javascript/.keep +0 -0
  111. data/rails_app/rails_6.1/app/models/application_record.rb +5 -0
  112. data/rails_app/rails_6.1/app/models/concerns/.keep +0 -0
  113. data/rails_app/rails_6.1/bin/bundle +114 -0
  114. data/rails_app/rails_6.1/bin/rails +4 -0
  115. data/rails_app/rails_6.1/bin/rake +4 -0
  116. data/rails_app/rails_6.1/bin/setup +33 -0
  117. data/rails_app/rails_6.1/config.ru +6 -0
  118. data/rails_app/rails_6.1/config/application.rb +42 -0
  119. data/rails_app/rails_6.1/config/boot.rb +5 -0
  120. data/rails_app/rails_6.1/config/credentials.yml.enc +1 -0
  121. data/rails_app/rails_6.1/config/database.yml +25 -0
  122. data/rails_app/rails_6.1/config/environment.rb +7 -0
  123. data/rails_app/rails_6.1/config/environments/development.rb +59 -0
  124. data/rails_app/rails_6.1/config/environments/production.rb +97 -0
  125. data/rails_app/rails_6.1/config/environments/test.rb +51 -0
  126. data/rails_app/rails_6.1/config/initializers/application_controller_renderer.rb +9 -0
  127. data/rails_app/rails_6.1/config/initializers/backtrace_silencers.rb +10 -0
  128. data/rails_app/rails_6.1/config/initializers/cors.rb +17 -0
  129. data/rails_app/rails_6.1/config/initializers/filter_parameter_logging.rb +8 -0
  130. data/rails_app/rails_6.1/config/initializers/inflections.rb +17 -0
  131. data/rails_app/rails_6.1/config/initializers/mime_types.rb +5 -0
  132. data/rails_app/rails_6.1/config/initializers/wrap_parameters.rb +16 -0
  133. data/rails_app/rails_6.1/config/locales/en.yml +33 -0
  134. data/rails_app/rails_6.1/config/routes.rb +5 -0
  135. data/rails_app/rails_6.1/db/seeds.rb +8 -0
  136. data/rails_app/rails_6.1/lib/tasks/.keep +0 -0
  137. data/rails_app/rails_6.1/public/robots.txt +1 -0
  138. data/rails_app/rails_6.1/spec/rails_helper.rb +14 -0
  139. data/rails_app/rails_6.1/spec/spec_helper.rb +13 -0
  140. data/rails_app/rails_6.1/tmp/.keep +0 -0
  141. data/rails_app/rails_6.1/tmp/pids/.keep +0 -0
  142. data/rails_app/rails_6.1/vendor/.keep +0 -0
  143. metadata +115 -9
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class <%= "#{class_name}ApiClient" %> < ::ApplicationApiClient
4
- endpoint 'https://example.com'
4
+ endpoint '<%= options[:endpoint] %>'
5
5
 
6
6
  # error_handling json: { '$.errors.code': 10 } do |params, logger|
7
7
  # # Behavior when detected an error.
@@ -2,7 +2,7 @@ Description:
2
2
  Generate a new api client spec files.
3
3
 
4
4
  Example:
5
- rails g rspec:api_client path/to/resource get:path/to/resource`
5
+ rails g rspec:api_client path/to/resource get:path/to/resource` --endpoint https://example.com
6
6
 
7
7
  This will create:
8
8
  create spec/api_clients/path/to/resource_api_client_spec.rb
@@ -16,6 +16,12 @@ module Rspec
16
16
  default: %w[get:path/to/resource post:path/to/resource],
17
17
  banner: '{method}:{path} {method}:{path}'
18
18
 
19
+ class_option :endpoint,
20
+ type: :string,
21
+ default: 'https://example.com',
22
+ banner: 'https://example.com',
23
+ desc: 'Common part of the target API endpoint'
24
+
19
25
  class_option :api_client_specs, type: :boolean, default: true
20
26
 
21
27
  def generate_api_client_spec
@@ -11,16 +11,28 @@ RSpec.describe <%= "#{class_name}ApiClient" %>, <%= type_metatag(:api_client) %>
11
11
  end
12
12
 
13
13
  shared_examples 'to handle errors' do
14
- it do
15
- expect { api_request }
16
- .to be_handled_as_an_error(MyApiClient::ClientError)
17
- .when_receive(status_code: 400)
14
+ context 'when the API returns 200 OK' do
15
+ it do
16
+ expect { api_request }
17
+ .not_to be_handled_as_an_error
18
+ .when_receive(status_code: 200)
19
+ end
18
20
  end
19
21
 
20
- it do
21
- expect { api_request }
22
- .to be_handled_as_an_error(MyApiClient::ServerError)
23
- .when_receive(status_code: 500)
22
+ context 'when the API returns 400 Bad Request' do
23
+ it do
24
+ expect { api_request }
25
+ .to be_handled_as_an_error(MyApiClient::ClientError::BadRequest)
26
+ .when_receive(status_code: 400)
27
+ end
28
+ end
29
+
30
+ context 'when the API returns 500 Internal Server Error' do
31
+ it do
32
+ expect { api_request }
33
+ .to be_handled_as_an_error(MyApiClient::ServerError::InternalServerError)
34
+ .when_receive(status_code: 500)
35
+ end
24
36
  end
25
37
  end
26
38
  <% yeild_request_arguments do |action, http_method, pathname| -%>
@@ -28,22 +40,17 @@ RSpec.describe <%= "#{class_name}ApiClient" %>, <%= type_metatag(:api_client) %>
28
40
  describe '#<%= action %>' do
29
41
  subject(:api_request) { api_client.<%= action %> }
30
42
 
43
+ it_behaves_like 'to handle errors'
44
+
31
45
  it do
32
46
  expect { api_request }
33
- .to request_to(:<%= http_method %>, 'https://example.com/<%= pathname %>')
47
+ .to request_to(:<%= http_method %>, '<%= options[:endpoint] %>/<%= pathname %>')
34
48
  <% if http_method == 'get' -%>
35
49
  .with(headers: headers, query: {})
36
50
  <% else -%>
37
51
  .with(headers: headers, body: {})
38
52
  <% end -%>
39
53
  end
40
-
41
- it_behaves_like 'to handle errors' do
42
- it do
43
- expect { api_request }.not_to be_handled_as_an_error
44
- .when_receive(status_code: 200, body: nil, headers: nil)
45
- end
46
- end
47
54
  end
48
55
  <% end -%>
49
56
  end
@@ -8,15 +8,8 @@ module MyApiClient
8
8
  include MyApiClient::Exceptions
9
9
  include MyApiClient::Request
10
10
 
11
- if ActiveSupport::VERSION::STRING >= '5.2.0'
12
- class_attribute :logger, instance_writer: false, default: ::Logger.new(STDOUT)
13
- class_attribute :error_handlers, instance_writer: false, default: []
14
- else
15
- class_attribute :logger
16
- class_attribute :error_handlers
17
- self.logger = ::Logger.new(STDOUT)
18
- self.error_handlers = []
19
- end
11
+ class_attribute :logger, instance_writer: false, default: ::Logger.new($stdout)
12
+ class_attribute :error_handlers, instance_writer: false, default: []
20
13
 
21
14
  include MyApiClient::DefaultErrorHandlers
22
15
 
@@ -85,7 +85,6 @@ module MyApiClient
85
85
  end
86
86
  end
87
87
 
88
- # rubocop:disable Metrics/CyclomaticComplexity
89
88
  def match?(operator, target)
90
89
  case operator
91
90
  when nil
@@ -102,7 +101,6 @@ module MyApiClient
102
101
  raise "Unexpected operator type was given: #{operator.inspect}"
103
102
  end
104
103
  end
105
- # rubocop:enable Metrics/CyclomaticComplexity
106
104
 
107
105
  def match_all?(json, response_body)
108
106
  return true if json.nil?
@@ -4,6 +4,7 @@ module MyApiClient
4
4
  # The ancestor class for all API request error
5
5
  class Error < StandardError
6
6
  attr_reader :params
7
+
7
8
  delegate :metadata, to: :params
8
9
  alias to_bugsnag metadata
9
10
 
@@ -11,7 +11,7 @@ module MyApiClient
11
11
 
12
12
  Bugsnag.leave_breadcrumb(
13
13
  "#{self.class.name} occurred",
14
- metadata.each_with_object({}) { |(k, v), memo| memo[k] = v.inspect },
14
+ metadata.transform_values(&:inspect),
15
15
  Bugsnag::Breadcrumbs::ERROR_BREADCRUMB_TYPE
16
16
  )
17
17
  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.each_with_object({}) do |(key, value), memo|
44
- memo[:"request_#{key}"] = value
45
- end
43
+ request.metadata.transform_keys { |key| :"request_#{key}" }
46
44
  else
47
45
  {}
48
46
  end
@@ -11,7 +11,7 @@ module MyApiClient
11
11
  # Executes HTTP request with relative URI.
12
12
  #
13
13
  # @param http_method [Symbol]
14
- # HTTP method. e.g. `:get`, `:post`, `:patch` and `:delete`.
14
+ # HTTP method. e.g. `:get`, `:post`, `:put`, `:patch` and `:delete`.
15
15
  # @param pathname [String]
16
16
  # Pathname of the request target URL.
17
17
  # It's joined with the defined by `endpoint`.
@@ -24,7 +24,7 @@ module MyApiClient
24
24
  # @return [Sawyer::Response]
25
25
  # Response instance.
26
26
  def _request_with_relative_uri(http_method, pathname, headers, query, body)
27
- query_strings = query.present? ? '?' + query&.to_query : ''
27
+ query_strings = query.present? ? "?#{query.to_query}" : ''
28
28
  uri = URI.join(File.join(endpoint, pathname), query_strings)
29
29
  _request_with_absolute_uri(http_method, uri, headers, body)
30
30
  end
@@ -32,7 +32,7 @@ module MyApiClient
32
32
  # Executes HTTP request with absolute URI.
33
33
  #
34
34
  # @param http_method [Symbol]
35
- # HTTP method. e.g. `:get`, `:post`, `:patch` and `:delete`.
35
+ # HTTP method. e.g. `:get`, `:post`, `:put`, `:patch` and `:delete`.
36
36
  # @param uri [URI]
37
37
  # Request target URI including query strings.
38
38
  # @param headers [Hash, nil]
@@ -4,7 +4,7 @@ module MyApiClient
4
4
  module Request
5
5
  # Provides basic HTTP request method.
6
6
  module Basic
7
- HTTP_METHODS = %i[get post patch delete].freeze
7
+ HTTP_METHODS = %i[get post put patch delete].freeze
8
8
 
9
9
  HTTP_METHODS.each do |http_method|
10
10
  class_eval <<~METHOD, __FILE__, __LINE__ + 1
@@ -27,8 +27,6 @@ module MyApiClient
27
27
  end
28
28
  METHOD
29
29
  end
30
-
31
- alias put patch
32
30
  end
33
31
  end
34
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} sec")
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})")
@@ -50,7 +50,7 @@ RSpec::Matchers.define :request_to do |expected_method, expected_url|
50
50
  end
51
51
 
52
52
  def request_line(method, url, query = nil)
53
- url += '?' + query.to_query if query.present?
53
+ url += "?#{query.to_query}" if query.present?
54
54
  "#{method.upcase} #{url}"
55
55
  end
56
56
 
@@ -18,6 +18,9 @@ module MyApiClient
18
18
  # @example
19
19
  # stub_api_client_all(
20
20
  # ExampleApiClient,
21
+ # get_users: { # Returns an arbitrary pageable response
22
+ # pageable: [ { id: 1 }, { id: 2 }] # for `#pageable_get`.
23
+ # },
21
24
  # get_user: { response: { id: 1 } }, # Returns an arbitrary response.
22
25
  # post_users: { id: 1 }, # You can ommit `response` keyword.
23
26
  # patch_user: ->(params) { { id: params[:id] } }, # Returns calculated result as response.
@@ -46,6 +49,9 @@ module MyApiClient
46
49
  # @example
47
50
  # api_client = stub_api_client(
48
51
  # ExampleApiClient,
52
+ # get_users: { # Returns an arbitrary pageable response
53
+ # pageable: [ { id: 1 }, { id: 2 }] # for `#pageable_get`.
54
+ # },
49
55
  # get_user: { response: { id: 1 } }, # Returns an arbitrary response.
50
56
  # post_users: { id: 1 }, # You can ommit `response` keyword.
51
57
  # patch_user: ->(params) { { id: params[:id] } }, # Returns calculated result as response.
@@ -67,25 +73,40 @@ module MyApiClient
67
73
 
68
74
  private
69
75
 
70
- # rubocop:disable Metrics/AbcSize
71
76
  def stubbing(instance, action, options)
77
+ allow(instance).to receive(action) do |*request|
78
+ generate_stubbed_response(options, *request)
79
+ end
80
+ end
81
+
82
+ def generate_stubbed_response(options, *request) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
72
83
  case options
73
84
  when Proc
74
- allow(instance).to receive(action) { |*request| stub_as_resource(options.call(*request)) }
85
+ stub_as_resource(options.call(*request))
75
86
  when Hash
76
- if options[:raise].present?
77
- exception = process_raise_option(options[:raise], options[:response])
78
- allow(instance).to receive(action).and_raise(exception)
87
+ if options[:raise] # rubocop:disable Style/GuardClause
88
+ raise process_raise_option(options[:raise], options[:response])
79
89
  elsif options[:response]
80
- allow(instance).to receive(action).and_return(stub_as_resource(options[:response]))
90
+ stub_as_resource(options[:response])
91
+ elsif options[:pageable].is_a?(Enumerable)
92
+ stub_as_pageable_resource(options[:pageable].each, *request)
81
93
  else
82
- allow(instance).to receive(action).and_return(stub_as_resource(options))
94
+ stub_as_resource(options)
83
95
  end
84
96
  else
85
- allow(instance).to receive(action).and_return(stub_as_resource(options))
97
+ stub_as_resource(options)
86
98
  end
87
99
  end
88
- # rubocop:enable Metrics/AbcSize
100
+
101
+ def stub_as_pageable_resource(pager, *request)
102
+ Enumerator.new do |y|
103
+ loop do
104
+ y << generate_stubbed_response(pager.next, *request)
105
+ rescue StopIteration
106
+ break
107
+ end
108
+ end.lazy
109
+ end
89
110
 
90
111
  # Provides a shorthand for `raise` option.
91
112
  # `MyApiClient::Error` requires `MyApiClient::Params::Params` instance on
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MyApiClient
4
- VERSION = '0.16.0'
4
+ VERSION = '0.20.0'
5
5
  end
data/my_api/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.5.7
1
+ 2.7.2
data/my_api/Gemfile CHANGED
@@ -6,6 +6,9 @@ gem 'jets'
6
6
 
7
7
  gem 'dynomite'
8
8
 
9
+ # See: https://github.com/boltops-tools/jets/issues/523
10
+ gem 'nokogiri', '~> 1.11.0'
11
+
9
12
  # development and test groups are not bundled as part of the deployment
10
13
  group :development, :test do
11
14
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
data/my_api/Gemfile.lock CHANGED
@@ -1,43 +1,44 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- actionmailer (6.0.2.2)
5
- actionpack (= 6.0.2.2)
6
- actionview (= 6.0.2.2)
7
- activejob (= 6.0.2.2)
4
+ actionmailer (6.1.2.1)
5
+ actionpack (= 6.1.2.1)
6
+ actionview (= 6.1.2.1)
7
+ activejob (= 6.1.2.1)
8
+ activesupport (= 6.1.2.1)
8
9
  mail (~> 2.5, >= 2.5.4)
9
10
  rails-dom-testing (~> 2.0)
10
- actionpack (6.0.2.2)
11
- actionview (= 6.0.2.2)
12
- activesupport (= 6.0.2.2)
13
- rack (~> 2.0, >= 2.0.8)
11
+ actionpack (6.1.2.1)
12
+ actionview (= 6.1.2.1)
13
+ activesupport (= 6.1.2.1)
14
+ rack (~> 2.0, >= 2.0.9)
14
15
  rack-test (>= 0.6.3)
15
16
  rails-dom-testing (~> 2.0)
16
17
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
17
- actionview (6.0.2.2)
18
- activesupport (= 6.0.2.2)
18
+ actionview (6.1.2.1)
19
+ activesupport (= 6.1.2.1)
19
20
  builder (~> 3.1)
20
21
  erubi (~> 1.4)
21
22
  rails-dom-testing (~> 2.0)
22
23
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
23
- activejob (6.0.2.2)
24
- activesupport (= 6.0.2.2)
24
+ activejob (6.1.2.1)
25
+ activesupport (= 6.1.2.1)
25
26
  globalid (>= 0.3.6)
26
- activemodel (6.0.2.2)
27
- activesupport (= 6.0.2.2)
28
- activerecord (6.0.2.2)
29
- activemodel (= 6.0.2.2)
30
- activesupport (= 6.0.2.2)
31
- activesupport (6.0.2.2)
27
+ activemodel (6.1.2.1)
28
+ activesupport (= 6.1.2.1)
29
+ activerecord (6.1.2.1)
30
+ activemodel (= 6.1.2.1)
31
+ activesupport (= 6.1.2.1)
32
+ activesupport (6.1.2.1)
32
33
  concurrent-ruby (~> 1.0, >= 1.0.2)
33
- i18n (>= 0.7, < 2)
34
- minitest (~> 5.1)
35
- tzinfo (~> 1.1)
36
- zeitwerk (~> 2.2)
34
+ i18n (>= 1.6, < 2)
35
+ minitest (>= 5.1)
36
+ tzinfo (~> 2.0)
37
+ zeitwerk (~> 2.3)
37
38
  addressable (2.7.0)
38
39
  public_suffix (>= 2.0.2, < 5.0)
39
- aws-eventstream (1.0.3)
40
- aws-mfa-secure (0.4.0)
40
+ aws-eventstream (1.1.0)
41
+ aws-mfa-secure (0.4.3)
41
42
  activesupport
42
43
  aws-sdk-core
43
44
  aws_config
@@ -45,85 +46,87 @@ GEM
45
46
  rainbow
46
47
  thor
47
48
  zeitwerk
48
- aws-partitions (1.290.0)
49
- aws-sdk-apigateway (1.37.0)
50
- aws-sdk-core (~> 3, >= 3.71.0)
49
+ aws-partitions (1.416.0)
50
+ aws-sdk-apigateway (1.58.0)
51
+ aws-sdk-core (~> 3, >= 3.109.0)
51
52
  aws-sigv4 (~> 1.1)
52
- aws-sdk-cloudformation (1.31.0)
53
- aws-sdk-core (~> 3, >= 3.71.0)
53
+ aws-sdk-cloudformation (1.46.0)
54
+ aws-sdk-core (~> 3, >= 3.109.0)
54
55
  aws-sigv4 (~> 1.1)
55
- aws-sdk-cloudwatchlogs (1.29.0)
56
- aws-sdk-core (~> 3, >= 3.71.0)
56
+ aws-sdk-cloudwatchlogs (1.38.0)
57
+ aws-sdk-core (~> 3, >= 3.109.0)
57
58
  aws-sigv4 (~> 1.1)
58
- aws-sdk-core (3.92.0)
59
- aws-eventstream (~> 1.0, >= 1.0.2)
59
+ aws-sdk-core (3.111.0)
60
+ aws-eventstream (~> 1, >= 1.0.2)
60
61
  aws-partitions (~> 1, >= 1.239.0)
61
62
  aws-sigv4 (~> 1.1)
62
63
  jmespath (~> 1.0)
63
- aws-sdk-dynamodb (1.45.0)
64
- aws-sdk-core (~> 3, >= 3.71.0)
64
+ aws-sdk-dynamodb (1.58.0)
65
+ aws-sdk-core (~> 3, >= 3.109.0)
65
66
  aws-sigv4 (~> 1.1)
66
- aws-sdk-kinesis (1.21.0)
67
- aws-sdk-core (~> 3, >= 3.71.0)
67
+ aws-sdk-kinesis (1.30.0)
68
+ aws-sdk-core (~> 3, >= 3.109.0)
68
69
  aws-sigv4 (~> 1.1)
69
- aws-sdk-kms (1.30.0)
70
- aws-sdk-core (~> 3, >= 3.71.0)
70
+ aws-sdk-kms (1.41.0)
71
+ aws-sdk-core (~> 3, >= 3.109.0)
71
72
  aws-sigv4 (~> 1.1)
72
- aws-sdk-lambda (1.37.0)
73
- aws-sdk-core (~> 3, >= 3.71.0)
73
+ aws-sdk-lambda (1.57.0)
74
+ aws-sdk-core (~> 3, >= 3.109.0)
74
75
  aws-sigv4 (~> 1.1)
75
- aws-sdk-s3 (1.61.1)
76
- aws-sdk-core (~> 3, >= 3.83.0)
76
+ aws-sdk-s3 (1.87.0)
77
+ aws-sdk-core (~> 3, >= 3.109.0)
77
78
  aws-sdk-kms (~> 1)
78
79
  aws-sigv4 (~> 1.1)
79
- aws-sdk-sns (1.22.0)
80
- aws-sdk-core (~> 3, >= 3.71.0)
80
+ aws-sdk-sns (1.36.0)
81
+ aws-sdk-core (~> 3, >= 3.109.0)
81
82
  aws-sigv4 (~> 1.1)
82
- aws-sdk-sqs (1.24.0)
83
- aws-sdk-core (~> 3, >= 3.71.0)
83
+ aws-sdk-sqs (1.35.0)
84
+ aws-sdk-core (~> 3, >= 3.109.0)
84
85
  aws-sigv4 (~> 1.1)
85
- aws-sdk-ssm (1.73.0)
86
- aws-sdk-core (~> 3, >= 3.71.0)
86
+ aws-sdk-ssm (1.101.0)
87
+ aws-sdk-core (~> 3, >= 3.109.0)
87
88
  aws-sigv4 (~> 1.1)
88
- aws-sigv4 (1.1.1)
89
- aws-eventstream (~> 1.0, >= 1.0.2)
89
+ aws-sigv4 (1.2.2)
90
+ aws-eventstream (~> 1, >= 1.0.2)
90
91
  aws_config (0.1.0)
91
92
  builder (3.2.4)
92
- byebug (11.1.1)
93
- capybara (3.31.0)
93
+ byebug (11.1.3)
94
+ capybara (3.35.3)
94
95
  addressable
95
96
  mini_mime (>= 0.1.3)
96
97
  nokogiri (~> 1.8)
97
98
  rack (>= 1.6.0)
98
99
  rack-test (>= 0.6.3)
99
- regexp_parser (~> 1.5)
100
+ regexp_parser (>= 1.5, < 3.0)
100
101
  xpath (~> 3.2)
102
+ cfn-status (0.4.2)
103
+ aws-sdk-cloudformation
101
104
  cfn_camelizer (0.4.9)
102
105
  activesupport
103
106
  memoist
104
107
  rainbow
105
- cfnresponse (0.4.0)
106
- concurrent-ruby (1.1.6)
108
+ cfn_response (0.2.0)
109
+ concurrent-ruby (1.1.8)
107
110
  crass (1.0.6)
108
- diff-lcs (1.3)
109
- dotenv (2.7.5)
110
- dynomite (1.2.5)
111
+ diff-lcs (1.4.4)
112
+ dotenv (2.7.6)
113
+ dynomite (1.2.6)
111
114
  activesupport
112
115
  aws-sdk-dynamodb
113
116
  rainbow
114
- erubi (1.9.0)
117
+ erubi (1.10.0)
115
118
  gems (1.2.0)
116
119
  globalid (0.4.2)
117
120
  activesupport (>= 4.2.0)
118
121
  hashie (4.1.0)
119
- i18n (1.8.2)
122
+ i18n (1.8.8)
120
123
  concurrent-ruby (~> 1.0)
121
- jets (2.3.15)
122
- actionmailer (~> 6.0.0)
123
- actionpack (~> 6.0.0)
124
- actionview (~> 6.0.0)
125
- activerecord (~> 6.0.0)
126
- activesupport (~> 6.0.0)
124
+ jets (3.0.2)
125
+ actionmailer (~> 6.1.0)
126
+ actionpack (~> 6.1.0)
127
+ actionview (~> 6.1.0)
128
+ activerecord (~> 6.1.0)
129
+ activesupport (~> 6.1.0)
127
130
  aws-mfa-secure (~> 0.4.0)
128
131
  aws-sdk-apigateway
129
132
  aws-sdk-cloudformation
@@ -135,52 +138,52 @@ GEM
135
138
  aws-sdk-sns
136
139
  aws-sdk-sqs
137
140
  aws-sdk-ssm
141
+ cfn-status
138
142
  cfn_camelizer (~> 0.4.6)
139
- cfnresponse
143
+ cfn_response
140
144
  dotenv
141
145
  gems
142
146
  hashie
143
- jets-gems
144
147
  jets-html-sanitizer
145
- json
146
148
  kramdown
147
149
  memoist
148
150
  mimemagic
149
151
  rack
150
- railties (~> 6.0.0)
152
+ railties (~> 6.1.0)
151
153
  rainbow
152
154
  recursive-open-struct
155
+ serverlessgems (~> 0.1.2)
153
156
  shotgun
154
157
  text-table
155
158
  thor
156
159
  zeitwerk
157
- jets-gems (0.2.2)
158
- gems
159
160
  jets-html-sanitizer (1.0.4)
160
161
  loofah (~> 2.2, >= 2.2.2)
161
162
  jmespath (1.4.0)
162
- json (2.3.0)
163
- kramdown (2.1.0)
163
+ kramdown (2.3.0)
164
+ rexml
164
165
  launchy (2.5.0)
165
166
  addressable (~> 2.7)
166
- loofah (2.4.0)
167
+ loofah (2.9.0)
167
168
  crass (~> 1.0.2)
168
169
  nokogiri (>= 1.5.9)
169
170
  mail (2.7.1)
170
171
  mini_mime (>= 0.1.1)
171
172
  memoist (0.16.2)
172
173
  method_source (1.0.0)
173
- mimemagic (0.3.4)
174
+ mimemagic (0.3.5)
174
175
  mini_mime (1.0.2)
175
- mini_portile2 (2.4.0)
176
- minitest (5.14.0)
177
- nio4r (2.5.2)
178
- nokogiri (1.10.9)
179
- mini_portile2 (~> 2.4.0)
180
- public_suffix (4.0.3)
181
- puma (4.3.3)
176
+ mini_portile2 (2.5.0)
177
+ minitest (5.14.3)
178
+ nio4r (2.5.5)
179
+ nokogiri (1.11.0)
180
+ mini_portile2 (~> 2.5.0)
181
+ racc (~> 1.4)
182
+ public_suffix (4.0.6)
183
+ puma (5.2.2)
182
184
  nio4r (~> 2.0)
183
- rack (2.2.2)
185
+ racc (1.5.2)
186
+ rack (2.2.3)
184
187
  rack-test (1.1.0)
185
188
  rack (>= 1.0, < 3)
186
189
  rails-dom-testing (2.0.3)
@@ -188,41 +191,45 @@ GEM
188
191
  nokogiri (>= 1.6)
189
192
  rails-html-sanitizer (1.3.0)
190
193
  loofah (~> 2.3)
191
- railties (6.0.2.2)
192
- actionpack (= 6.0.2.2)
193
- activesupport (= 6.0.2.2)
194
+ railties (6.1.2.1)
195
+ actionpack (= 6.1.2.1)
196
+ activesupport (= 6.1.2.1)
194
197
  method_source
195
198
  rake (>= 0.8.7)
196
- thor (>= 0.20.3, < 2.0)
199
+ thor (~> 1.0)
197
200
  rainbow (3.0.0)
198
- rake (13.0.1)
199
- recursive-open-struct (1.1.1)
200
- regexp_parser (1.7.0)
201
- rspec (3.9.0)
202
- rspec-core (~> 3.9.0)
203
- rspec-expectations (~> 3.9.0)
204
- rspec-mocks (~> 3.9.0)
205
- rspec-core (3.9.1)
206
- rspec-support (~> 3.9.1)
207
- rspec-expectations (3.9.1)
201
+ rake (13.0.3)
202
+ recursive-open-struct (1.1.3)
203
+ regexp_parser (2.0.3)
204
+ rexml (3.2.4)
205
+ rspec (3.10.0)
206
+ rspec-core (~> 3.10.0)
207
+ rspec-expectations (~> 3.10.0)
208
+ rspec-mocks (~> 3.10.0)
209
+ rspec-core (3.10.0)
210
+ rspec-support (~> 3.10.0)
211
+ rspec-expectations (3.10.0)
208
212
  diff-lcs (>= 1.2.0, < 2.0)
209
- rspec-support (~> 3.9.0)
210
- rspec-mocks (3.9.1)
213
+ rspec-support (~> 3.10.0)
214
+ rspec-mocks (3.10.0)
211
215
  diff-lcs (>= 1.2.0, < 2.0)
212
- rspec-support (~> 3.9.0)
213
- rspec-support (3.9.2)
216
+ rspec-support (~> 3.10.0)
217
+ rspec-support (3.10.0)
214
218
  rspec_junit_formatter (0.4.1)
215
219
  rspec-core (>= 2, < 4, != 2.12.0)
220
+ serverlessgems (0.1.2)
221
+ gems
222
+ memoist
223
+ zeitwerk
216
224
  shotgun (0.9.2)
217
225
  rack (>= 1.0)
218
226
  text-table (1.2.4)
219
- thor (1.0.1)
220
- thread_safe (0.3.6)
221
- tzinfo (1.2.6)
222
- thread_safe (~> 0.1)
227
+ thor (1.1.0)
228
+ tzinfo (2.0.4)
229
+ concurrent-ruby (~> 1.0)
223
230
  xpath (3.2.0)
224
231
  nokogiri (~> 1.8)
225
- zeitwerk (2.3.0)
232
+ zeitwerk (2.4.2)
226
233
 
227
234
  PLATFORMS
228
235
  ruby
@@ -233,6 +240,7 @@ DEPENDENCIES
233
240
  dynomite
234
241
  jets
235
242
  launchy
243
+ nokogiri (~> 1.11.0)
236
244
  puma
237
245
  rack
238
246
  rspec