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



130
131
132
133
134
# File 'lib/chargify_api_ares/resources/subscription.rb', line 130

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

#adjustment(attrs = {}) ⇒ Object



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

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



33
34
35
# File 'lib/chargify_api_ares/resources/subscription.rb', line 33

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

#cancel(cancellation_message = nil) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/chargify_api_ares/resources/subscription.rb', line 24

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

#cancel_delayed_product_changeObject



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

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



73
74
75
# File 'lib/chargify_api_ares/resources/subscription.rb', line 73

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

#component(id) ⇒ Object



46
47
48
# File 'lib/chargify_api_ares/resources/subscription.rb', line 46

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

#components(params = {}) ⇒ Object



50
51
52
53
# File 'lib/chargify_api_ares/resources/subscription.rb', line 50

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

#create_metadata(params = {}) ⇒ Object



37
38
39
# File 'lib/chargify_api_ares/resources/subscription.rb', line 37

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

#credit(attrs = {}) ⇒ Object



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

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



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

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



55
56
57
58
# File 'lib/chargify_api_ares/resources/subscription.rb', line 55

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

#metadata(params = {}) ⇒ Object



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

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

#migrate(attrs = {}) ⇒ Object



103
104
105
# File 'lib/chargify_api_ares/resources/subscription.rb', line 103

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

#payment_profileObject



60
61
62
63
64
65
66
67
68
# File 'lib/chargify_api_ares/resources/subscription.rb', line 60

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



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

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

#reactivate(params = {}) ⇒ Object



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

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

#refund(attrs = {}) ⇒ Object



84
85
86
87
88
89
# File 'lib/chargify_api_ares/resources/subscription.rb', line 84

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



136
137
138
139
140
141
142
143
144
# File 'lib/chargify_api_ares/resources/subscription.rb', line 136

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

#reset_balanceObject



97
98
99
100
101
# File 'lib/chargify_api_ares/resources/subscription.rb', line 97

def reset_balance
  process_capturing_errors do
    put :reset_balance
  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)


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

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

#statements(params = {}) ⇒ Object



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

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

#transactions(params = {}) ⇒ Object



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

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