Skip to content

Commit f71ccc0

Browse files
committed
Merge pull request Apipie#390 from jcalvert/missing_message
Add custom message support for missing parameters
2 parents 5289cbb + dce6bdd commit f71ccc0

File tree

6 files changed

+19
-6
lines changed

6 files changed

+19
-6
lines changed

README.rst

+5
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,10 @@ meta
291291
show
292292
Parameter is hidden from documentation when set to false (true by default)
293293

294+
missing-message
295+
Specify the message to be returned if the parameter is missing as a string or Proc.
296+
Defaults to ``Missing parameter #{name}`` if not specified.
297+
294298
Example:
295299
~~~~~~~~
296300

@@ -301,6 +305,7 @@ Example:
301305
param :password, String, :desc => "Password for login", :required => true
302306
param :membership, ["standard","premium"], :desc => "User membership"
303307
param :admin_override, String, :desc => "Not shown in documentation", :show => false
308+
param :ip_address, String, :desc => "IP address", :required => true, :missing_message => lambda { I18n.t("ip_address.required") }
304309
end
305310
def create
306311
#...

lib/apipie/dsl_definition.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ def _apipie_define_validators(description)
223223
if Apipie.configuration.validate_presence?
224224
method_params.each do |_, param|
225225
# check if required parameters are present
226-
raise ParamMissing.new(param.name) if param.required && !params.has_key?(param.name)
226+
raise ParamMissing.new(param) if param.required && !params.has_key?(param.name)
227227
end
228228
end
229229

lib/apipie/errors.rb

+9-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,15 @@ def initialize(param)
1717

1818
class ParamMissing < DefinedParamError
1919
def to_s
20-
"Missing parameter #{@param}"
20+
unless @param.options[:missing_message].nil?
21+
if @param.options[:missing_message].kind_of?(Proc)
22+
@param.options[:missing_message].call
23+
else
24+
@param.options[:missing_message].to_s
25+
end
26+
else
27+
"Missing parameter #{@param.name}"
28+
end
2129
end
2230
end
2331

lib/apipie/validator.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ def validate(value)
305305
if @hash_params
306306
@hash_params.each do |k, p|
307307
if Apipie.configuration.validate_presence?
308-
raise ParamMissing.new(k) if p.required && !value.has_key?(k)
308+
raise ParamMissing.new(p) if p.required && !value.has_key?(k)
309309
end
310310
if Apipie.configuration.validate_value?
311311
p.validate(value[k]) if value.has_key?(k)

spec/controllers/users_controller_spec.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def reload_controllers
9797
end
9898

9999
it "should fail if required parameter is missing" do
100-
expect { get :show, :id => 5 }.to raise_error(Apipie::ParamMissing, /\bsession\b/)
100+
expect { get :show, :id => 5 }.to raise_error(Apipie::ParamMissing, /session_parameter_is_required/)
101101
end
102102

103103
it "should pass if required parameter has wrong type" do
@@ -144,7 +144,7 @@ def reload_controllers
144144
end
145145

146146
it "should fail if required parameter is missing" do
147-
expect { get :show, :id => 5 }.to raise_error(Apipie::ParamMissing, /\bsession\b/)
147+
expect { get :show, :id => 5 }.to raise_error(Apipie::ParamMissing, /session_parameter_is_required/)
148148
end
149149

150150
it "should work with custom Type validator" do

spec/dummy/app/controllers/users_controller.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class UsersController < ApplicationController
174174
error 401, "Unauthorized"
175175
error :code => 404, :description => "Not Found"
176176
param :id, Integer, :desc => "user id", :required => true
177-
param :session, String, :desc => "user is logged in", :required => true
177+
param :session, String, :desc => "user is logged in", :required => true, :missing_message => lambda { "session_parameter_is_required" }
178178
param :regexp_param, /^[0-9]* years/, :desc => "regexp param"
179179
param :regexp2, /\b[A-Z0-9._%+-=]+@[A-Z0-9.-]+.[A-Z]{2,}\b/i, :desc => "email regexp"
180180
param :array_param, ["100", "one", "two", "1", "2"], :desc => "array validator"

0 commit comments

Comments
 (0)