Skip to content

Commit

Permalink
Subscription: add "list all" endpoint
Browse files Browse the repository at this point in the history
For consistency, `Customer::Subscription` now inherits from `Subscription`,
similar to `Payment` and `Customer::Payment`.
  • Loading branch information
justincase committed Jan 26, 2020
1 parent 251352f commit 99914c9
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 108 deletions.
4 changes: 4 additions & 0 deletions examples/subscriptions/list.rb
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
# List all subscriptions
subscriptions = Mollie::Subscription.all

# List all subscriptions for a customer
subscriptions = Mollie::Customer::Subscription.all(customer_id: 'cst_5a2pPrwaWy')
5 changes: 3 additions & 2 deletions lib/mollie.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ module Mollie
require 'mollie/chargeback'
require 'mollie/client'
require 'mollie/customer'
require 'mollie/customer/mandate'
require 'mollie/customer/subscription'
require 'mollie/invoice'
require 'mollie/list'
require 'mollie/method'
Expand All @@ -28,8 +26,11 @@ module Mollie
require 'mollie/profile'
require 'mollie/refund'
require 'mollie/settlement'
require 'mollie/subscription'

require 'mollie/customer/mandate'
require 'mollie/customer/payment'
require 'mollie/customer/subscription'
require 'mollie/onboarding'
require 'mollie/order/line'
require 'mollie/order/refund'
Expand Down
105 changes: 1 addition & 104 deletions lib/mollie/customer/subscription.rb
Original file line number Diff line number Diff line change
@@ -1,109 +1,6 @@
module Mollie
class Customer
class Subscription < Base
STATUS_ACTIVE = 'active'.freeze
STATUS_PENDING = 'pending'.freeze # Waiting for a valid mandate.
STATUS_CANCELED = 'canceled'.freeze
STATUS_SUSPENDED = 'suspended'.freeze # Active, but mandate became invalid.
STATUS_COMPLETED = 'completed'.freeze

attr_accessor :id,
:customer_id,
:mode,
:created_at,
:status,
:amount,
:times,
:times_remaining,
:interval,
:next_payment_date,
:description,
:method,
:mandate_id,
:canceled_at,
:webhook_url,
:metadata,
:application_fee,
:_links

alias links _links

def active?
status == STATUS_ACTIVE
end

def pending?
status == STATUS_PENDING
end

def suspended?
status == STATUS_SUSPENDED
end

def canceled?
status == STATUS_CANCELED
end

def completed?
status == STATUS_COMPLETED
end

def created_at=(created_at)
@created_at = begin
Time.parse(created_at.to_s)
rescue StandardError
nil
end
end

def canceled_at=(canceled_at)
@canceled_at = begin
Time.parse(canceled_at.to_s)
rescue StandardError
nil
end
end

def amount=(amount)
@amount = Mollie::Amount.new(amount)
end

def times=(times)
@times = times.to_i
end

def next_payment_date=(next_payment_date)
@next_payment_date = begin
Date.parse(next_payment_date)
rescue StandardError
nil
end
end

def customer(options = {})
Customer.get(customer_id, options)
end

def payments(options = {})
resource_url = Util.extract_url(links, 'payments')
return if resource_url.nil?
response = Mollie::Client.instance.perform_http_call('GET', resource_url, nil, {}, options)
Mollie::List.new(response, Payment)
end

def metadata=(metadata)
@metadata = OpenStruct.new(metadata) if metadata.is_a?(Hash)
end

def application_fee=(application_fee)
amount = Amount.new(application_fee['amount'])
description = application_fee['description']

@application_fee = OpenStruct.new(
amount: amount,
description: description
)
end
class Subscription < Mollie::Subscription
end
end
end
107 changes: 107 additions & 0 deletions lib/mollie/subscription.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
module Mollie
class Subscription < Base
STATUS_ACTIVE = 'active'.freeze
STATUS_PENDING = 'pending'.freeze # Waiting for a valid mandate.
STATUS_CANCELED = 'canceled'.freeze
STATUS_SUSPENDED = 'suspended'.freeze # Active, but mandate became invalid.
STATUS_COMPLETED = 'completed'.freeze

attr_accessor :id,
:customer_id,
:mode,
:created_at,
:status,
:amount,
:times,
:times_remaining,
:interval,
:next_payment_date,
:description,
:method,
:mandate_id,
:canceled_at,
:webhook_url,
:metadata,
:application_fee,
:_links

alias links _links

def active?
status == STATUS_ACTIVE
end

def pending?
status == STATUS_PENDING
end

def suspended?
status == STATUS_SUSPENDED
end

def canceled?
status == STATUS_CANCELED
end

def completed?
status == STATUS_COMPLETED
end

def created_at=(created_at)
@created_at = begin
Time.parse(created_at.to_s)
rescue StandardError
nil
end
end

def canceled_at=(canceled_at)
@canceled_at = begin
Time.parse(canceled_at.to_s)
rescue StandardError
nil
end
end

def amount=(amount)
@amount = Mollie::Amount.new(amount)
end

def times=(times)
@times = times.to_i
end

def next_payment_date=(next_payment_date)
@next_payment_date = begin
Date.parse(next_payment_date)
rescue StandardError
nil
end
end

def customer(options = {})
Customer.get(customer_id, options)
end

def payments(options = {})
resource_url = Util.extract_url(links, 'payments')
return if resource_url.nil?
response = Mollie::Client.instance.perform_http_call('GET', resource_url, nil, {}, options)
Mollie::List.new(response, Mollie::Payment)
end

def metadata=(metadata)
@metadata = OpenStruct.new(metadata) if metadata.is_a?(Hash)
end

def application_fee=(application_fee)
amount = Amount.new(application_fee['amount'])
description = application_fee['description']

@application_fee = OpenStruct.new(
amount: amount,
description: description
)
end
end
end
4 changes: 2 additions & 2 deletions test/mollie/customer/subscription_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,8 @@ def test_get_payments
subscription = Customer::Subscription.get('sub_8JfGzs6v3K', customer_id: 'cst_8wmqcHMN4U')
payments = subscription.payments

assert_equal payments.klass, Payment
assert_equal payments.first.id, 'tr_DtKxVP2AgW'
assert_equal Mollie::Payment, payments.klass
assert_equal 'tr_DtKxVP2AgW', payments.first.id
end
end
end
Expand Down

0 comments on commit 99914c9

Please sign in to comment.