Skip to content

Commit 99fd627

Browse files
Merge pull request #1212 from travis-ci/pricing_adjustments_master
Pricing adjustments master
2 parents dc7fba9 + 5d2edf8 commit 99fd627

36 files changed

+577
-17
lines changed

lib/travis/api/v3/billing_client.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,19 @@ def executions(owner_type, owner_id, page, per_page, from, to)
4242
executions
4343
end
4444

45+
def calculate_credits(users, executions)
46+
response = connection.post("/usage/credits_calculator", users: users, executions: executions)
47+
response.body.map do |calculator_data|
48+
Travis::API::V3::Models::CreditsResult.new(calculator_data)
49+
end
50+
end
51+
52+
def credits_calculator_default_config
53+
response = connection.get('/usage/credits_calculator/default_config')
54+
55+
Travis::API::V3::Models::CreditsCalculatorConfig.new(response.body)
56+
end
57+
4558
def all
4659
data = connection.get('/subscriptions').body
4760
subscriptions = data.fetch('subscriptions').map do |subscription_data|
@@ -210,11 +223,21 @@ def create_auto_refill(plan_id, is_enabled)
210223
handle_errors_and_respond(response)
211224
end
212225

226+
def update_auto_refill(addon_id, threshold, amount)
227+
response = connection.patch('/auto_refill', {id: addon_id, threshold: threshold, amount: amount})
228+
handle_errors_and_respond(response)
229+
end
230+
213231
def get_auto_refill(plan_id)
214232
response = connection.get("/auto_refill?plan_id=#{plan_id}")
215233
handle_errors_and_respond(response) { |r| Travis::API::V3::Models::AutoRefill.new(r) }
216234
end
217235

236+
def cancel_v2_subscription(id, reason_data)
237+
response = connection.post("/v2/subscriptions/#{id}/cancel", reason_data)
238+
handle_subscription_response(response)
239+
end
240+
218241
private
219242

220243
def handle_subscription_response(response)

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
module Travis::API::V3
22
class Models::AutoRefill
33

4-
attr_reader :enabled, :threshold, :amount
4+
attr_reader :addon_id, :enabled, :threshold, :amount
55
def initialize(attributes = {})
6+
@addon_id = attributes.fetch('addon_id', nil) || attributes.fetch('id', nil)
67
@enabled = attributes.key?('enabled') ? attributes.fetch('enabled') : true
78
@threshold = attributes.key?('refill_threshold') ? attributes.fetch('refill_threshold') : 25000
89
@amount = attributes.key?('refill_amount') ? attributes.fetch('refill_amount'): 10000
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module Travis::API::V3
2+
class Models::CreditsCalculatorConfig
3+
ATTRS = %w[users minutes os instance_size]
4+
5+
attr_accessor *ATTRS
6+
7+
def initialize(attrs)
8+
ATTRS.each { |key| send("#{key}=", attrs[key]) }
9+
end
10+
end
11+
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module Travis::API::V3
2+
class Models::CreditsResult
3+
ATTRS = %w[users minutes os instance_size credits price]
4+
5+
attr_accessor *ATTRS
6+
7+
def initialize(attrs)
8+
ATTRS.each { |key| send("#{key}=", attrs[key]) }
9+
end
10+
end
11+
end

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module Travis::API::V3
22
class Models::Execution
33
attr_reader :id, :os, :instance_size, :arch, :virtualization_type, :queue, :job_id, :repository_id, :owner_id,
4-
:owner_type, :plan_id, :sender_id, :credits_consumed, :started_at, :finished_at, :created_at,
5-
:updated_at
4+
:owner_type, :plan_id, :sender_id, :credits_consumed, :user_license_credits_consumed, :started_at,
5+
:finished_at, :created_at, :updated_at
66

77
def initialize(attributes = {})
88
@id = attributes.fetch('id')
@@ -18,6 +18,7 @@ def initialize(attributes = {})
1818
@plan_id = attributes.fetch('plan_id')
1919
@sender_id = attributes.fetch('sender_id')
2020
@credits_consumed = attributes.fetch('credits_consumed')
21+
@user_license_credits_consumed = attributes.fetch('user_license_credits_consumed')
2122
@started_at = attributes.fetch('started_at')
2223
@finished_at = attributes.fetch('finished_at')
2324
@created_at = attributes.fetch('created_at')

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
module Travis::API::V3
22
class Models::V2Addon
3-
attr_reader :id, :name, :type, :current_usage
3+
attr_reader :id, :name, :type, :current_usage, :recurring
44

55
def initialize(attrs)
66
@id = attrs.fetch('id')
77
@name = attrs.fetch('name')
88
@type = attrs.fetch('type')
99
@current_usage = attrs['current_usage'] && Models::V2AddonUsage.new(attrs['current_usage'])
10+
@recurring = attrs['recurring']
1011
end
1112
end
1213
end

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
module Travis::API::V3
22
class Models::V2PlanConfig
33
attr_reader :id, :name, :private_repos, :starting_price, :starting_users, :plan_type,
4-
:private_credits, :public_credits, :addon_configs, :concurrency_limit, :available_standalone_addons, :auto_refill_enabled, :trial_plan
4+
:private_credits, :public_credits, :addon_configs, :concurrency_limit, :available_standalone_addons, :auto_refill_enabled, :trial_plan,
5+
:annual, :auto_refill_thresholds, :auto_refill_amounts
56

67
def initialize(attrs)
78
@id = attrs.fetch('id')
@@ -15,6 +16,9 @@ def initialize(attrs)
1516
@plan_type = attrs.fetch('plan_type')
1617
@concurrency_limit = attrs.fetch('concurrency_limit')
1718
@available_standalone_addons = attrs.fetch('available_standalone_addons')
19+
@annual = attrs.fetch('annual')
20+
@auto_refill_thresholds = attrs.fetch('auto_refill_thresholds')
21+
@auto_refill_amounts = attrs.fetch('auto_refill_amounts')
1822
@trial_plan = attrs.fetch('trial_plan', false)
1923
end
2024
end

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ class Models::V2Subscription
33
include Models::Owner
44

55
attr_reader :id, :plan, :permissions, :source, :billing_info, :credit_card_info, :owner, :status, :valid_to, :canceled_at,
6-
:client_secret, :payment_intent, :addons, :auto_refill, :available_standalone_addons, :created_at
6+
:client_secret, :payment_intent, :addons, :auto_refill, :available_standalone_addons, :created_at, :scheduled_plan_name
77

88
def initialize(attributes = {})
99
@id = attributes.fetch('id')
@@ -30,6 +30,7 @@ def initialize(attributes = {})
3030
@status = attributes.fetch('status')
3131
@valid_to = attributes.fetch('valid_to')
3232
@canceled_at = attributes.fetch('canceled_at')
33+
@scheduled_plan_name = attributes.fetch('scheduled_plan')
3334
end
3435
end
3536

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 Queries::CreditsCalculator < Query
3+
params :users, :executions
4+
5+
def calculate(user_id)
6+
client = BillingClient.new(user_id)
7+
client.calculate_credits(params['users'], params['executions'])
8+
end
9+
10+
def default_config(user_id)
11+
client = BillingClient.new(user_id)
12+
client.credits_calculator_default_config
13+
end
14+
end
15+
end

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module Travis::API::V3
22
class Queries::V2Subscription < Query
3-
params :enabled
3+
params :enabled, :threshold, :amount
44

55
def update_address(user_id)
66
address_data = params.dup.tap { |h| h.delete('subscription.id') }
@@ -49,5 +49,16 @@ def toggle_auto_refill(user_id, plan_id)
4949
client = BillingClient.new(user_id)
5050
client.create_auto_refill(plan_id, enabled)
5151
end
52+
53+
def cancel(user_id)
54+
reason_data = params.dup.tap { |h| h.delete('subscription.id') }
55+
client = BillingClient.new(user_id)
56+
client.cancel_v2_subscription(params['subscription.id'], reason_data)
57+
end
58+
59+
def update_auto_refill(user_id, addon_id)
60+
client = BillingClient.new(user_id)
61+
client.update_auto_refill(addon_id, threshold, amount)
62+
end
5263
end
5364
end

0 commit comments

Comments
 (0)