Skip to content

Commit 3a6b263

Browse files
authored
Merge pull request #1136 from AndriiMysko/v2-select-plan-am
Changes for V2 Plan summary and upgrade pages
2 parents 929de8f + 19863b5 commit 3a6b263

35 files changed

+1066
-54
lines changed

lib/travis/api/v3/billing_client.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,18 @@ def update_v2_subscription(subscription_id, plan_data)
115115
handle_v2_subscription_response(response)
116116
end
117117

118+
def v2_plans_for_organization(organization_id)
119+
connection.get("/v2/plans_for/organization/#{organization_id}").body.map do |plan_data|
120+
Travis::API::V3::Models::V2PlanConfig.new(plan_data)
121+
end
122+
end
123+
124+
def v2_plans_for_user
125+
connection.get('/v2/plans_for/user').body.map do |plan_data|
126+
Travis::API::V3::Models::V2PlanConfig.new(plan_data)
127+
end
128+
end
129+
118130
def cancel_subscription(id, reason_data)
119131
response = connection.post("/subscriptions/#{id}/cancel", reason_data)
120132
handle_subscription_response(response)
@@ -127,7 +139,7 @@ def plans_for_organization(organization_id)
127139
end
128140

129141
def plans_for_user
130-
connection.get("/plans_for/user").body.map do |plan_data|
142+
connection.get('/plans_for/user').body.map do |plan_data|
131143
Travis::API::V3::Models::Plan.new(plan_data)
132144
end
133145
end

lib/travis/api/v3/models/v2_addon.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module Travis::API::V3
2+
class Models::V2Addon
3+
attr_reader :id, :name, :type, :current_usage
4+
5+
def initialize(attrs)
6+
@id = attrs.fetch('id')
7+
@name = attrs.fetch('name')
8+
@type = attrs.fetch('type')
9+
@current_usage = attrs['current_usage'] && Models::V2AddonUsage.new(attrs['current_usage'])
10+
end
11+
end
12+
end
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module Travis::API::V3
2+
class Models::V2AddonUsage
3+
attr_reader :id, :addon_id, :addon_quantity, :addon_usage, :remaining, :active
4+
5+
def initialize(attrs)
6+
@id = attrs.fetch('id')
7+
@addon_id = attrs.fetch('addon_id')
8+
@addon_quantity = attrs.fetch('addon_quantity')
9+
@addon_usage = attrs.fetch('addon_usage')
10+
@remaining = attrs.fetch('remaining')
11+
@active = attrs.fetch('active')
12+
end
13+
end
14+
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module Travis::API::V3
2+
class Models::V2PlanConfig
3+
attr_reader :id, :name, :private_repos, :starting_price, :starting_users, :private_credits, :public_credits
4+
5+
def initialize(attrs)
6+
@id = attrs.fetch('id')
7+
@name = attrs.fetch('name')
8+
@private_repos = attrs.fetch('private_repos')
9+
@starting_price = attrs.fetch('starting_price')
10+
@starting_users = attrs.fetch('starting_users')
11+
@private_credits = attrs.fetch('private_credits')
12+
@public_credits = attrs.fetch('public_credits')
13+
end
14+
end
15+
end

lib/travis/api/v3/models/v2_subscription.rb

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,50 @@ module Travis::API::V3
22
class Models::V2Subscription
33
include Models::Owner
44

5-
attr_reader :id, :permissions, :status, :source, :billing_info, :credit_card_info, :owner, :payment_intent, :addons, :created_at
5+
attr_reader :id, :plan, :permissions, :source, :billing_info, :credit_card_info, :owner, :client_secret, :payment_intent, :addons, :created_at
66

77
def initialize(attributes = {})
88
@id = attributes.fetch('id')
9+
@plan = attributes['plan_config'] && Models::V2PlanConfig.new(attributes['plan_config'])
910
@permissions = Models::BillingPermissions.new(attributes.fetch('permissions'))
10-
@status = attributes.fetch('status')
1111
@source = attributes.fetch('source')
12-
@billing_info = attributes['billing_info'] && Models::BillingInfo.new(@id, attributes['billing_info'])
13-
@credit_card_info = attributes['credit_card_info'] && Models::CreditCardInfo.new(@id, attributes['credit_card_info'])
12+
@billing_info = attributes['billing_info'] && Models::V2BillingInfo.new(@id, attributes['billing_info'])
13+
@credit_card_info = attributes['credit_card_info'] && Models::V2CreditCardInfo.new(@id, attributes['credit_card_info'])
1414
@payment_intent = attributes['payment_intent'] && Models::PaymentIntent.new(attributes['payment_intent'])
1515
@owner = fetch_owner(attributes.fetch('owner'))
16-
@addons = attributes.fetch('addons')
16+
@client_secret = attributes.fetch('client_secret')
17+
@addons = attributes['addons'].select { |addon| addon['current_usage']['status'] != 'expired' }.map { |addon| Models::V2Addon.new(addon) }
1718
@created_at = attributes.fetch('created_at')
1819
end
1920
end
21+
22+
class Models::V2BillingInfo
23+
attr_reader :id, :address, :address2, :billing_email, :city, :company, :country, :first_name, :last_name, :state, :vat_id, :zip_code
24+
25+
def initialize(id, attrs)
26+
@id = id
27+
@address = attrs.fetch('address')
28+
@address2 = attrs.fetch('address2')
29+
@billing_email = attrs.fetch('billing_email')
30+
@city = attrs.fetch('city')
31+
@company = attrs.fetch('company')
32+
@country = attrs.fetch('country')
33+
@first_name = attrs.fetch('first_name')
34+
@last_name = attrs.fetch('last_name')
35+
@state = attrs.fetch('state')
36+
@vat_id = attrs.fetch('vat_id')
37+
@zip_code = attrs.fetch('zip_code')
38+
end
39+
end
40+
41+
class Models::V2CreditCardInfo
42+
attr_reader :id, :card_owner, :expiration_date, :last_digits
43+
44+
def initialize(id, attrs)
45+
@id = id
46+
@card_owner = attrs.fetch('card_owner')
47+
@expiration_date = attrs.fetch('expiration_date')
48+
@last_digits = attrs.fetch('last_digits')
49+
end
50+
end
2051
end
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module Travis::API::V3
2+
class Queries::V2Invoices < Query
3+
def all(user_id)
4+
client = BillingClient.new(user_id)
5+
client.get_invoices_for_v2_subscription(params['subscription.id'])
6+
end
7+
end
8+
end

lib/travis/api/v3/queries/v2_plans.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module Travis::API::V3
2+
class Queries::V2Plans < Query
3+
def all(user_id)
4+
client = BillingClient.new(user_id)
5+
if params['organization.id']
6+
client.v2_plans_for_organization(params['organization.id'])
7+
else
8+
client.v2_plans_for_user
9+
end
10+
end
11+
end
12+
end
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
module Travis::API::V3
2+
class Queries::V2Subscription < Query
3+
def update_address(user_id)
4+
address_data = params.dup.tap { |h| h.delete('subscription.id') }
5+
client = BillingClient.new(user_id)
6+
client.update_v2_address(params['subscription.id'], address_data)
7+
end
8+
9+
def update_creditcard(user_id)
10+
client = BillingClient.new(user_id)
11+
client.update_v2_creditcard(params['subscription.id'], params['token'])
12+
end
13+
14+
def update_plan(user_id)
15+
plan_data = params.dup.tap { |h| h.delete('subscription.id') }
16+
client = BillingClient.new(user_id)
17+
client.update_v2_subscription(params['subscription.id'], plan_data)
18+
end
19+
20+
def invoices(user_id)
21+
client = BillingClient.new(user_id)
22+
client.get_invoices_for_v2_subscription(params['subscription.id'])
23+
end
24+
25+
def pay(user_id)
26+
client = BillingClient.new(user_id)
27+
client.pay_v2(params['subscription.id'])
28+
end
29+
end
30+
end
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module Travis::API::V3
2+
class Queries::V2Subscriptions < Query
3+
params :plan, :coupon, :organization_id, :client_secret
4+
params :first_name, :last_name, :company, :address, :address2, :city, :country, :state, :vat_id, :zip_code, :billing_email, prefix: :billing_info
5+
params :token, prefix: :credit_card_info
6+
7+
def all(user_id)
8+
client = BillingClient.new(user_id)
9+
client.all_v2
10+
end
11+
12+
def create(user_id)
13+
client = BillingClient.new(user_id)
14+
client.create_v2_subscription(
15+
:plan => params['plan'],
16+
:client_secret => params['client_secret'],
17+
:coupon => params['coupon'],
18+
:organization_id => params['organization_id'],
19+
:billing_info => billing_info_params,
20+
:credit_card_info => credit_card_info_params
21+
)
22+
end
23+
end
24+
end
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module Travis::API::V3
2+
class Renderer::V2Addon < ModelRenderer
3+
representation(:standard, :id, :name, :type, :current_usage)
4+
representation(:minimal, :id, :name, :type, :current_usage)
5+
6+
def current_usage
7+
Renderer.render_model(model.current_usage, mode: :standard) unless model.current_usage.nil?
8+
end
9+
end
10+
end

0 commit comments

Comments
 (0)