diff --git a/lib/swagger_rails/rspec/dsl.rb b/lib/swagger_rails/rspec/dsl.rb index 5b6f224..6590f79 100644 --- a/lib/swagger_rails/rspec/dsl.rb +++ b/lib/swagger_rails/rspec/dsl.rb @@ -38,8 +38,16 @@ module SwaggerRails metadata[:produces] = mime_types end + # Accepts parameter objects: + # parameter :petId, in: :path, type: :integer, required: true + # Or references: + # parameter ref: '#/parameters/Pet' def parameter(name, attributes={}) - metadata[:parameters] << { name: name.to_s }.merge(attributes) + metadata[:parameters] << if name.respond_to?(:has_key?) + { '$ref': name.delete(:ref) || name.delete('ref') } + else + { name: name.to_s }.merge(attributes) + end end def response(code, description, &block) diff --git a/lib/swagger_rails/test_visitor.rb b/lib/swagger_rails/test_visitor.rb index 2204c5f..f7e850d 100644 --- a/lib/swagger_rails/test_visitor.rb +++ b/lib/swagger_rails/test_visitor.rb @@ -22,12 +22,23 @@ module SwaggerRails def params_data_for(test, parameters) parameters.map do |parameter| + parameter = resolve_param_ref(parameter[:$ref]) if parameter.has_key?(:$ref) + parameter .slice(:name, :in) .merge(value: test.send(parameter[:name].to_s.underscore)) end end + def resolve_param_ref ref + raise "Invalid parameter reference: #{ref}" unless %r{#/parameters/(?.+)} =~ ref + + parameter = (@swagger_doc[:parameters][name] || @swagger_doc[:parameters][name.to_sym]) + raise "Unknown parameter reference: #{ref}" unless parameter + + parameter.merge(name: name) + end + def build_path(path_template, params_data) path_params_data = params_data.select { |p| p[:in] == :path }