samurai 0.2.7 → 0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/app/views/application/_errors.html.erb +3 -3
- data/app/views/application/_payment_method_form.html.erb +43 -39
- data/app/views/application/_transaction.html.erb +23 -22
- data/lib/samurai/processor.rb +14 -4
- data/lib/samurai/rails/views.rb +1 -1
- data/lib/samurai/transaction.rb +12 -18
- data/lib/samurai/version.rb +1 -1
- metadata +12 -12
data/Gemfile.lock
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
<% transaction ||= (@transaction || Samurai::Transaction.new) %>
|
2
2
|
<% payment_method ||= (@payment_method || Samurai::PaymentMethod.new) %>
|
3
|
-
<% if transaction.
|
3
|
+
<% if transaction.has_errors? || payment_method.has_errors? %>
|
4
4
|
<div id="error_explanation">
|
5
5
|
<h4>This transaction could not be processed:</h4>
|
6
6
|
<ul>
|
7
7
|
<% transaction.errors.full_messages.each do |msg| %>
|
8
8
|
<li><%= msg %></li>
|
9
|
-
<% end %>
|
9
|
+
<% end if transaction.has_errors? %>
|
10
10
|
<% payment_method.errors.full_messages.each do |msg| %>
|
11
11
|
<li><%= msg %></li>
|
12
|
-
<% end %>
|
12
|
+
<% end if payment_method.has_errors? %>
|
13
13
|
</ul>
|
14
14
|
</div>
|
15
15
|
<% end %>
|
@@ -22,27 +22,27 @@
|
|
22
22
|
<div class="field-group" id="credit_card_address_group">
|
23
23
|
<div>
|
24
24
|
<label for="credit_card_address_1">Address 1</label>
|
25
|
-
<input class="
|
25
|
+
<input class="" id="credit_card_address_1" name="credit_card[address_1]" size="30" type="text" value="<%= payment_method.address_1 %>" />
|
26
26
|
</div>
|
27
27
|
<div>
|
28
28
|
<label for="credit_card_address_2">Address 2</label>
|
29
|
-
<input class="
|
29
|
+
<input class="" id="credit_card_address_2" name="credit_card[address_2]" size="30" type="text" value="<%= payment_method.address_2 %>" />
|
30
30
|
</div>
|
31
31
|
</div>
|
32
32
|
|
33
33
|
<div class="field-group" id="location_group">
|
34
|
-
<
|
34
|
+
<span>
|
35
35
|
<label for="credit_card_city">City</label>
|
36
36
|
<input id="credit_card_city" name="credit_card[city]" size="30" type="text" value="<%= payment_method.city %>" />
|
37
|
-
</
|
38
|
-
<
|
37
|
+
</span>
|
38
|
+
<span>
|
39
39
|
<label for="credit_card_state">State</label>
|
40
|
-
<input class="
|
41
|
-
</
|
42
|
-
<
|
40
|
+
<input class="" id="credit_card_state" name="credit_card[state]" size="30" type="text" value="<%= payment_method.state %>" />
|
41
|
+
</span>
|
42
|
+
<span>
|
43
43
|
<label for="credit_card_zip">Zip</label>
|
44
|
-
<input class="
|
45
|
-
</
|
44
|
+
<input class="" id="credit_card_zip" name="credit_card[zip]" size="30" type="text" value="<%= payment_method.zip %>" />
|
45
|
+
</span>
|
46
46
|
</div>
|
47
47
|
</fieldset>
|
48
48
|
|
@@ -51,40 +51,44 @@
|
|
51
51
|
<span>
|
52
52
|
<label for="credit_card_card_number">Card Number</label>
|
53
53
|
<input id="credit_card_card_number" name="credit_card[card_number]" size="30" type="text" value="<%= payment_method.card_number %>" />
|
54
|
+
<label data-samurai="card_previews">
|
55
|
+
<span class='visa'></span>
|
56
|
+
<span class='mastercard'></span>
|
57
|
+
<span class='amex'></span>
|
58
|
+
<span class='discover'></span>
|
59
|
+
</label>
|
54
60
|
</span>
|
55
61
|
<span>
|
56
62
|
<label for="credit_card_cvv">CVV</label>
|
57
|
-
<input class="
|
63
|
+
<input class="" id="credit_card_cvv" name="credit_card[cvv]" size="30" type="text" value="<%= payment_method.cvv %>" />
|
64
|
+
</span>
|
65
|
+
<span>
|
66
|
+
<label for="credit_card_expiry_month">Expires on</label>
|
67
|
+
<select id="credit_card_expiry_month" name="credit_card[expiry_month]">
|
68
|
+
<option value="1" <%= 'selected' if payment_method.expiry_month.to_s=='1' %>>01</option>
|
69
|
+
<option value="2" <%= 'selected' if payment_method.expiry_month.to_s=='2' %>>02</option>
|
70
|
+
<option value="3" <%= 'selected' if payment_method.expiry_month.to_s=='3' %>>03</option>
|
71
|
+
<option value="4" <%= 'selected' if payment_method.expiry_month.to_s=='4' %>>04</option>
|
72
|
+
<option value="5" <%= 'selected' if payment_method.expiry_month.to_s=='5' %>>05</option>
|
73
|
+
<option value="6" <%= 'selected' if payment_method.expiry_month.to_s=='6' %>>06</option>
|
74
|
+
<option value="7" <%= 'selected' if payment_method.expiry_month.to_s=='7' %>>07</option>
|
75
|
+
<option value="8" <%= 'selected' if payment_method.expiry_month.to_s=='8' %>>08</option>
|
76
|
+
<option value="9" <%= 'selected' if payment_method.expiry_month.to_s=='9' %>>09</option>
|
77
|
+
<option value="10" <%= 'selected' if payment_method.expiry_month.to_s=='10' %>>10</option>
|
78
|
+
<option value="11" <%= 'selected' if payment_method.expiry_month.to_s=='11' %>>11</option>
|
79
|
+
<option value="12" <%= 'selected' if payment_method.expiry_month.to_s=='12' %>>12</option>
|
80
|
+
</select>
|
81
|
+
<select id="credit_card_expiry_year" name="credit_card[expiry_year]">
|
82
|
+
<option value="2011" <%= 'selected' if payment_method.expiry_year.to_s=='2011' %>>2011</option>
|
83
|
+
<option value="2012" <%= 'selected' if payment_method.expiry_year.to_s=='2012' %>>2012</option>
|
84
|
+
<option value="2013" <%= 'selected' if payment_method.expiry_year.to_s=='2013' %>>2013</option>
|
85
|
+
<option value="2014" <%= 'selected' if payment_method.expiry_year.to_s=='2014' %>>2014</option>
|
86
|
+
<option value="2015" <%= 'selected' if payment_method.expiry_year.to_s=='2015' %>>2015</option>
|
87
|
+
<option value="2016" <%= 'selected' if payment_method.expiry_year.to_s=='2016' %>>2016</option>
|
88
|
+
</select>
|
58
89
|
</span>
|
59
90
|
</div>
|
60
|
-
|
61
|
-
<div>
|
62
|
-
<label for="credit_card_expiry_month">Expires on</label>
|
63
|
-
<select id="credit_card_expiry_month" name="credit_card[expiry_month]">
|
64
|
-
<option value="1" <%= 'selected' if payment_method.expiry_month.to_s=='1' %>>01</option>
|
65
|
-
<option value="2" <%= 'selected' if payment_method.expiry_month.to_s=='2' %>>02</option>
|
66
|
-
<option value="3" <%= 'selected' if payment_method.expiry_month.to_s=='3' %>>03</option>
|
67
|
-
<option value="4" <%= 'selected' if payment_method.expiry_month.to_s=='4' %>>04</option>
|
68
|
-
<option value="5" <%= 'selected' if payment_method.expiry_month.to_s=='5' %>>05</option>
|
69
|
-
<option value="6" <%= 'selected' if payment_method.expiry_month.to_s=='6' %>>06</option>
|
70
|
-
<option value="7" <%= 'selected' if payment_method.expiry_month.to_s=='7' %>>07</option>
|
71
|
-
<option value="8" <%= 'selected' if payment_method.expiry_month.to_s=='8' %>>08</option>
|
72
|
-
<option value="9" <%= 'selected' if payment_method.expiry_month.to_s=='9' %>>09</option>
|
73
|
-
<option value="10" <%= 'selected' if payment_method.expiry_month.to_s=='10' %>>10</option>
|
74
|
-
<option value="11" <%= 'selected' if payment_method.expiry_month.to_s=='11' %>>11</option>
|
75
|
-
<option value="12" <%= 'selected' if payment_method.expiry_month.to_s=='12' %>>12</option>
|
76
|
-
</select>
|
77
|
-
<select id="credit_card_expiry_year" name="credit_card[expiry_year]">
|
78
|
-
<option value="2011" <%= 'selected' if payment_method.expiry_year.to_s=='2011' %>>2011</option>
|
79
|
-
<option value="2012" <%= 'selected' if payment_method.expiry_year.to_s=='2012' %>>2012</option>
|
80
|
-
<option value="2013" <%= 'selected' if payment_method.expiry_year.to_s=='2013' %>>2013</option>
|
81
|
-
<option value="2014" <%= 'selected' if payment_method.expiry_year.to_s=='2014' %>>2014</option>
|
82
|
-
<option value="2015" <%= 'selected' if payment_method.expiry_year.to_s=='2015' %>>2015</option>
|
83
|
-
<option value="2016" <%= 'selected' if payment_method.expiry_year.to_s=='2016' %>>2016</option>
|
84
|
-
</select>
|
85
|
-
</div>
|
86
|
-
|
87
91
|
</fieldset>
|
88
92
|
|
89
|
-
<button type='submit' class='button blue'>Submit Payment</button>
|
93
|
+
<p><button type='submit' class='button blue'>Submit Payment</button></p>
|
90
94
|
</form>
|
@@ -1,28 +1,29 @@
|
|
1
1
|
<% transaction ||= @transaction %>
|
2
|
-
|
3
|
-
<h4>Reference ID: <%= transaction.reference_id %></h4>
|
2
|
+
<% if transaction %><h3><%= transaction.has_errors? ? 'Failed' : 'Successful' %> <%= transaction.transaction_type.titleize %></h3><% end %>
|
4
3
|
|
5
|
-
<%= render
|
4
|
+
<%= @errors || render(Samurai::Rails::Views.errors) %>
|
6
5
|
|
7
|
-
|
8
|
-
<
|
9
|
-
|
10
|
-
|
6
|
+
<% if transaction %>
|
7
|
+
<p>
|
8
|
+
<strong>Amount:</strong>
|
9
|
+
<%= transaction.amount %> (<%= transaction.currency_code %>)
|
10
|
+
</p>
|
11
11
|
|
12
|
-
<p>
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
</p>
|
12
|
+
<p>
|
13
|
+
<strong>Credit Card:</strong>
|
14
|
+
<em>XXXX XXXX XXXX</em> <%= transaction.payment_method.last_four_digits %>
|
15
|
+
(<%= "%02d" % transaction.payment_method.expiry_month %> / <%= "%04d" % transaction.payment_method.expiry_year %>)
|
16
|
+
</p>
|
17
17
|
|
18
|
-
<p><strong>Date / Time:</strong> <%= transaction.created_at %></p>
|
19
|
-
<p>
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
</p>
|
18
|
+
<p><strong>Date / Time:</strong> <%= transaction.created_at %></p>
|
19
|
+
<p>
|
20
|
+
<strong>Descriptor:</strong> <%= transaction.descriptor %><br>
|
21
|
+
<strong>Billing Reference:</strong> <%= transaction.billing_reference %><br>
|
22
|
+
<strong>Customer Reference: </strong> <%= transaction.customer_reference %><br>
|
23
|
+
<strong>Custom Data: </strong> <%= transaction.custom %><br>
|
24
|
+
</p>
|
25
25
|
|
26
|
-
<p>
|
27
|
-
|
28
|
-
</p>
|
26
|
+
<p>
|
27
|
+
<strong>AVS Response:</strong> <%= transaction.processor_response.try(:avs_result_code) || 'None' %>
|
28
|
+
</p>
|
29
|
+
<% end %>
|
data/lib/samurai/processor.rb
CHANGED
@@ -47,10 +47,20 @@ class Samurai::Processor < Samurai::Base
|
|
47
47
|
|
48
48
|
def execute(action, options = {})
|
49
49
|
transaction = Samurai::Transaction.transaction_payload(options)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
begin
|
51
|
+
# send a purchase request
|
52
|
+
resp = post(action, {}, transaction)
|
53
|
+
# return the response, wrapped in a Samurai::Transaction
|
54
|
+
Samurai::Transaction.new.load_attributes_from_response(resp)
|
55
|
+
rescue ActiveResource::BadRequest=>e
|
56
|
+
# initialize a fresh transaction with the give options, add a generic error to it, and return it
|
57
|
+
Samurai::Transaction.new(options.merge(:transaction_type=>action.to_s)).tap do |transaction|
|
58
|
+
transaction.payment_method = Samurai::PaymentMethod.find options[:payment_method_token]
|
59
|
+
transaction.created_at = Time.now
|
60
|
+
transaction.processor_response = nil
|
61
|
+
transaction.errors[:base] << "Invalid request."
|
62
|
+
end
|
63
|
+
end
|
54
64
|
end
|
55
65
|
|
56
66
|
end
|
data/lib/samurai/rails/views.rb
CHANGED
data/lib/samurai/transaction.rb
CHANGED
@@ -45,9 +45,18 @@ class Samurai::Transaction < Samurai::Base
|
|
45
45
|
private
|
46
46
|
|
47
47
|
def execute(action, options = {})
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
begin
|
49
|
+
resp = post(action, {}, self.class.transaction_payload(options))
|
50
|
+
# return the response, wrapped in a Samurai::Transaction
|
51
|
+
Samurai::Transaction.new.load_attributes_from_response(resp)
|
52
|
+
rescue ActiveResource::BadRequest=>e
|
53
|
+
# initialize a fresh transaction with the give options, add a generic error to it, and return it
|
54
|
+
Samurai::Transaction.new(options.merge(:transaction_type=>action.to_s)).tap do |transaction|
|
55
|
+
transaction.created_at = Time.now
|
56
|
+
transaction.processor_response = nil
|
57
|
+
transaction.errors[:base] << "Invalid request."
|
58
|
+
end
|
59
|
+
end
|
51
60
|
end
|
52
61
|
|
53
62
|
def process_response_errors
|
@@ -87,19 +96,4 @@ class Samurai::Transaction < Samurai::Base
|
|
87
96
|
super(EMPTY_ATTRIBUTES.merge(attrs))
|
88
97
|
end
|
89
98
|
|
90
|
-
|
91
|
-
require 'pathname'
|
92
|
-
def self.form_html
|
93
|
-
File.read(form_partial_path)
|
94
|
-
end
|
95
|
-
def self.form_partial_path
|
96
|
-
Pathname.new(__FILE__).dirname.join('..', '..', 'app', 'views', 'application', '_transaction_form.html.erb')
|
97
|
-
end
|
98
|
-
def self.show_html
|
99
|
-
File.read(show_partial_path)
|
100
|
-
end
|
101
|
-
def self.show_partial_path
|
102
|
-
Pathname.new(__FILE__).dirname.join('..', '..', 'app', 'views', 'application', '_transaction.html.erb')
|
103
|
-
end
|
104
|
-
|
105
99
|
end
|
data/lib/samurai/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: samurai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-09-01 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activeresource
|
17
|
-
requirement: &
|
17
|
+
requirement: &70208845185200 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 2.2.2
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70208845185200
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: bundler
|
28
|
-
requirement: &
|
28
|
+
requirement: &70208845184740 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 1.0.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70208845184740
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rspec
|
39
|
-
requirement: &
|
39
|
+
requirement: &70208845184280 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 2.6.0
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70208845184280
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: fakeweb
|
50
|
-
requirement: &
|
50
|
+
requirement: &70208845183900 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70208845183900
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: ruby-debug19
|
61
|
-
requirement: &
|
61
|
+
requirement: &70208845183400 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70208845183400
|
70
70
|
description: If you are an online merchant and using samurai.feefighters.com, this
|
71
71
|
gem will make your life easy. Integrate with the samurai.feefighters.com portal
|
72
72
|
and process transaction.
|