From 44080bdb2019fbbf5734092db4632764c7012b5f Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Mon, 17 Feb 2025 09:48:58 +0100 Subject: [PATCH 1/2] Update CI workflow to run on Ubuntu 24.04 20.04 is deprecated and will be removed soon --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index aa36be4ba..ba0a15d95 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: [push, pull_request] jobs: test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: From 194167eaf08b92226b9b1ba69690a417672d3e7e Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Wed, 19 Feb 2025 08:23:17 +0100 Subject: [PATCH 2/2] rubocop autofix --- lib/apipie/application.rb | 5 +- lib/apipie/dsl_definition.rb | 84 +++++++++++++++--------------- lib/apipie/extractor.rb | 4 +- lib/apipie/param_description.rb | 2 +- lib/apipie/response_description.rb | 8 +-- lib/apipie/static_dispatcher.rb | 4 +- lib/apipie/validator.rb | 12 ++--- spec/spec_helper.rb | 2 +- 8 files changed, 51 insertions(+), 70 deletions(-) diff --git a/lib/apipie/application.rb b/lib/apipie/application.rb index 5399b0bb3..eeda4a083 100644 --- a/lib/apipie/application.rb +++ b/lib/apipie/application.rb @@ -271,10 +271,7 @@ def json_schema_for_method_response(version, controller_name, method_name, retur .json_schema_for_method_response(method, return_code, allow_nulls) end - def json_schema_for_self_describing_class(cls, allow_nulls) - Apipie::SwaggerGenerator - .json_schema_for_self_describing_class(cls, allow_nulls) - end + delegate :json_schema_for_self_describing_class, to: :'Apipie::SwaggerGenerator' def to_swagger_json(version, resource_id, method_name, language, clear_warnings = false) return unless valid_search_args?(version, resource_id, method_name) diff --git a/lib/apipie/dsl_definition.rb b/lib/apipie/dsl_definition.rb index c41ee02c2..59819f24c 100644 --- a/lib/apipie/dsl_definition.rb +++ b/lib/apipie/dsl_definition.rb @@ -230,63 +230,61 @@ def tags(*args) def _apipie_define_validators(description) # [re]define method only if validation is turned on - if description && (Apipie.configuration.validate == true || - Apipie.configuration.validate == :implicitly || - Apipie.configuration.validate == :explicitly) - - _apipie_save_method_params(description.method, description.params) - - unless instance_methods.include?(:apipie_validations) - define_method(:apipie_validations) do - method_params = self.class._apipie_get_method_params(action_name) - - if Apipie.configuration.validate_presence? - Validator::BaseValidator.raise_if_missing_params do |missing| - method_params.each_value do |param| - # check if required parameters are present - missing << param if param.required && !params.key?(param.name) - end - end - end + return unless description && [true, :implicitly, :explicitly].include?(Apipie.configuration.validate) + + _apipie_save_method_params(description.method, description.params) - if Apipie.configuration.validate_value? + unless instance_methods.include?(:apipie_validations) + define_method(:apipie_validations) do + method_params = self.class._apipie_get_method_params(action_name) + + if Apipie.configuration.validate_presence? + Validator::BaseValidator.raise_if_missing_params do |missing| method_params.each_value do |param| - # params validations - param.validate(params[:"#{param.name}"]) if params.key?(param.name) + # check if required parameters are present + missing << param if param.required && !params.key?(param.name) end end + end - # Only allow params passed in that are defined keys in the api - # Auto skip the default params (format, controller, action) - if Apipie.configuration.validate_key? - params.reject{|k,_| %w[format controller action].include?(k.to_s) }.each_pair do |param, _| - # params allowed - if method_params.none? {|_,p| p.name.to_s == param.to_s} - self.class._apipie_handle_validate_key_error params, param - end - end + if Apipie.configuration.validate_value? + method_params.each_value do |param| + # params validations + param.validate(params[:"#{param.name}"]) if params.key?(param.name) end + end - return unless Apipie.configuration.process_value? - @api_params ||= {} - method_params.each_value do |param| - # params processing - @api_params[param.as] = param.process_value(params[:"#{param.name}"]) if params.key?(param.name) + # Only allow params passed in that are defined keys in the api + # Auto skip the default params (format, controller, action) + if Apipie.configuration.validate_key? + params.reject{|k,_| %w[format controller action].include?(k.to_s) }.each_pair do |param, _| + # params allowed + if method_params.none? {|_,p| p.name.to_s == param.to_s} + self.class._apipie_handle_validate_key_error params, param + end end end + + return unless Apipie.configuration.process_value? + @api_params ||= {} + method_params.each_value do |param| + # params processing + @api_params[param.as] = param.process_value(params[:"#{param.name}"]) if params.key?(param.name) + end end + end - if Apipie.configuration.validate == :implicitly || Apipie.configuration.validate == true - old_method = instance_method(description.method) + return unless [:implicitly, true].include?(Apipie.configuration.validate) + old_method = instance_method(description.method) - define_method(description.method) do |*args| - apipie_validations + define_method(description.method) do |*args| + apipie_validations - # run the original method code - old_method.bind(self).call(*args) - end - end + # run the original method code + old_method.bind(self).call(*args) end + + end def _apipie_handle_validate_key_error params, param diff --git a/lib/apipie/extractor.rb b/lib/apipie/extractor.rb index 076a0441c..3a7844dc8 100644 --- a/lib/apipie/extractor.rb +++ b/lib/apipie/extractor.rb @@ -54,9 +54,7 @@ def finish end end - def logger - Rails.logger - end + delegate :logger, to: :Rails def call_recorder Thread.current[:apipie_call_recorder] ||= Recorder.new diff --git a/lib/apipie/param_description.rb b/lib/apipie/param_description.rb index 7b917d683..db8e7271c 100644 --- a/lib/apipie/param_description.rb +++ b/lib/apipie/param_description.rb @@ -87,7 +87,7 @@ def initialize(method_description, name, validator, desc_or_options = nil, optio action_awareness if validator - if (validator != Hash) && (validator.is_a? Hash) && (validator[:array_of]) + if (validator != Hash) && (validator.is_a? Hash) && validator[:array_of] @is_array = true validator = validator[:array_of] raise "an ':array_of =>' validator is allowed exclusively on response-only fields" unless @response_only diff --git a/lib/apipie/response_description.rb b/lib/apipie/response_description.rb index d98eb5d4f..370591bec 100644 --- a/lib/apipie/response_description.rb +++ b/lib/apipie/response_description.rb @@ -119,17 +119,13 @@ def is_array? @is_array_of != false end - def typename - @response_object.typename - end + delegate :typename, to: :@response_object def param_description nil end - def params_ordered - @response_object.params_ordered - end + delegate :params_ordered, to: :@response_object def additional_properties !!@response_object.additional_properties diff --git a/lib/apipie/static_dispatcher.rb b/lib/apipie/static_dispatcher.rb index 984d5ae75..fc0cea901 100644 --- a/lib/apipie/static_dispatcher.rb +++ b/lib/apipie/static_dispatcher.rb @@ -30,9 +30,7 @@ def match?(path) end end - def call(env) - @file_server.call(env) - end + delegate :call, to: :@file_server def ext @ext ||= begin diff --git a/lib/apipie/validator.rb b/lib/apipie/validator.rb index a56f227ce..6d7ed4a98 100644 --- a/lib/apipie/validator.rb +++ b/lib/apipie/validator.rb @@ -431,9 +431,7 @@ def description class DecimalValidator < BaseValidator - def validate(value) - self.class.validate(value) - end + delegate :validate, to: :class def self.build(param_description, argument, options, block) if argument == :decimal @@ -456,9 +454,7 @@ def self.validate(value) class NumberValidator < BaseValidator - def validate(value) - self.class.validate(value) - end + delegate :validate, to: :class def self.build(param_description, argument, options, block) if argument == :number @@ -549,9 +545,7 @@ def description "Must be an Array of nested elements" end - def params_ordered - @validator.params_ordered - end + delegate :params_ordered, to: :@validator end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 727b9b5d6..61b4dc999 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -38,7 +38,7 @@ def fail(msg) match do |unresolved| actual = resolve_refs(unresolved) - return fail("expected schema to have type 'object' (got '#{actual[:type]}')") if (actual[:type]) != 'object' + return fail("expected schema to have type 'object' (got '#{actual[:type]}')") if actual[:type] != 'object' return fail("expected schema to include param named '#{name}' (got #{actual[:properties].keys})") if (prop = actual[:properties][name]).nil? return fail("expected param '#{name}' to have type '#{type}' (got '#{prop[:type]}')") if prop[:type] != type return fail("expected param '#{name}' to have description '#{opts[:description]}' (got '#{prop[:description]}')") if opts[:description] && prop[:description] != opts[:description]