Skip to content

Instantly share code, notes, and snippets.

@ilake
Created September 27, 2013 23:18
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ilake/6736536 to your computer and use it in GitHub Desktop.
Save ilake/6736536 to your computer and use it in GitHub Desktop.
# 單純用來決定該有哪些 interface 和一些是在我們這邊處理的邏輯
class PaymentGateway
attr_reader :email
SUBSCRIPTION_AMOUNT = 10.to_money
def initialize(user)
@email = user.email
end
def charge_for_subscription
raise 'overwrite me'
end
def create_as_customer
raise 'overwrite me'
end
end
class PaymentGatewayFactory
def initialize(user)
# 假設user payment_method 就是存 BrainTree, 就看user 是用哪一種 braintree or stripe etc...
user.payment_method.constantize.new(user)
end
end
class BrainTree < PaymentGateway
def charge_for_subscription
braintree_id = BraintreeGem.find_user(email).braintree_id
BraintreeGem.charge(braintree_id, SUBSCRIPTION_AMOUNT)
end
def create_as_customer
BraintreeGem.create_customer(email)
end
end
class Strip < PaymentGateway
def charge_for_subscription
# StripGem charge
end
def create_as_customer
# StripGem create customer
end
end
class User
def charge_for_subscription
PaymentGatewayFactory.new(user).charge_for_subscription
end
def create_as_customer
PaymentGatewayFactory.new(user).create_as_customer
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment