Models say they don't respond_to :object
Many (all?) Chargebee models respond to the "object" method. E.g.
session = ChargeBee::PortalSession.create(...).portal_session
session.object # => 'portal_session'
however, they say that they don't:
session.respond_to?(:object) # => false
presumably this is because the return value is fetched via method_missing here.
this is not ideal for code with type checks.
also respond_to_missing? has not been implemented, though there is a PR for it.
similarly, this:
ChargeBee::PortalSession.public_method_defined?(:object) # => false
prevents the usage of verified doubles with rspec:
instance_double(ChargeBee::PortalSession, object: 'portal_session')
# => error: the ChargeBee::PortalSession class does not implement the instance method: object
i hacked around this in my code with:
ChargeBee::Model.class_eval { attr_reader :object }
but i don't know if this is correct and whether all models include the "object" information.
ideally, each model that has the "object" information would have an attr_reader/accessor for it (or it could be added to Model if its all of them).
Hi @jaynetics, this was fixed in v2.55.0. Could you please give it a try and let us know if you're still facing the issue?
hi!
instances respond correctly now, but unfortunately, that neither helps with type checks nor with rspec-mocks.
rspec-mocks' #instance_double method takes a class or module as argument, not an instance, so it can only verify the stubbed methods based on currently defined methods, not based on respond_to_missing? return values that would depend on an instance.