shippo-ruby-client icon indicating copy to clipboard operation
shippo-ruby-client copied to clipboard

Shippo::Address.get("object_id").validate returns nil

Open kulte opened this issue 8 years ago • 3 comments

I'm about to look into this more to see if I can possibly make a pull request for you guys, but 100% of the time that I issue this command in the console, I get nil returned.

kulte avatar Oct 11 '17 21:10 kulte

Okay, I still cannot tell what is going on here, however you appear to have at least 2 things that are suspect, and at least 1 of those things looks like a confirmed bug per your API docs on your website.

The first thing that, and I'm not sure if this is a bug or you know about this, but you cannot possibly call a missing method on an instance of Shippo::Address. I couldn't possibly see the value in this, which makes me think it might be a bug, and I grepped the entrie codebase for a declaration of method_missing and couldn't find one. But essentially the reason Shippo::Address.get("object_id").validate returns nil is because Shippo::Address.get("object_id").ksjfgjsgd also returns nil! This is nuts to me and I'm not sure if you meant to do this or not... 😄

The second thing, and this again is a confirmed bug because of https://goshippo.com/docs/reference/bash?version=2017-08-01#addresses-validate, is that a) I can't call this, as stated in the issue title, and b) there's got to be something going wrong in this area:

module Shippo
  class Address < ::Shippo::API::Resource
    operations :list, :create, :validate
  end
end

There's either a bug in Shippo::API::Resource or in this operations thing you guys do. Happy to help any way I can, hopefully this will give one of you guys a lightbulb moment who is more familiar with your codebase.

kulte avatar Oct 11 '17 21:10 kulte

Although I am by no means proficient with Ruby, I can say that doing Shippo::Address.get("object_id") will return your desired Address serialized into a Hash-like object. So it would mean that any key not found on that object would return nil.

If you're trying to validate an address, then you'd want to use Shippo::Address.validate("object_id") and you would be returned back your validated address (also serialized into a Hash-like object).

The Shippo client uses Hashie to transform responses into these Hash-like objects, so its better to think of your returned response to behave more like a JavaScript object than a Ruby object, with missing keys returning nil (just like undefined in JavaScript).

As for the way described in the references docs, I will actually update that to better reflect the way to validate an address with Ruby (since the way shown there is no longer correct).

mootrichard avatar Oct 16 '17 21:10 mootrichard

Just to reiterate that the ruby example in the docs is still incorrect: https://goshippo.com/docs/reference/rb#addresses-validate

sina-s avatar Dec 20 '18 19:12 sina-s