chargebee / chargebee-ruby

Ruby library for the Chargebee API.
https://apidocs.chargebee.com/docs/api?lang=ruby
MIT License
32 stars 60 forks source link

Models say they don't respond_to :object #82

Open jaynetics opened 2 weeks ago

jaynetics commented 2 weeks ago

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).