Skip to content

Commit

Permalink
Allows update metadata for methods (#667)
Browse files Browse the repository at this point in the history
  • Loading branch information
ofedoren authored and iNecas committed Jul 1, 2019
1 parent 80615c4 commit dfac10a
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 10 deletions.
30 changes: 22 additions & 8 deletions lib/apipie/dsl_definition.rb
Original file line number Diff line number Diff line change
Expand Up @@ -488,19 +488,33 @@ def apipie_concern_subst(subst_hash)
# param_names.each { |p| param p, String }
# end
# end
def apipie_update_params(methods, *args, &block)
def _apipie_update_params(method_desc, dsl_data)
params_ordered = dsl_data[:params].map do |args|
Apipie::ParamDescription.from_dsl_data(method_desc, args)
end
ParamDescription.merge(method_desc.params_ordered_self, params_ordered)
end

def _apipie_update_meta(method_desc, dsl_data)
return unless dsl_data[:meta] && dsl_data[:meta].is_a?(Hash)

method_desc.metadata ||= {}
method_desc.metadata.merge!(dsl_data[:meta])
end

def apipie_update_methods(methods, *args, &block)
methods.each do |method|
method_description = Apipie.get_method_description(self, method)
unless method_description
method_desc = Apipie.get_method_description(self, method)
unless method_desc
raise "Could not find method description for #{self}##{method}. Was the method defined?"
end
dsl_data = _apipie_eval_dsl(*args, &block)
params_ordered = dsl_data[:params].map do |args|
Apipie::ParamDescription.from_dsl_data(method_description, args)
end
ParamDescription.merge(method_description.params_ordered_self, params_ordered)
_apipie_update_params(method_desc, dsl_data)
_apipie_update_meta(method_desc, dsl_data)
end
end
# backwards compatibility
alias_method :apipie_update_params, :apipie_update_methods

def _apipie_concern_subst
@_apipie_concern_subst ||= {:controller_path => self.controller_path,
Expand Down Expand Up @@ -550,7 +564,7 @@ def included(controller)
controller._apipie_define_validators(description)
end
_apipie_concern_update_api_blocks.each do |(methods, block)|
controller.apipie_update_params(methods, &block)
controller.apipie_update_methods(methods, &block)
end
end

Expand Down
3 changes: 2 additions & 1 deletion lib/apipie/method_description.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ def initialize(method, path, desc, options)

end

attr_reader :full_description, :method, :resource, :apis, :examples, :see, :formats, :metadata, :headers, :show
attr_reader :full_description, :method, :resource, :apis, :examples, :see, :formats, :headers, :show
attr_accessor :metadata

def initialize(method, resource, dsl_data)
@method = method.to_s
Expand Down
5 changes: 4 additions & 1 deletion spec/controllers/extended_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,8 @@
user_param = Apipie["extended#create"].params[:user]
expect(user_param.validator.params_ordered.map(&:name)).to eq [:name, :password, :from_concern]
end
end

it 'should include updated metadata' do
expect(Apipie['extended#create'].metadata).to eq metadata: 'data'
end
end
1 change: 1 addition & 0 deletions spec/dummy/app/controllers/concerns/extending_concern.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ module ExtendingConcern
param :user, Hash do
param :from_concern, String, :desc => 'param from concern', :allow_nil => false
end
meta metadata: 'data'
end
end
end

0 comments on commit dfac10a

Please sign in to comment.