/
subscription.rb
64 lines (53 loc) · 2.07 KB
/
subscription.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
module FakeBraintree
class Subscription
include Helpers
def initialize(subscription_hash, options)
@subscription_hash = subscription_hash.merge("merchant_id" => options[:merchant_id],
"id" => options[:id])
end
def create
hash = subscription_hash
FakeBraintree.subscriptions[hash["id"]] = hash
gzipped_response(201, hash.to_xml(:root => 'subscription'))
end
def update
if existing_subscription_hash
hash = update_existing_subscription!
gzipped_response(200, hash.to_xml(:root => 'subscription'))
end
end
def subscription_hash
subscription_hash = @subscription_hash.dup
subscription_hash["id"] ||= subscription_id
subscription_hash["transactions"] = []
subscription_hash["add_ons"] = added_add_ons
subscription_hash["discounts"] = []
subscription_hash["plan_id"] = @subscription_hash["plan_id"]
subscription_hash["next_billing_date"] = braintree_formatted_date(1.month.from_now)
subscription_hash["payment_method_token"] = @subscription_hash["payment_method_token"]
subscription_hash["status"] = Braintree::Subscription::Status::Active
subscription_hash
end
private
def existing_subscription_hash
@subscription_hash['id'] && FakeBraintree.subscriptions[@subscription_hash["id"]]
end
def update_existing_subscription!
new_hash = existing_subscription_hash.merge(subscription_hash)
FakeBraintree.subscriptions[@subscription_hash['id']] = new_hash
end
def braintree_formatted_date(date)
date.strftime('%Y-%m-%d')
end
def subscription_id
md5("#{@subscription_hash["payment_method_token"]}#{Time.now.to_f}")[0,6]
end
def added_add_ons
if @subscription_hash["add_ons"] && @subscription_hash["add_ons"]["add"]
@subscription_hash["add_ons"]["add"].map { |add_on| { "id" => add_on["inherited_from_id"] } }
else
[]
end
end
end
end