Module: MerbMerchant::Billing::Integrations::ActionViewHelper

Defined in:
lib/merb_merchant/billing/integrations/action_view_helper.rb

Overview

:nodoc:

Instance Method Summary collapse

Instance Method Details

#payment_service_for(order, account, options = {}) {|service| ... } ⇒ Object

This helper allows the usage of different payment integrations through a single form helper. Payment integrations are the type of service where the user is redirected to the secure site of the service, like Paypal or Chronopay.

The helper creates a scope around a payment service helper which provides the specific mapping for that service.

<% payment_service_for 1000, '[email protected]',
                             :amount => 50.00, 
                             :currency => 'CAD', 
                             :service => :paypal, 
                             :html => { :id => 'payment-form' } do |service| %>

  <% service.customer :first_name => 'Cody',
                     :last_name => 'Fauser',
                     :phone => '(555)555-5555',
                     :email => '[email protected]' %>

  <% service.billing_address :city => 'Ottawa',
                            :address1 => '21 Snowy Brook Lane',
                            :address2 => 'Apt. 36',
                            :state => 'ON',
                            :country => 'CA',
                            :zip => 'K1J1E5' %>

  <% service.invoice '#1000' %>
  <% service.shipping '0.00' %>
  <% service.tax '0.00' %>

  <% service.notify_url url_for(:only_path => false, :action => 'notify') %>
  <% service.return_url url_for(:only_path => false, :action => 'done') %>
  <% service.cancel_return_url 'http://mystore.com' %>
<% end %>

Yields:

  • (service)

Raises:

  • (ArgumentError)


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/merb_merchant/billing/integrations/action_view_helper.rb', line 42

def payment_service_for(order, , options = {}, &proc)          
  raise ArgumentError, "Missing block" unless block_given?

  integration_module = MerbMerchant::Billing::Integrations.const_get(options.delete(:service).to_s.classify)

  if ignore_binding?
    concat(form_tag(integration_module.service_url, options.delete(:html) || {}))
  else
    concat(form_tag(integration_module.service_url, options.delete(:html) || {}), proc.binding)
  end
  result = "\n"
  
  service_class = integration_module.const_get('Helper')
  service = service_class.new(order, , options)
  yield service
  
  result << service.form_fields.collect do |field, value|
    hidden_field_tag(field, value)
  end.join("\n")

  result << "\n"
  result << '</form>' 

  if ignore_binding?
    concat(result)
  else
    concat(result, proc.binding)
  end
end