hephaestus 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a51ee122f0ef70262525ad38d2c72f2ef5d88b522d83dcecb0a5f0387ff022b
4
- data.tar.gz: 5a14c44ec5775bbceebb5d7742612168a9f294dc1d47540c6bc058a8daf818f9
3
+ metadata.gz: b58de861c02e9f029be16c4ffc63a7d328569e00d17b620fe192cbc9c4788579
4
+ data.tar.gz: 634c07e912d979106ff8eefc6eaed83c4331321652754edd95f6ee87af2e6706
5
5
  SHA512:
6
- metadata.gz: 0a5e7f11040e4365121b47b285e8f059c1887565eaea052b00d8c041509703dc52e748dfe9d3dd6fc366a72d5c5e506744cc370805b1324103d4996c8c26bc9c
7
- data.tar.gz: '0931cbcbffc5b40ada651d49093181906024a856d78d65ac2118ca3a6cfaf066699f6b1251db116d99cae6a3b16fa51054403a39494463338486e3a2dfa37f07'
6
+ metadata.gz: f1517fe22cb5f81eca885f702051a9546aa3088e3cad6d3159190f9673368a601b59cd243505380bd6129cbdcc3ba9e1ddb8e771c90722efabfe51d534793277
7
+ data.tar.gz: a3d9dffb9397754e98696bb1c1ca10718026aeb5580a36342298da0e61476e0c78dbf16429a03823cd673fba8bdbdd56121d1b184098dd93195e174eb6a4ba1a
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.2.1
1
+ 3.3.0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [v0.6.0] - 19-12-2023
2
+ ## What's Changed
3
+ * Remove switch logic from plugs by @gjtorikian in https://github.com/yettoapp/hephaestus/pull/15
4
+
5
+
6
+ **Full Changelog**: https://github.com/yettoapp/hephaestus/compare/v0.5.2...v0.6.0
1
7
  ## [v0.5.2] - 13-11-2023
2
8
  ## What's Changed
3
9
  * Fix RAILS_ENV in fly-staging.toml by @balevine in https://github.com/yettoapp/hephaestus/pull/13
@@ -158,7 +158,10 @@ module Hephaestus
158
158
  def replace_generic_variables
159
159
  say(set_color("Replacing generic variable names...", :cyan))
160
160
  replace_in_files(destination_root, /App(?!lication)/, short_app_name.capitalize)
161
+
161
162
  replace_in_files(destination_root, %r{(?<!yetto|sw|plugs\.yetto\.)app(?!lication|/|roximate)}, short_app_name.downcase)
163
+ replace_in_file("test/support/api.rb", "/app/", "/#{short_app_name.downcase}/")
164
+
162
165
  replace_in_files(destination_root, "PlugApp", app_name.underscore.camelcase)
163
166
  replace_in_files(destination_root, "plug-app", app_name.dasherize)
164
167
  replace_in_files("destination_root}/.github/workflows/test.yml", "plug-app", app_name.dasherize)
@@ -2,7 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Hephaestus
5
- VERSION = "0.6.0"
5
+ VERSION = "0.6.1"
6
6
  RAILS_VERSION = "~> 7.0"
7
7
  RUBY_VERSION = File
8
8
  .read("#{File.dirname(__FILE__)}/../../.ruby-version")
data/templates/Dockerfile CHANGED
@@ -1,7 +1,7 @@
1
1
  # syntax = docker/dockerfile:1
2
2
 
3
3
  # Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
4
- ARG RUBY_VERSION=3.2.1
4
+ ARG RUBY_VERSION=3.3.0
5
5
  FROM ruby:$RUBY_VERSION-slim as base
6
6
 
7
7
  # The plug-app code lives here
@@ -27,7 +27,7 @@ gem "hiredis", "~> 0.6"
27
27
  gem "lograge", "~> 0.12"
28
28
 
29
29
  # provides middleware to make OpenAPI parsing simpler
30
- gem "openapi_first", "~> 0.20"
30
+ gem "openapi_first", "~> 1.0"
31
31
 
32
32
  # For Honeycomb.io
33
33
  gem "opentelemetry-sdk", "~> 1.2"
@@ -68,7 +68,7 @@ group :development, :test do
68
68
  # See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
69
69
  gem "debug", platforms: [:mri, :mingw, :x64_mingw], require: false
70
70
 
71
- gem "faker", "~> 2.20"
71
+ gem "faker", "~> 3.0"
72
72
  gem "rubocop", require: false
73
73
  gem "rubocop-standard", require: false
74
74
  end
@@ -113,7 +113,7 @@ group :test do
113
113
  end
114
114
 
115
115
  group :ci do
116
- gem "brakeman", "~> 5.3"
116
+ gem "brakeman", "~> 6.0"
117
117
  gem "bundle-audit", "~> 0.1"
118
118
  end
119
119
 
@@ -12,42 +12,71 @@ module PlugApp
12
12
 
13
13
  def initialize(app)
14
14
  @app = app
15
- @response_validator = OpenapiFirst::ResponseValidator.new(SPEC)
16
- @request_validator = OpenapiFirst::RequestValidation.new(->(_env) {}, spec: SPEC, raise_error: true)
17
15
  end
18
16
 
19
17
  def call(env)
20
18
  request = Rack::Request.new(env)
21
19
 
22
- if request.path.starts_with?(API_PATH_PREFIX)
20
+ return @app.call(env) unless request.path.starts_with?(API_PATH_PREFIX) && request.path.exclude?("/settings")
21
+
22
+ begin
23
23
  # force content-type to JSON
24
- if env["CONTENT_TYPE"] == "application/x-www-form-urlencoded"
25
- env["CONTENT_TYPE"] = "application/json"
26
- end
24
+ env["CONTENT_TYPE"] = "application/json" if env["CONTENT_TYPE"] != "application/json"
25
+
26
+ validated_request = SPEC.validate_request(request)
27
+
28
+ return @app.call(env) if validated_request.valid?
29
+
30
+ case validated_request.error
31
+ when OpenapiFirst::Schema::ValidationError
32
+ error_arr = format_arr(validated_request.error.errors.map(&:error))
33
+ Rails.logger.error(error_arr) if print_user_api_errors?
34
+ [PlugApp::HTTP::BAD_REQUEST_I, { "Content-Type" => "application/json" }, [error_arr]]
35
+ else
36
+ case validated_request.error.error_type
37
+ when :not_found
38
+ [PlugApp::HTTP::NOT_FOUND_I, { "Content-Type" => "application/json" }, [format_str("Not Found")]]
39
+ else
40
+ error_message = if validated_request.error.errors.present?
41
+ format_arr(validated_request.error.errors.map(&:error))
42
+ else
43
+ format_str(validated_request.error.message)
44
+ end
27
45
 
28
- begin
29
- @request_validator.call(env)
30
- # response = @app.call(env)
31
- # @response_validator.validate(request, response)
32
- rescue OpenapiFirst::NotFoundError
33
- PlugApp::Middleware::NotFound.new.call(env)
34
- rescue OpenapiFirst::RequestInvalidError => e
35
- error_hsh = ::ErrorSerializer.format(e.message)
36
- Rails.logger.error(error_hsh) if print_user_api_errors?
37
- return [PlugApp::HTTP::BAD_REQUEST_I, { "Content-Type" => "application/json" }, [error_hsh]]
38
- rescue StandardError => e
39
- raise e unless Rails.env.production?
40
-
41
- logger.error(
42
- "openapi.request_validation.error",
43
- path: request.path,
44
- method: request.env["REQUEST_METHOD"],
45
- error_message: e.message,
46
- )
46
+ Rails.logger.error(error_message) if print_user_api_errors?
47
+ [PlugApp::HTTP::BAD_REQUEST_I, { "Content-Type" => "application/json" }, [error_message]]
48
+ end
47
49
  end
50
+ rescue StandardError => e
51
+ raise e unless Rails.env.production?
52
+
53
+ logger.error(
54
+ "openapi.request_validation.error",
55
+ path: request.path,
56
+ method: request.env["REQUEST_METHOD"],
57
+ error_message: e.message,
58
+ )
48
59
  end
60
+ end
61
+
62
+ private def format_str(error)
63
+ {
64
+ errors: [
65
+ {
66
+ message: error,
67
+ },
68
+ ],
69
+ }.to_json
70
+ end
49
71
 
50
- @app.call(env)
72
+ private def format_arr(errors)
73
+ {
74
+ errors: errors.each_with_object([]) do |error, arr|
75
+ arr << {
76
+ message: error,
77
+ }
78
+ end,
79
+ }.to_json
51
80
  end
52
81
  end
53
82
  end
@@ -13,6 +13,18 @@ LD_PRELOAD_PATH = "/usr/lib/x86_64-linux-gnu/libjemalloc.so.2"
13
13
  web = "./bin/rails server"
14
14
  worker = "bundle exec sidekiq"
15
15
 
16
+ [[vm]]
17
+ cpu_kind = "performance"
18
+ cpus = 2
19
+ memory = "4gb"
20
+ processes = ["web"]
21
+
22
+ [[vm]]
23
+ cpu_kind = "performance"
24
+ cpus = 1
25
+ memory = "2gb"
26
+ processes = ["worker"]
27
+
16
28
  [http_service]
17
29
  internal_port = 3000
18
30
  force_https = true
@@ -9,6 +9,18 @@ LD_PRELOAD_PATH = "/usr/lib/x86_64-linux-gnu/libjemalloc.so.2"
9
9
  web = "./bin/rails server"
10
10
  worker = "bundle exec sidekiq"
11
11
 
12
+ [[vm]]
13
+ cpu_kind = "shared"
14
+ cpus = 2
15
+ memory = "2gb"
16
+ processes = ["web"]
17
+
18
+ [[vm]]
19
+ cpu_kind = "shared"
20
+ cpus = 2
21
+ memory = "1gb"
22
+ processes = ["worker"]
23
+
12
24
  [http_service]
13
25
  internal_port = 3000
14
26
  force_https = true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hephaestus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen Torikian
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-19 00:00:00.000000000 Z
11
+ date: 2024-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -168,7 +168,6 @@ files:
168
168
  - templates/app/lib/path_parameter/yetto_parameters.rb
169
169
  - templates/app/lib/plug_app/http.rb
170
170
  - templates/app/lib/plug_app/middleware/malformed_request.rb
171
- - templates/app/lib/plug_app/middleware/not_found.rb
172
171
  - templates/app/lib/plug_app/middleware/openapi_validation.rb
173
172
  - templates/app/lib/plug_app/middleware/tracing_attributes.rb
174
173
  - templates/app/lib/query_parameter.rb
@@ -243,14 +242,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
243
242
  requirements:
244
243
  - - ">="
245
244
  - !ruby/object:Gem::Version
246
- version: 3.2.1
245
+ version: 3.3.0
247
246
  required_rubygems_version: !ruby/object:Gem::Requirement
248
247
  requirements:
249
248
  - - ">="
250
249
  - !ruby/object:Gem::Version
251
250
  version: 3.4.7
252
251
  requirements: []
253
- rubygems_version: 3.5.1
252
+ rubygems_version: 3.5.6
254
253
  signing_key:
255
254
  specification_version: 4
256
255
  summary: Generate a Rails app that can be used to create plugs for Yetto.
@@ -1,41 +0,0 @@
1
- # typed: false
2
- # frozen_string_literal: true
3
-
4
- require "openapi_first"
5
-
6
- module PlugApp
7
- module Middleware
8
- # frozen_string_literal: true
9
-
10
- # Rack::NotFound is a default endpoint. Optionally initialize with the
11
- # path to a custom 404 page, to override the standard response body.
12
- #
13
- # Examples:
14
- #
15
- # Serve default 404 response:
16
- # run Rack::NotFound.new
17
- #
18
- # Serve a custom 404 page:
19
- # run Rack::NotFound.new('path/to/your/404.html')
20
-
21
- class NotFound
22
- F = ::File
23
-
24
- def initialize(path = nil, content_type = "text/html")
25
- if path.nil?
26
- @content = "Not found\n"
27
- else
28
- @content = F.read(path)
29
- @content = F.read(path)
30
- end
31
- @length = @content.bytesize.to_s
32
-
33
- @content_type = content_type
34
- end
35
-
36
- def call(env)
37
- [404, { "Content-Type" => @content_type, "Content-Length" => @length }, [@content]]
38
- end
39
- end
40
- end
41
- end