Skip to content

Commit 3715500

Browse files
author
Tim Vandecasteele
committed
Give a full_name to parameters in param groups, so
documentation can properly access these parameters.
1 parent 026c26e commit 3715500

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

lib/grape/validations.rb

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ def params(params)
107107
params
108108
end
109109

110+
def full_name(name)
111+
return "#{@parent.full_name(@element)}[#{name}]" if @parent
112+
name.to_s
113+
end
114+
110115
private
111116
def validates(attrs, validations)
112117
doc_attrs = { :required => validations.keys.include?(:presence) }
@@ -123,9 +128,10 @@ def validates(attrs, validations)
123128
if desc = validations.delete(:desc)
124129
doc_attrs[:desc] = desc
125130
end
126-
127-
@api.document_attribute(attrs, doc_attrs)
128-
131+
132+
full_attrs = attrs.collect{ |name| { :name => name, :full_name => full_name(name)} }
133+
@api.document_attribute(full_attrs, doc_attrs)
134+
129135
# Validate for presence before any other validators
130136
if validations.has_key?(:presence) && validations[:presence]
131137
validate('presence', validations[:presence], attrs, doc_attrs)
@@ -168,10 +174,10 @@ def params(&block)
168174
def document_attribute(names, opts)
169175
if @last_description
170176
@last_description[:params] ||= {}
171-
177+
172178
Array(names).each do |name|
173-
@last_description[:params][name.to_s] ||= {}
174-
@last_description[:params][name.to_s].merge!(opts)
179+
@last_description[:params][name[:name].to_s] ||= {}
180+
@last_description[:params][name[:name].to_s].merge!(opts).merge!({:full_name => name[:full_name]})
175181
end
176182
end
177183
end

spec/grape/api_spec.rb

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,7 +1029,7 @@ class CommunicationError < RuntimeError; end
10291029
subject.routes.map { |route|
10301030
{ :description => route.route_description, :params => route.route_params }
10311031
}.should eq [
1032-
{ :description => "method", :params => { "ns_param" => { :required => true, :desc => "namespace parameter" }, "method_param" => { :required => false, :desc => "method parameter" } } }
1032+
{ :description => "method", :params => { "ns_param" => { :required => true, :desc => "namespace parameter", :full_name=>"ns_param" }, "method_param" => { :required => false, :desc => "method parameter", :full_name=>"method_param" } } }
10331033
]
10341034
end
10351035
it "should merge the parameters of nested namespaces" do
@@ -1055,7 +1055,22 @@ class CommunicationError < RuntimeError; end
10551055
subject.routes.map { |route|
10561056
{ :description => route.route_description, :params => route.route_params }
10571057
}.should eq [
1058-
{ :description => "method", :params => { "ns_param" => { :required => true, :desc => "ns param 2" }, "ns1_param" => { :required => true, :desc => "ns1 param" }, "ns2_param" => { :required => true, :desc => "ns2 param" }, "method_param" => { :required => false, :desc => "method param" } } }
1058+
{ :description => "method", :params => { "ns_param" => { :required => true, :desc => "ns param 2", :full_name=>"ns_param" }, "ns1_param" => { :required => true, :desc => "ns1 param", :full_name=>"ns1_param" }, "ns2_param" => { :required => true, :desc => "ns2 param", :full_name=>"ns2_param" }, "method_param" => { :required => false, :desc => "method param", :full_name=>"method_param" } } }
1059+
]
1060+
end
1061+
it "should provide a full_name for parameters in nested groups" do
1062+
subject.desc "nesting"
1063+
subject.params do
1064+
requires :root_param, :desc => "root param"
1065+
group :nested do
1066+
requires :nested_param, :desc => "nested param"
1067+
end
1068+
end
1069+
subject.get "method" do ; end
1070+
subject.routes.map { |route|
1071+
{ :description => route.route_description, :params => route.route_params }
1072+
}.should eq [
1073+
{ :description => "nesting", :params => { "root_param" => { :required => true, :desc => "root param", :full_name=>"root_param" }, "nested_param" => { :required => true, :desc => "nested param", :full_name=>"nested[nested_param]" } } }
10591074
]
10601075
end
10611076
it "should not symbolize params" do

0 commit comments

Comments
 (0)