Class: Epay::Subscription

Inherits:
Object
  • Object
show all
Includes:
Model
Defined in:
lib/epay/subscription.rb

Instance Attribute Summary collapse

Attributes included from Model

#data, #id

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Model

#initialize, #inspect, inspect

Instance Attribute Details

#card_noObject

Returns the value of attribute card_no.



5
6
7
# File 'lib/epay/subscription.rb', line 5

def card_no
  @card_no
end

Class Method Details

.allObject



114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/epay/subscription.rb', line 114

def all
  Epay::Api.request(SUBSCRIPTION_SOAP_URL, 'getsubscriptions') do |response|
    if response.success?
      collection = []
      response.data['subscriptionAry']['SubscriptionInformationType'].each do |subscription|
        collection << new_from_data(subscription)
      end
      
      collection
    end
  end
end

.create(params) ⇒ Object

Epay::Subscription.create(:card_no => ‘…’, :)



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/epay/subscription.rb', line 88

def create(params)
  params.merge!(
    :order_no => (Time.now.to_f * 10000).to_i.to_s, # Produce a unique order_no - it's not used anywhere, but ePay needs this
    :amount   => 0
  )
  
  post = Api.default_post_for_params(params).merge({
    :subscription       => 1,
    :subscriptionname   => params[:description]
  })
  
  query = Api.authorize(post)
  
  if query['accept']
    # Return the new subscriber
    subscription = new(query["subscriptionid"].to_i).reload
    
    # Set (obfuscated) card number:
    subscription.card_no = query["tcardno"]
    
    subscription
  else
    new(nil, 'error' => query["error"])
  end
end

.find(id) ⇒ Object

Epay::Subscription.find(1234)



83
84
85
# File 'lib/epay/subscription.rb', line 83

def find(id)
  Subscription.new(id).reload
end

.inspectable_attributesObject



7
8
9
# File 'lib/epay/subscription.rb', line 7

def self.inspectable_attributes
  %w(id created_at description)
end

.new_from_data(data) ⇒ Object



127
128
129
# File 'lib/epay/subscription.rb', line 127

def new_from_data(data)
  new(data['subscriptionid'].to_i, data)
end

Instance Method Details

#authorize(params = {}) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/epay/subscription.rb', line 63

def authorize(params = {})
  post = Api.default_post_for_params(params)
  
  post[:subscriptionid] = id
  
  Epay::Api.request(SUBSCRIPTION_SOAP_URL, 'authorize', post) do |response|
    if response.success?
      Transaction.find(response.data['transactionid'])
    else
      Transaction.new(nil, 'error' => response.data['pbsresponse'], 'failed' => true)
    end
  end
end

#cardObject



15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/epay/subscription.rb', line 15

def card
  # The card number can be derived from last transaction
  if transactions.any?
    transactions.last.card
  else
    Card.new({
      :exp_year   => data['expyear'].to_i,
      :exp_month  => data['expmonth'].to_i,
      :kind       => data['cardtypeid'].downcase.to_sym,
      :number     => card_no
    })
  end
end

#created_atObject



11
12
13
# File 'lib/epay/subscription.rb', line 11

def created_at
  Time.parse(data['created'])
end

#deleteObject



77
78
79
# File 'lib/epay/subscription.rb', line 77

def delete
  Epay::Api.request(SUBSCRIPTION_SOAP_URL, 'delete', :subscriptionid => id).success?
end

#descriptionObject



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

def description
  data['description']
end

#errorObject



29
30
31
# File 'lib/epay/subscription.rb', line 29

def error
  data['error']
end

#reloadObject

Actions



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/epay/subscription.rb', line 51

def reload
  response = Epay::Api.request(SUBSCRIPTION_SOAP_URL, 'getsubscriptions', :subscriptionid => id) do |response|
    # API returns a list of subscriptions
    if response.success?
      @data = response.data['subscriptionAry']['SubscriptionInformationType']
      self
    else
      raise(SubscriptionNotFound, "Couldn't find subscription with ID=#{id}")
    end
  end
end

#transactionsObject



41
42
43
44
45
46
47
48
# File 'lib/epay/subscription.rb', line 41

def transactions
  return [] unless data['transactionList'].present?
  
  # transactionList can be a hash or an array
  Array.wrap(data['transactionList']['TransactionInformationType']).collect do |transaction_data|
    Transaction.new(transaction_data['transactionid'].to_i, transaction_data)
  end
end

#valid?Boolean

Returns:

  • (Boolean)


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

def valid?
  data['error'].nil?
end