hephaestus 0.6.0 → 0.6.2

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: 5a51ee122f0ef70262525ad38d2c72f2ef5d88b522d83dcecb0a5f0387ff022b
4
- data.tar.gz: 5a14c44ec5775bbceebb5d7742612168a9f294dc1d47540c6bc058a8daf818f9
3
+ metadata.gz: 8ee150804d80090a603c52698b45937f96bbd8bf52d13f295f68471831b2e69b
4
+ data.tar.gz: de6060aa80ddfd82cc2d122cb8c0b941c1fd6fa70fce4d44190aec6ff91ad779
5
5
  SHA512:
6
- metadata.gz: 0a5e7f11040e4365121b47b285e8f059c1887565eaea052b00d8c041509703dc52e748dfe9d3dd6fc366a72d5c5e506744cc370805b1324103d4996c8c26bc9c
7
- data.tar.gz: '0931cbcbffc5b40ada651d49093181906024a856d78d65ac2118ca3a6cfaf066699f6b1251db116d99cae6a3b16fa51054403a39494463338486e3a2dfa37f07'
6
+ metadata.gz: 8b022f681eccc353d032f1f5799b8412d13d69dbcfdbc080d526d2f8f40817c44653f77ef9f901449c1b6fcd658f187bf6092fb54e32e3df8b60ad8b321e7720
7
+ data.tar.gz: 8c95113092f22e23f201c17d0bef1ff71cfb7ad10f5ef44acd6370f847f69970e980ceae58e8f697bbd9427fdc5bd9196b68d68b5c84885987701520275baf7a
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.2.1
1
+ 3.3.0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ # [v0.6.2] - 19-06-2024
2
+ ## What's Changed
3
+ * Use Ruby test suite by @gjtorikian in https://github.com/yettoapp/hephaestus/pull/18
4
+ * Catch up with plug updates by @balevine in https://github.com/yettoapp/hephaestus/pull/17
5
+
6
+
7
+ **Full Changelog**: https://github.com/yettoapp/hephaestus/compare/v0.6.1...v0.6.2
8
+ ## [v0.6.1] - 12-02-2024
9
+ ## What's Changed
10
+ * Port recent Ruby, TOML, and OpenAPI changes by @gjtorikian in https://github.com/yettoapp/hephaestus/pull/16
11
+
12
+
13
+ **Full Changelog**: https://github.com/yettoapp/hephaestus/compare/v0.6.0...v0.6.1
14
+ ## [v0.6.0] - 19-12-2023
15
+ ## What's Changed
16
+ * Remove switch logic from plugs by @gjtorikian in https://github.com/yettoapp/hephaestus/pull/15
17
+
18
+
19
+ **Full Changelog**: https://github.com/yettoapp/hephaestus/compare/v0.5.2...v0.6.0
1
20
  ## [v0.5.2] - 13-11-2023
2
21
  ## What's Changed
3
22
  * Fix RAILS_ENV in fly-staging.toml by @balevine in https://github.com/yettoapp/hephaestus/pull/13
@@ -196,7 +196,7 @@ module Hephaestus
196
196
  strip_blank_lines_between_setter_calls(node.children)
197
197
 
198
198
  node.children.each do |child_node|
199
- send("on_#{child_node.type}", child_node)
199
+ send(:"on_#{child_node.type}", child_node)
200
200
  end
201
201
  end
202
202
 
@@ -158,10 +158,13 @@ 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
- replace_in_files("destination_root}/.github/workflows/test.yml", "plug-app", app_name.dasherize)
167
+ replace_in_files("#{destination_root}/.github/workflows", "plug-app", app_name.dasherize)
165
168
  replace_in_files(destination_root, "PLUG_APP", app_name.underscore.upcase)
166
169
  replace_in_files(destination_root, "plug_app", app_name.underscore)
167
170
 
@@ -29,7 +29,7 @@ module Hephaestus
29
29
  raltie_overload = <<~CONFIG
30
30
 
31
31
  # Load dotenv only in development environment
32
- Dotenv::Railtie.overload if Rails.env.development?
32
+ Dotenv::Rails.overwrite = true if Rails.env.development?
33
33
  CONFIG
34
34
  inject_into_file(
35
35
  "config/application.rb",
@@ -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.2"
6
6
  RAILS_VERSION = "~> 7.0"
7
7
  RUBY_VERSION = File
8
8
  .read("#{File.dirname(__FILE__)}/../../.ruby-version")
Binary file
@@ -6,9 +6,11 @@ on:
6
6
 
7
7
  jobs:
8
8
  ruby:
9
- uses: yettoapp/actions/.github/workflows/ruby_test_suite.yml@main
9
+ uses: yettoapp/actions/.github/workflows/rails_test_suite.yml@main
10
10
  secrets:
11
11
  gh_token: ${{ secrets.GH_SISYPHUS_YETTO_REPO_TOKEN }}
12
+ with:
13
+ system_tests: false
12
14
 
13
15
  docker:
14
16
  uses: yettoapp/actions/.github/workflows/test_dockerbuild.yml@main
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
 
@@ -7,116 +7,123 @@ module BodyParameter
7
7
 
8
8
  sig { returns(String) }
9
9
  def bparam_organization_id
10
- plug_installation_params[:organization][:id]
10
+ plug_installation_params[:yetto][:organization][:id]
11
11
  end
12
12
 
13
13
  sig { returns(String) }
14
14
  def bparam_inbox_id
15
- plug_installation_params[:inbox][:id]
15
+ plug_installation_params[:yetto][:inbox][:id]
16
16
  end
17
17
 
18
18
  sig { returns(String) }
19
19
  def bparam_plug_installation_id
20
- plug_installation_params[:plug_installation][:id]
20
+ plug_installation_params[:yetto][:plug_installation][:id]
21
21
  end
22
22
 
23
23
  sig { returns(String) }
24
24
  def bparam_plug_id
25
- plug_installation_params[:plug][:id]
25
+ plug_installation_params[:yetto][:plug][:id]
26
26
  end
27
27
 
28
28
  sig { returns(T::Hash[Symbol, String]) }
29
29
  def bparam_plug_installation_settings
30
- plug_installation_params[:plug_installation][:settings]
30
+ plug_installation_params[:yetto][:plug_installation][:settings]
31
31
  end
32
32
 
33
33
  sig { returns(T::Hash[Symbol, String]) }
34
34
  def plug_installation_params
35
35
  return {} if params.blank?
36
36
 
37
- plug_installation = params.fetch(:plug_installation, {})
37
+ yetto_params = params.fetch(:yetto, {})
38
+ plug_installation = yetto_params.fetch(:plug_installation, {})
39
+
38
40
  plug_installation_id = plug_installation.fetch(:id, "")
39
41
  settings = plug_installation.fetch(:settings, {}).to_unsafe_hash
40
42
 
41
- organization_id = params.fetch(:organization, {}).fetch(:id, "")
42
- plug_id = params.fetch(:plug, {}).fetch(:id, "")
43
- inbox_id = params.fetch(:inbox, {}).fetch(:id, "")
43
+ organization_id = yetto_params.fetch(:organization, {}).fetch(:id, "")
44
+ plug_id = yetto_params.fetch(:plug, {}).fetch(:id, "")
45
+ inbox_id = yetto_params.fetch(:inbox, {}).fetch(:id, "")
44
46
 
45
47
  {
46
- plug_installation: {
47
- id: plug_installation_id,
48
- settings: settings,
49
- },
50
- organization: {
51
- id: organization_id,
52
- },
53
- plug: {
54
- id: plug_id,
55
- },
56
- inbox: {
57
- id: inbox_id,
48
+ yetto: {
49
+ plug_installation: {
50
+ id: plug_installation_id,
51
+ settings: settings,
52
+ },
53
+ organization: {
54
+ id: organization_id,
55
+ },
56
+ plug: {
57
+ id: plug_id,
58
+ },
59
+ inbox: {
60
+ id: inbox_id,
61
+ },
58
62
  },
59
63
  }
60
64
  end
61
65
 
62
66
  sig { returns(String) }
63
67
  def bparam_message_id
64
- message_params[:message][:id]
68
+ message_params[:yetto][:message][:id]
65
69
  end
66
70
 
67
71
  sig { returns(String) }
68
72
  def bparam_message_text_content
69
- message_params[:message][:text_content]
73
+ message_params[:yetto][:message][:text_content]
70
74
  end
71
75
 
72
76
  sig { returns(String) }
73
77
  def bparam_message_conversation_id
74
- message_params[:message][:conversation][:id]
78
+ message_params[:yetto][:message][:conversation][:id]
75
79
  end
76
80
 
77
81
  sig { returns(String) }
78
82
  def bparam_message_conversation_title
79
- message_params[:message][:conversation][:title]
83
+ message_params[:yetto][:message][:conversation][:title]
80
84
  end
81
85
 
82
86
  sig { returns(String) }
83
87
  def bparam_message_author_name
84
- message_params[:message].fetch(:author, {}).fetch(:name, "Noone")
88
+ message_params[:yetto][:message].fetch(:author, {}).fetch(:name, "Noone")
85
89
  end
86
90
 
87
91
  sig { returns(T::Hash[Symbol, String]) }
88
92
  def bparam_message_metadata
89
- message_params[:message][:metadata]
93
+ message_params[:yetto][:message][:metadata]
90
94
  end
91
95
 
92
96
  sig { returns(T::Hash[Symbol, String]) }
93
97
  def message_params
94
98
  return {} if params.blank?
95
99
 
96
- message = params.fetch(:message, {})
100
+ yetto_params = params.fetch(:yetto, {})
101
+ message = yetto_params.fetch(:message, {})
97
102
  message_id = message.fetch(:id, "")
98
103
  text_content = message.fetch(:text_content, "")
99
104
  conversation = message.fetch(:conversation, {})
100
105
  conversation_id = conversation.fetch(:id, "")
101
106
  title = conversation.fetch(:title, "")
102
- created_by_user = message.fetch(:created_by_user, {})
107
+ created_by_membership = message.fetch(:created_by_membership, {})
103
108
  created_by_plug = message.fetch(:created_by_plug, {})
104
- author = created_by_user.presence || created_by_plug
109
+ author = created_by_membership.fetch(:user) || created_by_plug
105
110
  name = author.fetch(:name, "")
106
111
  metadata = message.fetch(:metadata, {}).to_unsafe_hash
107
112
 
108
113
  {
109
- message: {
110
- id: message_id,
111
- text_content: text_content,
112
- conversation: {
113
- id: conversation_id,
114
- title: title,
115
- },
116
- author: {
117
- name: name,
114
+ yetto: {
115
+ message: {
116
+ id: message_id,
117
+ text_content: text_content,
118
+ conversation: {
119
+ id: conversation_id,
120
+ title: title,
121
+ },
122
+ author: {
123
+ name: name,
124
+ },
125
+ metadata: metadata,
118
126
  },
119
- metadata: metadata,
120
127
  },
121
128
  }
122
129
  end
@@ -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
@@ -1,5 +1,3 @@
1
- version: "3.8"
2
-
3
1
  services:
4
2
  redis-db:
5
3
  image: redis:7-bookworm
@@ -1,5 +1,6 @@
1
1
  # typed: false
2
2
  # frozen_string_literal: true
3
+
3
4
  # Be sure to restart your server when you modify this file.
4
5
 
5
6
  # Avoid CORS issues when API is called from the frontend app.
@@ -2,98 +2,77 @@
2
2
  "CreateAppMessage": {
3
3
  "type": "object",
4
4
  "required": [
5
- "plug_installation",
6
- "message",
7
- "inbox"
5
+ "yetto"
8
6
  ],
9
7
  "properties": {
10
- "plug_installation": {
8
+ "yetto": {
11
9
  "type": "object",
12
10
  "required": [
13
- "id",
14
- "settings"
11
+ "plug_installation",
12
+ "message"
15
13
  ],
16
14
  "properties": {
17
- "id": {
18
- "type": "string",
19
- "pattern": "^(?:pli)_[A-Z0-9]{26}$"
20
- },
21
- "settings": {
22
- "type": "object",
23
- "required": [],
24
- "properties": {}
25
- }
26
- }
27
- },
28
- "inbox": {
29
- "type": "object",
30
- "required": [
31
- "id",
32
- "organization"
33
- ],
34
- "properties": {
35
- "id": {
36
- "type": "string",
37
- "pattern": "^(?:ibx)_[A-Z0-9]{26}$"
38
- },
39
- "organization": {
15
+ "plug_installation": {
40
16
  "type": "object",
41
17
  "required": [
42
18
  "id",
43
- "status"
19
+ "settings"
44
20
  ],
45
21
  "properties": {
46
22
  "id": {
47
23
  "type": "string",
48
- "pattern": "^(?:org)_[A-Z0-9]{26}$"
24
+ "pattern": "^(?:pli)_[A-Z0-9]{26}$"
49
25
  },
50
- "status": {
51
- "type": "string"
26
+ "settings": {
27
+ "type": "object",
28
+ "required": [],
29
+ "properties": {}
52
30
  }
53
31
  }
54
- }
55
- }
56
- },
57
- "message": {
58
- "type": "object",
59
- "required": [
60
- "id",
61
- "conversation",
62
- "text_content",
63
- "metadata"
64
- ],
65
- "properties": {
66
- "id": {
67
- "type": "string",
68
- "pattern": "^(?:msg)_[A-Z0-9]{26}$"
69
- },
70
- "text_content": {
71
- "type": "string"
72
- },
73
- "metadata": {
74
- "type": "object"
75
32
  },
76
- "conversation": {
33
+ "message": {
77
34
  "type": "object",
78
35
  "required": [
79
36
  "id",
80
- "title",
37
+ "conversation",
38
+ "text_content",
81
39
  "metadata"
82
40
  ],
83
41
  "properties": {
84
42
  "id": {
85
43
  "type": "string",
86
- "pattern": "^(?:cnv)_[A-Z0-9]{26}$"
44
+ "pattern": "^(?:msg)_[A-Z0-9]{26}$"
87
45
  },
88
- "title": {
46
+ "text_content": {
89
47
  "type": "string"
90
48
  },
91
49
  "metadata": {
92
50
  "type": "object"
51
+ },
52
+ "conversation": {
53
+ "type": "object",
54
+ "required": [
55
+ "id",
56
+ "title",
57
+ "metadata"
58
+ ],
59
+ "properties": {
60
+ "id": {
61
+ "type": "string",
62
+ "pattern": "^(?:cnv)_[A-Z0-9]{26}$"
63
+ },
64
+ "title": {
65
+ "type": "string"
66
+ },
67
+ "metadata": {
68
+ "type": "object"
69
+ }
70
+ }
93
71
  }
94
72
  }
95
73
  }
96
- }
74
+ },
75
+ "additionalProperties": false
97
76
  }
98
77
  },
99
78
  "additionalProperties": false
@@ -101,65 +80,35 @@
101
80
  "ConfigureApp": {
102
81
  "type": "object",
103
82
  "required": [
104
- "plug_installation",
105
- "organization",
106
- "plug",
107
- "inbox"
83
+ "yetto"
108
84
  ],
109
85
  "properties": {
110
- "plug_installation": {
86
+ "yetto": {
111
87
  "type": "object",
112
88
  "required": [
113
- "id",
114
- "settings"
89
+ "plug_installation",
115
90
  ],
116
91
  "properties": {
117
- "id": {
118
- "type": "string",
119
- "pattern": "^(?:pli)_[A-Z0-9]{26}$"
120
- },
121
- "settings": {
92
+ "plug_installation": {
122
93
  "type": "object",
123
- "required": [],
124
- "properties": {}
125
- }
126
- }
127
- },
128
- "organization": {
129
- "type": "object",
130
- "required": [
131
- "id"
132
- ],
133
- "properties": {
134
- "id": {
135
- "type": "string",
136
- "pattern": "^(?:org)_[A-Z0-9]{26}$"
137
- }
138
- }
139
- },
140
- "plug": {
141
- "type": "object",
142
- "required": [
143
- "id"
144
- ],
145
- "properties": {
146
- "id": {
147
- "type": "string",
148
- "pattern": "^(?:plg)_[A-Z0-9]{26}$"
149
- }
150
- }
151
- },
152
- "inbox": {
153
- "type": "object",
154
- "required": [
155
- "id"
156
- ],
157
- "properties": {
158
- "id": {
159
- "type": "string",
160
- "pattern": "^(?:ibx)_[A-Z0-9]{26}$"
94
+ "required": [
95
+ "id",
96
+ "settings"
97
+ ],
98
+ "properties": {
99
+ "id": {
100
+ "type": "string",
101
+ "pattern": "^(?:pli)_[A-Z0-9]{26}$"
102
+ },
103
+ "settings": {
104
+ "type": "object",
105
+ "required": [],
106
+ "properties": {}
107
+ }
108
+ }
161
109
  }
162
- }
110
+ },
111
+ "additionalProperties": false
163
112
  }
164
113
  },
165
114
  "additionalProperties": false
@@ -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.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen Torikian
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-19 00:00:00.000000000 Z
11
+ date: 2024-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,7 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.0'
41
- force_ruby_platform: false
42
41
  - !ruby/object:Gem::Dependency
43
42
  name: rails
44
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +52,6 @@ dependencies:
53
52
  - - "~>"
54
53
  - !ruby/object:Gem::Version
55
54
  version: '7.0'
56
- force_ruby_platform: false
57
55
  - !ruby/object:Gem::Dependency
58
56
  name: rainbow
59
57
  requirement: !ruby/object:Gem::Requirement
@@ -68,7 +66,6 @@ dependencies:
68
66
  - - "~>"
69
67
  - !ruby/object:Gem::Version
70
68
  version: '3.0'
71
- force_ruby_platform: false
72
69
  - !ruby/object:Gem::Dependency
73
70
  name: minitest
74
71
  requirement: !ruby/object:Gem::Requirement
@@ -100,7 +97,7 @@ dependencies:
100
97
  description: 'Hephaestus is a Rails generator to create plugs for Yetto.
101
98
 
102
99
  '
103
- email:
100
+ email:
104
101
  executables:
105
102
  - hephaestus
106
103
  extensions: []
@@ -130,6 +127,7 @@ files:
130
127
  - lib/hephaestus/version.rb
131
128
  - templates/.dockerignore
132
129
  - templates/.env.sample
130
+ - templates/.github/.DS_Store
133
131
  - templates/.github/dependabot.yml
134
132
  - templates/.github/workflows/automerge.yml
135
133
  - templates/.github/workflows/deploy.yml
@@ -168,7 +166,6 @@ files:
168
166
  - templates/app/lib/path_parameter/yetto_parameters.rb
169
167
  - templates/app/lib/plug_app/http.rb
170
168
  - templates/app/lib/plug_app/middleware/malformed_request.rb
171
- - templates/app/lib/plug_app/middleware/not_found.rb
172
169
  - templates/app/lib/plug_app/middleware/openapi_validation.rb
173
170
  - templates/app/lib/plug_app/middleware/tracing_attributes.rb
174
171
  - templates/app/lib/query_parameter.rb
@@ -234,7 +231,7 @@ homepage: http://github.com/yettoapp/hephaestus
234
231
  licenses:
235
232
  - MIT
236
233
  metadata: {}
237
- post_install_message:
234
+ post_install_message:
238
235
  rdoc_options:
239
236
  - "--charset=UTF-8"
240
237
  require_paths:
@@ -243,15 +240,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
243
240
  requirements:
244
241
  - - ">="
245
242
  - !ruby/object:Gem::Version
246
- version: 3.2.1
243
+ version: 3.3.0
247
244
  required_rubygems_version: !ruby/object:Gem::Requirement
248
245
  requirements:
249
246
  - - ">="
250
247
  - !ruby/object:Gem::Version
251
248
  version: 3.4.7
252
249
  requirements: []
253
- rubygems_version: 3.5.1
254
- signing_key:
250
+ rubygems_version: 3.5.9
251
+ signing_key:
255
252
  specification_version: 4
256
253
  summary: Generate a Rails app that can be used to create plugs for Yetto.
257
254
  test_files: []
@@ -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