From 14384de04784afcd3b3182e007f1b57eba5e171b Mon Sep 17 00:00:00 2001 From: Oleksandr Rohachev Date: Mon, 28 Jul 2025 15:26:54 +0300 Subject: [PATCH 1/4] Added thor task that builds openapi spec and returns errors if any --- lib/rage/cli.rb | 15 +++++++++++++++ lib/rage/openapi/openapi.rb | 12 ++++++++++++ 2 files changed, 27 insertions(+) diff --git a/lib/rage/cli.rb b/lib/rage/cli.rb index 9bc60356..6d640ebb 100644 --- a/lib/rage/cli.rb +++ b/lib/rage/cli.rb @@ -212,6 +212,21 @@ def tasks end end + desc "openapi:validate", "Validate the API specification." + map "openapi:validate" => :openapi_validate + def openapi_validate + set_env(options) + environment + Rage::OpenAPI.build + + if Rage::OpenAPI.__warnings.any? + puts "OpenAPI validation failed. Warnings: #{Rage::OpenAPI.__warnings}" + exit 1 + else + puts "OpenAPI validation passed without warnings." + end + end + def method_missing(method_name, *, &) set_env({}) diff --git a/lib/rage/openapi/openapi.rb b/lib/rage/openapi/openapi.rb index 2e889ccb..f3196ee3 100644 --- a/lib/rage/openapi/openapi.rb +++ b/lib/rage/openapi/openapi.rb @@ -80,6 +80,7 @@ def self.application(namespace: nil) # @param namespace [String, Module] limit the parser to a specific namespace # @return [Hash] def self.build(namespace: nil) + __reset_warnings Builder.new(namespace:).run end @@ -156,9 +157,20 @@ def self.__type_to_spec(type, default: false) # @private def self.__log_warn(log) + __warnings << log puts "[OpenAPI] WARNING: #{log}" end + # @private + def self.__warnings + @__warnings ||= [] + end + + # @private + def self.__reset_warnings + @__warnings = [] + end + module Nodes end From e62337b55c4045cc1a0dbbea1972ef9367171694 Mon Sep 17 00:00:00 2001 From: Oleksandr Rohachev Date: Thu, 7 Aug 2025 14:49:56 +0300 Subject: [PATCH 2/4] Moved openapi validation task from cli to tasks.rb --- lib/rage/cli.rb | 15 --------------- lib/rage/tasks.rb | 5 +++++ lib/rage/tasks/openapi.rake | 12 ++++++++++++ 3 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 lib/rage/tasks/openapi.rake diff --git a/lib/rage/cli.rb b/lib/rage/cli.rb index 6d640ebb..9bc60356 100644 --- a/lib/rage/cli.rb +++ b/lib/rage/cli.rb @@ -212,21 +212,6 @@ def tasks end end - desc "openapi:validate", "Validate the API specification." - map "openapi:validate" => :openapi_validate - def openapi_validate - set_env(options) - environment - Rage::OpenAPI.build - - if Rage::OpenAPI.__warnings.any? - puts "OpenAPI validation failed. Warnings: #{Rage::OpenAPI.__warnings}" - exit 1 - else - puts "OpenAPI validation passed without warnings." - end - end - def method_missing(method_name, *, &) set_env({}) diff --git a/lib/rage/tasks.rb b/lib/rage/tasks.rb index 95e94293..a3adf783 100644 --- a/lib/rage/tasks.rb +++ b/lib/rage/tasks.rb @@ -7,6 +7,7 @@ class Rage::Tasks class << self def init load_db_tasks if defined?(StandaloneMigrations) + load_rage_tasks load_app_tasks end @@ -34,5 +35,9 @@ def configuration_file def load_app_tasks Dir[Rage.root.join("lib/tasks/**/*.rake")].each { |file| load file } end + + def load_rage_tasks + Dir[File.expand_path("tasks/**/*.rake", __dir__)].each { |file| load file } + end end end diff --git a/lib/rage/tasks/openapi.rake b/lib/rage/tasks/openapi.rake new file mode 100644 index 00000000..aef97707 --- /dev/null +++ b/lib/rage/tasks/openapi.rake @@ -0,0 +1,12 @@ +namespace :openapi do + task :validate do + Rage::OpenAPI.build + + if Rage::OpenAPI.__warnings.any? + puts "OpenAPI validation failed. Warnings: #{Rage::OpenAPI.__warnings}" + exit 1 + else + puts "OpenAPI validation passed without warnings." + end + end +end From f49f55114d30f6a1b19eda16f8383a83c2586bc5 Mon Sep 17 00:00:00 2001 From: Oleksandr Rohachev Date: Thu, 7 Aug 2025 15:02:01 +0300 Subject: [PATCH 3/4] Use Rage.openapi instead of Rage::OpeAPI --- lib/rage/tasks/openapi.rake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/rage/tasks/openapi.rake b/lib/rage/tasks/openapi.rake index aef97707..c2ff8abf 100644 --- a/lib/rage/tasks/openapi.rake +++ b/lib/rage/tasks/openapi.rake @@ -1,9 +1,9 @@ namespace :openapi do task :validate do - Rage::OpenAPI.build + Rage.openapi.build - if Rage::OpenAPI.__warnings.any? - puts "OpenAPI validation failed. Warnings: #{Rage::OpenAPI.__warnings}" + if Rage.openapi.__warnings.any? + puts "OpenAPI validation failed. Warnings: #{Rage.openapi.__warnings}" exit 1 else puts "OpenAPI validation passed without warnings." From f5314fa9ed68f84617dff59e31adc2f8a5ed4506 Mon Sep 17 00:00:00 2001 From: Oleksandr Rohachev Date: Mon, 11 Aug 2025 12:04:15 +0300 Subject: [PATCH 4/4] Removed unnecessary errors reset --- lib/rage/openapi/openapi.rb | 6 ------ lib/rage/tasks/openapi.rake | 6 +++--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/lib/rage/openapi/openapi.rb b/lib/rage/openapi/openapi.rb index f3196ee3..a9484ec5 100644 --- a/lib/rage/openapi/openapi.rb +++ b/lib/rage/openapi/openapi.rb @@ -80,7 +80,6 @@ def self.application(namespace: nil) # @param namespace [String, Module] limit the parser to a specific namespace # @return [Hash] def self.build(namespace: nil) - __reset_warnings Builder.new(namespace:).run end @@ -166,11 +165,6 @@ def self.__warnings @__warnings ||= [] end - # @private - def self.__reset_warnings - @__warnings = [] - end - module Nodes end diff --git a/lib/rage/tasks/openapi.rake b/lib/rage/tasks/openapi.rake index c2ff8abf..aef97707 100644 --- a/lib/rage/tasks/openapi.rake +++ b/lib/rage/tasks/openapi.rake @@ -1,9 +1,9 @@ namespace :openapi do task :validate do - Rage.openapi.build + Rage::OpenAPI.build - if Rage.openapi.__warnings.any? - puts "OpenAPI validation failed. Warnings: #{Rage.openapi.__warnings}" + if Rage::OpenAPI.__warnings.any? + puts "OpenAPI validation failed. Warnings: #{Rage::OpenAPI.__warnings}" exit 1 else puts "OpenAPI validation passed without warnings."