Apipie / apipie-bindings

MIT License
10 stars 23 forks source link

Validing array but checking for hash? #49

Open jberry opened 8 years ago

jberry commented 8 years ago

In lib/apipie_bindings/action.rb validate function, we have

if param_description.expected_type == :array
    value.each.with_index do |item, i|
        errors += validate(param_description.params, item, add_to_path(path, param_description.name, i))
    end
end

But when it's calling itself (the validate function), and the first line in that function is:

return [ErrorData.new(:invalid_type, path, 'Hash')] unless values.respond_to?(:keys)

Maybe I'm missing something (sure possible), but isn't that taking a value we're expecting to be an array, and checking against if it's a hash and returning 'it's not a hash!' error, even when its NOT supposed to be a hash? At least, that seems to be what I'm running into; bypassing this validation check and my call works fine.

mbacovsky commented 7 years ago

Hello @jberry, sorry for not responding sooner. The validation looks correct. If the parameter is of type :array we validate the individual items one by one and the individual items are supposed to be hashes. E.g.

{
  :name => 'Bob',
  :emails => [
     {
        :address => 'bob@st.com'
     },
     {
        :address => 'bob@work.com'
     }
  ]
}

Perhaps your data use different format, could you attach your data sample and API description of it. The excerpt containing the array should be enough.