Class: TrustcommerceSyncAgent

Inherits:
Object
  • Object
show all
Defined in:
lib/trustcommerce_sync_agent.rb

Overview

This agent will pull down recent transactions from the TrustCommerce vault using the following schema:

create_table :subscriptions do |t|
  t.column :account_id,                :integer,   :null => false
  t.column :created_on,                :datetime,  :null => false
  t.column :billing_id,                :string
  t.column :length,                    :integer,   :null => false
  t.column :cents,                     :integer,   :null => false
  t.column :billing_full_name,         :string
  t.column :billing_address,           :string
  t.column :billing_zip_code,          :string
  t.column :billing_country,           :string
  t.column :billing_card_type,         :string
  t.column :billing_credit_card,       :string
  t.column :billing_expiration_date,   :datetime   
end

add_index :subscriptions, :account_id

create_table :subscription_transactions do |t|
  t.column :subscription_id,          :integer,   :null => false
  t.column :account_id,               :integer,   :null => false
  t.column :transaction_date,         :datetime,  :null => false
  t.column :transaction_id,           :string,    :null => false
  t.column :transaction_type,         :string,    :null => false
  t.column :amount,                   :decimal,   :null => false
  t.column :card_number,              :string,    :null => false
  t.column :card_type,                :string,    :null => false
  t.column :cardholder_name,          :string,    :null => false     
end

add_index :subscription_transactions, :subscription_id
add_index :subscription_transactions, :account_id

Install as cron job or test it out on the console:

$ ./script/runner -e production “TrustcommerceSyncAgent.sync(‘3h’)”

Class Method Summary collapse

Class Method Details

.sync(time_ago = nil) ⇒ Object

time_ago examples:

30m => 30 minutes
1h  => 1 hour
3d  => 3 days


47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/trustcommerce_sync_agent.rb', line 47

def self.sync(time_ago = nil)
  time = case time_ago
    when /^(\d+)m$/ then Time.now.utc - $1.to_i.minute
    when /^(\d+)h$/ then Time.now.utc - $1.to_i.hour
    when /^(\d+)d$/ then Time.now.utc - $1.to_i.day
    else Time.now.utc - 1.hour
  end
  # --- [ find recently created paying subscriptions ] ---
  subscriptions = Subscription.find(:all, :conditions => ['cents > 0 AND created_on > ?', time])
  subscriptions.each do |subscription|
    sync_subscription(subscription)
  end
end