rspec_api_documentation
rspec_api_documentation copied to clipboard
no implicit conversion of String into Integer
Just updated from 5.1.0 to 6.1.0.
This is the spec:
patch "/api/v1/keyword-alerts" do
parameter :data, required: true
parameter :attributes, scope: [:data], required: true
example "Update email attribute" do
do_request data: [{
id: 1,
attributes: {
email: false,
keywords: []
}
}]
expect(status).to eq(200)
expect(JSON.parse(response_body)["data"][0]["attributes"]["email"]).to eq(false)
end
end
It now fails with
Failure/Error:
do_request data: [{
id: 1,
attributes: {
email: false,
keywords: []
}
}]
TypeError:
no implicit conversion of String into Integer
It passes when we remove these lines:
parameter :data, required: true
parameter :attributes, scope: [:data], required: true
The problematic code is in:
RspecApiDocumentation::DSL::Endpoint::Params#extended
I'm seeing the same issue on 6.1.0, trying to document an array of objects.
parameter :data, '(array of objects) Description'
with_options scope: :data do
parameter :key, '(string) Description'
end
example 'Example 1' do
do_request(data: [{ key: 'val' }])
end
Error produced:
TypeError: no implicit conversion of String into Integer
# From: /usr/local/rvm/gems/ruby-2.4.5/gems/rspec_api_documentation-6.1.0/lib/rspec_api_documentation/dsl/endpoint/params.rb:33
Related to #398
Same problem here. All I found during debugging was the following:
- It fails because somewhere on the way
scope
becomes an array of two elements, with the second element equals''
. (E.g. if we definedparameter :key, scope: %i[level_one]
, we will end up with the scope equal[:level_one, '']
. That's what failing everything. I spent some time, but couldn't find where it happens. - If we do not use
example
anddo_request
, but userequest_example
instead, it works just fine.
Ah, I found the impostor =) You can see my comment in #413 and maybe say something.