23 Apr Ruby Design pattern: How does the BrainTree Cancel subscription works
I just found great the way that the cancel subscription works(ruby pattern) in the braintree gem, that’s why I’m sharing this pattern with you guys:
Gem https://github.com/braintree/braintree_ruby
# Just execute this class method Braintree::Subscription.cancel(subscription2.id)
Logic Behind the scenes
# lib/braintree/subscription.rb
module Braintree
class Subscription
def self.cancel(subscription_id)
Configuration.gateway.subscription.cancel(subscription_id)
end
end
end
# lib/braintree/configuration.rb
module Braintree
class Configuration
def self.gateway # :nodoc:
Braintree::Gateway.new(instantiate)
end
def self.instantiate # :nodoc:
config = new(
:custom_user_agent => @custom_user_agent,
:endpoint => @endpoint,
:environment => environment,
:logger => logger,
:merchant_id => merchant_id,
:private_key => private_key,
:public_key => public_key
)
end
end
end
# lib/braintree/gateway.rb
module Braintree
class Gateway
def subscription
SubscriptionGateway.new(self)
end
end
end
# lib/braintree/subscription_gateway.rb
module Braintree
class SubscriptionGateway
def cancel(subscription_id)
response = @config.http.put "/subscriptions/#{subscription_id}/cancel"
if response[:subscription]
SuccessfulResult.new(:subscription => Subscription._new(@gateway, response[:subscription]))
elsif response[:api_error_response]
ErrorResult.new(@gateway, response[:api_error_response])
else
raise UnexpectedError, "expected :subscription or :api_error_response"
end
rescue NotFoundError
raise NotFoundError, "subscription with id #{subscription_id.inspect} not found"
end
end
end
No Comments