Created
September 27, 2013 23:18
-
-
Save ilake/6736536 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 單純用來決定該有哪些 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