Class: Chargify::Subscription

Inherits:
Base
  • Object
show all
Includes:
ResponseHelper
Defined in:
lib/chargify_api_ares/resources/subscription.rb

Defined Under Namespace

Classes: Component, Event, Statement, Transaction

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ResponseHelper

#extract_uniqueness_token

Methods inherited from Base

element_name, #to_xml

Class Method Details

.find_by_customer_reference(reference) ⇒ Object



5
6
7
8
# File 'lib/chargify_api_ares/resources/subscription.rb', line 5

def self.find_by_customer_reference(reference)
  customer = Customer.find_by_reference(reference)
  find(:first, :params => {:customer_id => customer.id})
end

Instance Method Details

#add_coupon(code) ⇒ Object



162
163
164
165
166
# File 'lib/chargify_api_ares/resources/subscription.rb', line 162

def add_coupon(code)
  process_capturing_errors do
    post :add_coupon, :code => code
  end
end

#adjustment(attrs = {}) ⇒ Object



155
156
157
158
159
160
# File 'lib/chargify_api_ares/resources/subscription.rb', line 155

def adjustment(attrs = {})
  attrs, options = extract_uniqueness_token(attrs)
  process_capturing_errors do
    post :adjustments, options, attrs.to_xml(:root => :adjustment)
  end
end

#build_metadata(params = {}) ⇒ Object



40
41
42
# File 'lib/chargify_api_ares/resources/subscription.rb', line 40

def (params = {})
  SubscriptionMetadata.new(params.reverse_merge({:resource_id => self.id}))
end

#cancel(params = {}) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/chargify_api_ares/resources/subscription.rb', line 24

def cancel(params = {})
  if params.blank?
    destroy
  else
    #Destroy does not support body, must work around it to send verb DELETE
    self.connection.post(
      element_path,
      {
        cancellation_message: params[:cancellation_message] || nil,
        reason_code: params[:reason_code] || nil
      }.to_xml(:root => :subscription),
      self.class.headers.merge({'X-Http-Method-Override' => 'DELETE'})
    )
  end
end

#cancel_delayed_product_changeObject



189
190
191
192
# File 'lib/chargify_api_ares/resources/subscription.rb', line 189

def cancel_delayed_product_change
  self.next_product_id = nil
  save
end

#charge(attrs = {}) ⇒ Object

Perform a one-time charge on an existing subscription. For more information, please see the one-time charge API docs available at: support.chargify.com/faqs/api/api-charges



80
81
82
# File 'lib/chargify_api_ares/resources/subscription.rb', line 80

def charge(attrs = {})
  Chargify::Charge.create(attrs.merge(:subscription_id => self.id))
end

#component(id) ⇒ Object



53
54
55
# File 'lib/chargify_api_ares/resources/subscription.rb', line 53

def component(id)
  Component.find(id, :params => {:subscription_id => self.id})
end

#components(params = {}) ⇒ Object



57
58
59
60
# File 'lib/chargify_api_ares/resources/subscription.rb', line 57

def components(params = {})
  params.merge!({:subscription_id => self.id})
  Component.find(:all, :params => params)
end

#create_metadata(params = {}) ⇒ Object



44
45
46
# File 'lib/chargify_api_ares/resources/subscription.rb', line 44

def (params = {})
  SubscriptionMetadata.create(params.reverse_merge({:resource_id => self.id}))
end

#credit(attrs = {}) ⇒ Object



92
93
94
95
96
97
# File 'lib/chargify_api_ares/resources/subscription.rb', line 92

def credit(attrs = {})
  attrs, options = extract_uniqueness_token(attrs)
  process_capturing_errors do
    post :credits, options, attrs.to_xml(:root => :credit)
  end
end

#delayed_cancel(cancel_at_end_of_period = true) ⇒ Object



178
179
180
181
# File 'lib/chargify_api_ares/resources/subscription.rb', line 178

def delayed_cancel(cancel_at_end_of_period = true)
  self.cancel_at_end_of_period = cancel_at_end_of_period
  save
end

#events(params = {}) ⇒ Object



62
63
64
65
# File 'lib/chargify_api_ares/resources/subscription.rb', line 62

def events(params = {})
  params.merge!(:subscription_id => self.id)
  Event.all(:params => params)
end

#invoice(id) ⇒ Object

Raises:

  • (ActiveResource::ResourceNotFound)


144
145
146
147
148
# File 'lib/chargify_api_ares/resources/subscription.rb', line 144

def invoice(id)
  invoice = Chargify::Invoice.find(id)
  raise ActiveResource::ResourceNotFound.new(nil) if (invoice.subscription_id != self.id)
  invoice
end

#invoices(params = {}) ⇒ Object



139
140
141
142
# File 'lib/chargify_api_ares/resources/subscription.rb', line 139

def invoices(params = {})
  params.merge!(subscription_id: self.id)
  Invoice.find(:all, params: params)
end

#metadata(params = {}) ⇒ Object



48
49
50
51
# File 'lib/chargify_api_ares/resources/subscription.rb', line 48

def (params={})
  params.merge!({:resource_id => self.id})
  SubscriptionMetadata.find(:all, :params => params)
end

#migrate(attrs = {}) ⇒ Object



124
125
126
# File 'lib/chargify_api_ares/resources/subscription.rb', line 124

def migrate(attrs = {})
  Chargify::Migration.create(attrs.merge(:subscription_id => self.id))
end

#payment(attrs = {}) ⇒ Object

Record an external payment on an existing subscription. This DOES NOT charge the customer’s credit card. For more information, please see the API docs available at: docs.chargify.com/api-payments



88
89
90
# File 'lib/chargify_api_ares/resources/subscription.rb', line 88

def payment(attrs = {})
  Chargify::Payment.create(attrs.merge(:subscription_id => self.id))
end

#payment_profileObject



67
68
69
70
71
72
73
74
75
# File 'lib/chargify_api_ares/resources/subscription.rb', line 67

def payment_profile
  if self.respond_to?('credit_card')
    credit_card
  elsif self.respond_to?('bank_account')
    
  elsif self.respond_to?('paypal_account')
    
  end
end

#product_change(handle, delayed = false) ⇒ Object



183
184
185
186
187
# File 'lib/chargify_api_ares/resources/subscription.rb', line 183

def product_change(handle, delayed = false)
  self.product_handle = handle
  self.product_change_delayed = delayed
  save
end

#reactivate(params = {}) ⇒ Object



106
107
108
109
110
# File 'lib/chargify_api_ares/resources/subscription.rb', line 106

def reactivate(params = {})
  process_capturing_errors do
    put :reactivate, params
  end
end

#refund(attrs = {}) ⇒ Object



99
100
101
102
103
104
# File 'lib/chargify_api_ares/resources/subscription.rb', line 99

def refund(attrs = {})
  attrs, options = extract_uniqueness_token(attrs)
  process_capturing_errors do
    post :refunds, options, attrs.to_xml(:root => :refund)
  end
end

#remove_coupon(code = nil) ⇒ Object



168
169
170
171
172
173
174
175
176
# File 'lib/chargify_api_ares/resources/subscription.rb', line 168

def remove_coupon(code=nil)
  process_capturing_errors do
    if code.nil?
      delete :remove_coupon
    else
      delete :remove_coupon, :coupon_code => code
    end
  end
end

#reset_balanceObject



118
119
120
121
122
# File 'lib/chargify_api_ares/resources/subscription.rb', line 118

def reset_balance
  process_capturing_errors do
    put :reset_balance
  end
end

#retryObject



112
113
114
115
116
# File 'lib/chargify_api_ares/resources/subscription.rb', line 112

def retry
  process_capturing_errors do
    put :retry
  end
end

#saveObject

Strip off nested attributes of associations before saving, or type-mismatch errors will occur



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/chargify_api_ares/resources/subscription.rb', line 11

def save
  self.attributes.stringify_keys!
  self.attributes.delete('customer')
  self.attributes.delete('product')
  self.attributes.delete('credit_card')
  self.attributes.delete('bank_account')
  self.attributes.delete('paypal_account')

  self.attributes, options = extract_uniqueness_token(attributes)
  self.prefix_options.merge!(options)
  super
end

#statement(id) ⇒ Object

Raises:

  • (ActiveResource::ResourceNotFound)


128
129
130
131
132
# File 'lib/chargify_api_ares/resources/subscription.rb', line 128

def statement(id)
  statement = Chargify::Statement.find(id)
  raise ActiveResource::ResourceNotFound.new(nil) if (statement.subscription_id != self.id)
  statement
end

#statements(params = {}) ⇒ Object



134
135
136
137
# File 'lib/chargify_api_ares/resources/subscription.rb', line 134

def statements(params = {})
  params.merge!(:subscription_id => self.id)
  Statement.find(:all, :params => params)
end

#transactions(params = {}) ⇒ Object



150
151
152
153
# File 'lib/chargify_api_ares/resources/subscription.rb', line 150

def transactions(params = {})
  params.merge!(:subscription_id => self.id)
  Transaction.find(:all, :params => params)
end