paytrace 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6f22e1455f84e910000a9d9a751021ac5e473287
4
- data.tar.gz: 01202f564b24a3ba0f6188771af8170dedcba65c
3
+ metadata.gz: ae74bece9567072735235bb13c243480933eb2ad
4
+ data.tar.gz: f9a82b0cb1cecd8357cef85dc7b103de8dc52f2d
5
5
  SHA512:
6
- metadata.gz: 66c923651c3dd5388ee6d692765b75c5e0f03b2e61f293ea39a35a00ffd5a897f0f0a4563a0a830c52fe6f8893f6d7da7a5d5e3f2fa267e42fa5e1df95b19dd5
7
- data.tar.gz: ff35841365e29a55fe7c987e62a0ea1d8c1359598ebfb1e49c720aea0b0f0d714a18c70b2517b152b2088c11d85725debd8decd455f423d30122ecc0ed0cef96
6
+ metadata.gz: 4093411b2ecb7a0166affcab5ddbc0296de3d594695dabe4f6ca1a9a428ff5fe7bacd473657bd6b1624fe99c08aeac53f4afa38c9eeac1c2902df6a0b9a9df80
7
+ data.tar.gz: e163f38094a6034abc1739b6e12d841d7cca74c1a242bad7616831a976345252fc9a045f27085507a859e509045828154f4f2e3ce5ba079b9c34c36af5d5f7c0
@@ -0,0 +1,28 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard :minitest do
5
+ # with Minitest::Unit
6
+ watch(%r{^test/(.*)\/?test_(.*)\.rb$})
7
+ watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
8
+ watch(%r{^test/test_helper\.rb$}) { 'test' }
9
+
10
+ # with Minitest::Spec
11
+ watch(%r{^test/(.*)_spec\.rb$})
12
+ watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_spec.rb" }
13
+ watch(%r{^test/test_helper\.rb$}) { 'test' }
14
+
15
+ # Rails 4
16
+ # watch(%r{^app/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
17
+ # watch(%r{^app/controllers/application_controller\.rb$}) { 'test/controllers' }
18
+ # watch(%r{^app/controllers/(.+)_controller\.rb$}) { |m| "test/integration/#{m[1]}_test.rb" }
19
+ # watch(%r{^app/views/(.+)_mailer/.+}) { |m| "test/mailers/#{m[1]}_mailer_test.rb" }
20
+ # watch(%r{^lib/(.+)\.rb$}) { |m| "test/lib/#{m[1]}_test.rb" }
21
+ # watch(%r{^test/.+_test\.rb$})
22
+ # watch(%r{^test/test_helper\.rb$}) { 'test' }
23
+
24
+ # Rails < 4
25
+ # watch(%r{^app/controllers/(.*)\.rb$}) { |m| "test/functional/#{m[1]}_test.rb" }
26
+ # watch(%r{^app/helpers/(.*)\.rb$}) { |m| "test/helpers/#{m[1]}_test.rb" }
27
+ # watch(%r{^app/models/(.*)\.rb$}) { |m| "test/unit/#{m[1]}_test.rb" }
28
+ end
data/README.md CHANGED
@@ -77,7 +77,7 @@ end
77
77
 
78
78
  ```ruby
79
79
  # running a transaction for a customer
80
- transaction = Transaction.sale({amount: "1.00",customer_id: "my_customer_id"})
80
+ transaction = Transaction.sale({amount: "1.00",customer: my_customer_id})
81
81
 
82
82
  ```
83
83
  ### Some Optional Fields
@@ -8,6 +8,8 @@ require 'paytrace/api/fields'
8
8
  require 'paytrace/api/gateway'
9
9
  require 'paytrace/api/request'
10
10
  require 'paytrace/api/response'
11
+ require 'paytrace/exceptions'
12
+ require 'paytrace/recurring_transaction'
11
13
 
12
14
  module PayTrace
13
15
  end
@@ -1,6 +1,6 @@
1
1
  module PayTrace
2
2
  class Address
3
- attr :name, :street,:street2,:city,:state, :country,:region,:postal_code
3
+ attr_accessor :name, :street,:street2,:city,:state, :country,:region,:postal_code,:address_type
4
4
 
5
5
  def initialize(options={})
6
6
  @name = options[:name]
@@ -8,9 +8,23 @@ module PayTrace
8
8
  @street2 = options[:street2]
9
9
  @city = options[:city]
10
10
  @state = options[:state]
11
- @region = options[:region]
12
11
  @country = options[:country]
13
12
  @postal_code = options[:postal_code ]
13
+ @address_type = options[:address_type] || :billing
14
+ @region = options[:region] if @address_type == :shipping # special case for shipping addresses
15
+ end
16
+
17
+ def set_request(request)
18
+ atype_str = address_type.to_s
19
+
20
+ request.set_param(:"#{atype_str}_name", name) if name
21
+ request.set_param(:"#{atype_str}_address", street) if street
22
+ request.set_param(:"#{atype_str}_address2", street2) if street2
23
+ request.set_param(:"#{atype_str}_city", city) if city
24
+ request.set_param(:"#{atype_str}_region", region) if region
25
+ request.set_param(:"#{atype_str}_state", state) if state
26
+ request.set_param(:"#{atype_str}_postal_code", postal_code) if postal_code
27
+ request.set_param(:"#{atype_str}_country", country) if country
14
28
  end
15
29
  end
16
30
  end
@@ -43,14 +43,27 @@ module PayTrace
43
43
  shipping_country: "SCOUNTRY",
44
44
  #customer
45
45
  customer_id: "CUSTID",
46
+ new_customer_id: "NEWCUSTID",
46
47
  customer_reference_id:"CUSTREF",
48
+ customer_password:"CUSTPSWD",
49
+ customer_fax:"FAX",
50
+ customer_phone:"PHONE",
47
51
  approval_code:"APPROVAL",
48
52
  #cash advance
49
53
  cash_advance:"CASHADVANCE",
50
54
  id_number:"PHOTOID",
51
55
  id_expiration:"IDEXP",
52
- cc_last_4:"LAST4"
53
-
56
+ cc_last_4:"LAST4",
57
+ #bank accounts
58
+ account_number:"DDA",
59
+ routing_number:"TR",
60
+ #recurring transactions
61
+ recur_id: "RECURID",
62
+ recur_frequency: "FREQUENCY",
63
+ recur_start: "START",
64
+ recur_count: "TOTALCOUNT",
65
+ recur_receipt: "CUSTRECEIPT",
66
+ recur_type: "RECURTYPE"
54
67
  }
55
68
  end
56
69
  end
@@ -1,19 +1,59 @@
1
1
  require 'faraday'
2
2
  require 'paytrace/api/response'
3
+ require 'paytrace/exceptions'
3
4
 
4
5
  module PayTrace
5
6
  module API
6
7
  class Gateway
7
8
  attr_accessor :connection
9
+ @@debug = false
10
+ @@last_request = nil
11
+ @@last_response = nil
12
+ @@next_response = nil
13
+ @@raise_exceptions = true
8
14
 
9
15
  def initialize(connection: nil)
10
- @connection = connection
11
- @connection ||= PayTrace.configuration.connection
16
+ @connection = connection || PayTrace.configuration.connection
17
+ end
18
+
19
+ def self.debug=(enable)
20
+ @@debug = enable
21
+ end
22
+
23
+ def self.last_request
24
+ @@last_request
25
+ end
26
+
27
+ def self.last_response
28
+ @@last_response
29
+ end
30
+
31
+ def self.next_response=(next_response)
32
+ @@next_response = next_response
33
+ end
34
+
35
+ def self.raise_exceptions=(raise_exceptions)
36
+ @@raise_exceptions = raise_exceptions
12
37
  end
13
38
 
14
39
  def send_request(request)
15
- res = @connection.post PayTrace.configuration.url, parmlist: request.to_parms_string
16
- PayTrace::API::Response.new(res.body)
40
+ @@last_request = request.to_parms_string if @@debug
41
+ unless (@@debug && @@next_response)
42
+ res = @connection.post PayTrace.configuration.url, parmlist: request.to_parms_string
43
+ raw_response = res.body
44
+ else
45
+ raw_response = @@next_response
46
+ end
47
+
48
+ @@last_response = raw_response
49
+ response = PayTrace::API::Response.new(raw_response)
50
+ @@next_response = nil # just to be sure
51
+
52
+ if @@raise_exceptions && response.has_errors?
53
+ raise PayTrace::Exceptions::ErrorResponse.new(response.get_response())
54
+ else
55
+ response
56
+ end
17
57
  end
18
58
  end
19
59
  end
@@ -18,14 +18,15 @@ module PayTrace
18
18
 
19
19
  def to_parms_string()
20
20
  @params.map do |k,v|
21
- "#{PayTrace::API.fields.fetch(k)}#{@value_delim}#{v}"
21
+ "#{PayTrace::API.fields[k]}#{@value_delim}#{v}"
22
22
  end.join(@field_delim) << "|"
23
23
  end
24
24
 
25
25
  def set_param(k, v)
26
- @params[k] = v
27
- end
26
+ raise PayTrace::Exceptions::ValidationError.new("Unknown field '#{k}'") unless PayTrace::API.fields.has_key?(k)
28
27
 
28
+ @params[k] = v unless v.nil?
29
+ end
29
30
  end
30
31
  end
31
32
  end
@@ -1,10 +1,80 @@
1
1
  module PayTrace
2
2
  class Customer
3
- attr_accessor :customer_id
3
+ attr :id, :customer_id
4
4
 
5
- def initialize(customer_id: nil)
5
+ CREATE_CUSTOMER = "CreateCustomer"
6
+ UPDATE_CUSTOMER = "UpdateCustomer"
7
+ DELETE_CUSTOMER = "DeleteCustomer"
8
+
9
+ def initialize(customer_id = nil)
6
10
  @customer_id = customer_id
7
11
  end
12
+
13
+ def update(params = {})
14
+ set_request_data(UPDATE_CUSTOMER, params)
15
+ end
16
+
17
+ def delete
18
+ request = PayTrace::API::Request.new
19
+ request.set_param(:method, DELETE_CUSTOMER)
20
+ request.set_param(:customer_id, @customer_id)
21
+ gateway = PayTrace::API::Gateway.new
22
+ gateway.send_request(request)
23
+ end
24
+
25
+ def self.delete(customer_id)
26
+ Customer.new(customer_id).delete
27
+ end
28
+
29
+ def self.from_cc_info(params = {})
30
+ customer = Customer.new(params[:customer_id])
31
+ customer.set_request_data(CREATE_CUSTOMER, params)
32
+ end
33
+
34
+ def self.from_transaction_id(params = {})
35
+ customer = Customer.new(params[:customer_id])
36
+ customer.set_request_data(CREATE_CUSTOMER, params)
37
+ end
38
+
39
+ def set_request_data(method, params)
40
+ request = PayTrace::API::Request.new
41
+ request.set_param(:method, method)
42
+ request.set_param(:customer_id, params[:customer_id])
43
+ request.set_param(:new_customer_id, params[:new_customer_id])
44
+ request.set_param(:transaction_id, params[:transaction_id])
45
+
46
+ if params[:billing_address]
47
+ params[:billing_address].name = nil if (method == CREATE_CUSTOMER && params[:transaction_id])
48
+ params[:billing_address].set_request(request)
49
+ end
50
+ params[:shipping_address].set_request(request) if params[:shipping_address]
51
+
52
+
53
+ if params[:credit_card]
54
+ request.set_param(:card_number, params[:credit_card].card_number)
55
+ request.set_param(:expiration_month, params[:credit_card].expiration_month)
56
+ request.set_param(:expiration_year, params[:credit_card].expiration_year)
57
+ end
58
+
59
+ request.set_param(:email, params[:email])
60
+ request.set_param(:customer_phone, params[:phone])
61
+ request.set_param(:customer_fax, params[:fax])
62
+ request.set_param(:customer_password, params[:customer_password])
63
+ request.set_param(:account_number, params[:account_number])
64
+ request.set_param(:routing_number, params[:routing_number])
65
+ request.set_param(:discretionary_data, params[:discretionary_data])
66
+
67
+ gateway = PayTrace::API::Gateway.new
68
+ response = gateway.send_request(request)
69
+ unless response.has_errors?
70
+ values = response.values
71
+ @id = values["CUSTID"]
72
+ @customer_id = values["CUSTOMERID"]
73
+ self
74
+ else
75
+ nil
76
+ end
77
+ end
8
78
  end
9
79
  end
10
80
 
@@ -0,0 +1,12 @@
1
+ module PayTrace
2
+ module Exceptions
3
+ class Base < RuntimeError
4
+ end
5
+
6
+ class ValidationError < Base
7
+ end
8
+
9
+ class ErrorResponse < Base
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,57 @@
1
+ require 'paytrace'
2
+
3
+ module PayTrace
4
+ class RecurringTransaction
5
+ attr :id
6
+ CREATE_METHOD = "CreateRecur"
7
+ DELETE_METHOD = "DeleteRecur"
8
+ UPDATE_METHOD = "UpdateRecur"
9
+
10
+ def self.create(params = {})
11
+ set_request_data(CREATE_METHOD, params)
12
+ end
13
+
14
+ def self.delete(params = {})
15
+ request = PayTrace::API::Request.new
16
+ request.set_param(:method, DELETE_METHOD)
17
+ if params[:recur_id]
18
+ request.set_param(:recur_id, params[:recur_id])
19
+ else
20
+ request.set_param(:customer_id, params[:customer_id])
21
+ end
22
+
23
+ gateway = PayTrace::API::Gateway.new
24
+ parse_response(gateway.send_request(request))
25
+ end
26
+
27
+ def self.update(params = {})
28
+ set_request_data(UPDATE_METHOD, params)
29
+ end
30
+
31
+ def self.parse_response(response)
32
+ unless response.has_errors?
33
+ values = response.values
34
+ values["RECURID"]
35
+ end
36
+ end
37
+
38
+ def self.set_request_data(method, params)
39
+ request = PayTrace::API::Request.new
40
+ request.set_param(:method, method)
41
+
42
+ request.set_param(:recur_id, params[:recur_id])
43
+ request.set_param(:customer_id, params[:customer_id])
44
+ request.set_param(:recur_frequency, params[:recur_frequency])
45
+ request.set_param(:recur_start, params[:recur_start])
46
+ request.set_param(:recur_count, params[:recur_count])
47
+ request.set_param(:amount, params[:amount])
48
+ request.set_param(:transaction_type, params[:transaction_type])
49
+ request.set_param(:description, params[:description])
50
+ request.set_param(:recur_receipt, params[:recur_receipt])
51
+ request.set_param(:recur_type, params[:recur_type])
52
+
53
+ gateway = PayTrace::API::Gateway.new
54
+ parse_response(gateway.send_request(request))
55
+ end
56
+ end
57
+ end
@@ -52,7 +52,7 @@ module PayTrace
52
52
  def create_transaction(args,type)
53
53
  amount = args.delete(:amount) if args[:amount]
54
54
  cc = CreditCard.new(args.delete(:credit_card)) if args[:credit_card]
55
- customer = Customer.new(customer_id: args.delete(:customer_id)) if args[:customer_id]
55
+ customer = args.delete(:customer) if args[:customer]
56
56
 
57
57
  t = Transaction.new(amount: amount,
58
58
  credit_card: cc,
@@ -101,18 +101,22 @@ module PayTrace
101
101
  end
102
102
 
103
103
  def set_request(request)
104
- add_transaction(request)
104
+ add_credit_card(request, credit_card) if credit_card
105
+ if customer.is_a?(PayTrace::Customer)
106
+ request.set_param(:customer_id, customer.id)
107
+ elsif customer.is_a?(Fixnum)
108
+ request.set_param(:customer_id, customer)
109
+ end
110
+ add_transaction_info(request)
111
+ add_addresses(request)
112
+ add_optional_fields(request) if optional_fields
105
113
  end
106
114
 
107
115
  private
108
- def add_transaction(request)
109
- add_credit_card(request, credit_card) if credit_card
110
- add_customer(request, customer) if customer
116
+ def add_transaction_info(request)
111
117
  request.set_param(:transaction_type, type)
112
118
  request.set_param(:method, TRANSACTION_METHOD)
113
119
  request.set_param(:amount, amount)
114
- load_address(request)
115
- load_misc_fields(request) if optional_fields
116
120
  end
117
121
 
118
122
  def add_credit_card(request, cc)
@@ -123,59 +127,33 @@ module PayTrace
123
127
  request.set_param(:csc, cc.csc) if cc.csc
124
128
  end
125
129
 
126
-
127
- def load_misc_fields(request)
128
- o = optional_fields
129
- o.each do |k,v|
130
- request.set_param(k, v)
131
- end
132
-
133
-
134
- end
135
-
136
- def load_address(request)
137
- add_shipping_address(request, shipping_address) if shipping_address
138
- add_billing_address(request, billing_address) if billing_address
130
+ def add_optional_fields(request)
131
+ o = optional_fields
132
+ o.each do |k,v|
133
+ request.set_param(k, v)
139
134
  end
140
135
 
141
- def add_customer(request, c)
142
- request.set_param(:customer_id, c.customer_id)
143
- end
144
136
 
145
- def add_shipping_address(request, s)
146
- add_address(request, "shipping",s)
147
- end
148
-
149
- def add_billing_address(request, b)
150
- add_address(request, "billing",b)
151
- end
152
-
153
- def add_address(request, address_type, address)
154
- request.set_param(:"#{address_type}_name", address.name) if address.name
155
- request.set_param(:"#{address_type}_address", address.street) if address.street
156
- request.set_param(:"#{address_type}_address2", address.street2) if address.street2
157
- request.set_param(:"#{address_type}_city", address.city) if address.city
158
- request.set_param(:"#{address_type}_region", address.region) if address.region
159
- request.set_param(:"#{address_type}_state", address.state) if address.state
160
- request.set_param(:"#{address_type}_postal_code", address.postal_code) if address.postal_code
161
- request.set_param(:"#{address_type}_country", address.country) if address.country
162
- end
137
+ end
163
138
 
139
+ def add_addresses(request)
140
+ shipping_address.set_request(request) if shipping_address
141
+ billing_address.set_request(request) if billing_address
142
+ end
164
143
 
165
144
  def include_optional(args)
166
145
  s = nil
167
146
  b = nil
168
147
 
169
148
  b = args.delete(:billing_address) if args[:billing_address]
170
- @billing_address = PayTrace::Address.new(b) if b
149
+ @billing_address = PayTrace::Address.new({address_type: :billing}.merge(b)) if b
171
150
  s = args.delete(:shipping_address) if args[:shipping_address]
172
- @shipping_address = PayTrace::Address.new(s) if s
151
+ @shipping_address = PayTrace::Address.new({address_type: :shipping}.merge(s)) if s
173
152
  if args[:address_shipping_same_as_billing]
174
153
  self.set_shipping_same_as_billing
175
154
  end
176
155
 
177
156
  @optional_fields = args
178
-
179
157
  end
180
158
 
181
159
 
@@ -1,3 +1,3 @@
1
1
  module PayTrace
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -23,4 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
24
  spec.add_development_dependency "rake", "~> 10.1"
25
25
  spec.add_development_dependency "mocha", "~> 1.0"
26
+ spec.add_development_dependency "guard", '~> 0'
27
+ spec.add_development_dependency "guard-minitest", '~> 0'
26
28
  end
@@ -0,0 +1,65 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '../../test_helper.rb')
2
+
3
+ describe PayTrace::Address do
4
+ it "should accept an address type" do
5
+ a = PayTrace::Address.new({address_type: :shipping})
6
+
7
+ a.address_type.must_equal :shipping
8
+ end
9
+
10
+ it "should default to a billing address" do
11
+ a = PayTrace::Address.new({})
12
+
13
+ a.address_type.must_equal :billing
14
+ end
15
+
16
+ it "should skip blank fields" do
17
+ a = PayTrace::Address.new({foo: :bar, baz: :bat})
18
+
19
+ a.name.must_be_nil
20
+ a.street.must_be_nil
21
+ a.street2.must_be_nil
22
+ a.city.must_be_nil
23
+ a.state.must_be_nil
24
+ a.country.must_be_nil
25
+ a.region.must_be_nil
26
+ a.postal_code.must_be_nil
27
+
28
+ # special case: defaults to :billing
29
+ a.address_type.wont_be_nil
30
+ end
31
+
32
+ it "should not add arbitrary fields" do
33
+ a = PayTrace::Address.new({foo: :bar, baz: :bat})
34
+
35
+ a.must_respond_to(:address_type)
36
+ a.wont_respond_to(:foo)
37
+ a.wont_respond_to(:baz)
38
+ end
39
+
40
+
41
+ it "should set the request fields correctly" do
42
+ r = PayTrace::API::Request.new
43
+ a = PayTrace::Address.new({
44
+ name: "John Doe",
45
+ street: "1234 Main Street",
46
+ street2: "Apt. B",
47
+ city: "Shoreline",
48
+ state: "WA",
49
+ country: "USA",
50
+ region: "region??",
51
+ postal_code: "98133",
52
+ address_type: :shipping
53
+ })
54
+ a.set_request(r)
55
+
56
+ r.params[:shipping_name].must_equal "John Doe"
57
+ r.params[:shipping_address].must_equal "1234 Main Street"
58
+ r.params[:shipping_address2].must_equal "Apt. B"
59
+ r.params[:shipping_city].must_equal "Shoreline"
60
+ r.params[:shipping_state].must_equal "WA"
61
+ r.params[:shipping_country].must_equal "USA"
62
+ r.params[:shipping_region].must_equal "region??"
63
+ r.params[:shipping_postal_code].must_equal "98133"
64
+ end
65
+ end
@@ -2,26 +2,35 @@ require File.expand_path(File.dirname(__FILE__) + '../../../test_helper.rb')
2
2
  require 'paytrace/api/gateway'
3
3
 
4
4
  describe PayTrace::API::Gateway do
5
- it "converts a request into a URL to the api specifying the user name and password from configuration" do
6
- stubs = Faraday::Adapter::Test::Stubs.new do |stub|
7
- stub.post ("https://paytrace.com/api/default.pay") {[ 200, {}, 'foo' ]}
8
- end
5
+ attr :connection, :faraday
6
+
7
+ def set_mock_configuration
8
+ PayTrace.configure do |config|
9
+ stubs = Faraday::Adapter::Test::Stubs.new do |stub|
10
+ stub.post ("https://paytrace.com/api/default.pay") {[ 200, {}, 'foo' ]}
11
+ end
12
+ @faraday = stubs
9
13
 
10
- test = Faraday.new do |builder|
11
- builder.adapter :test , stubs
14
+ test = Faraday.new do |builder|
15
+ builder.adapter :test , stubs
16
+ end
17
+ config.connection = test
18
+ @connection = test
12
19
  end
20
+ end
21
+
22
+ before do
23
+ set_mock_configuration()
24
+ end
13
25
 
26
+ it "converts a request into a URL to the api specifying the user name and password from configuration" do
14
27
  request = mock()
15
28
  request.stubs(:to_parms_string).returns("foo")
16
29
 
17
- response = mock()
18
- PayTrace::API::Response.stubs(:new).returns(response)
19
-
20
- gateway = PayTrace::API::Gateway.new(connection: test)
30
+ gateway = PayTrace::API::Gateway.new(connection: connection)
21
31
  r = gateway.send_request request
22
32
 
23
- stubs.verify_stubbed_calls
24
- r.must_equal response
33
+ faraday.verify_stubbed_calls
25
34
  end
26
35
 
27
36
  it "initializes the connection based on the configuration" do
@@ -33,4 +42,69 @@ describe PayTrace::API::Gateway do
33
42
  gateway.connection.must_equal faraday_connection
34
43
  end
35
44
 
45
+ describe "debug mode" do
46
+ it "sends a mock response if directed to" do
47
+ PayTrace::API::Gateway.debug = true
48
+
49
+ request = PayTrace::API::Request.new
50
+ gateway = PayTrace::API::Gateway.new
51
+ canned_response = "foobar"
52
+ PayTrace::API::Gateway.next_response = canned_response
53
+
54
+ gateway.send_request(request)
55
+ PayTrace::API::Gateway.last_response.must_equal(canned_response)
56
+ end
57
+
58
+ it "doesn't send the same response twice" do
59
+ PayTrace::API::Gateway.debug = true
60
+
61
+ request = PayTrace::API::Request.new
62
+ gateway = PayTrace::API::Gateway.new
63
+ canned_response = "foobar"
64
+ PayTrace::API::Gateway.next_response = canned_response
65
+
66
+ gateway.send_request(request)
67
+ PayTrace::API::Gateway.last_response.must_equal(canned_response)
68
+ gateway.send_request(request)
69
+ PayTrace::API::Gateway.last_response.wont_equal(canned_response)
70
+ faraday.verify_stubbed_calls
71
+ end
72
+
73
+ it "does not send a mock response unless in debug mode" do
74
+ PayTrace::API::Gateway.debug = false
75
+
76
+ request = PayTrace::API::Request.new
77
+ gateway = PayTrace::API::Gateway.new
78
+ canned_response = "foobar"
79
+ PayTrace::API::Gateway.next_response = canned_response
80
+
81
+ gateway.send_request(request)
82
+ PayTrace::API::Gateway.last_response.wont_equal(canned_response)
83
+ faraday.verify_stubbed_calls
84
+ end
85
+
86
+ it "raises an ErrorResponse exception for errors" do
87
+ PayTrace::API::Gateway.debug = true # to enable mock response
88
+ PayTrace::API::Gateway.raise_exceptions = true
89
+
90
+ response = "ERROR~35. Please provide a valid Credit Card Number.|ERROR~43. Please provide a valid Expiration Month.|"
91
+ PayTrace::API::Gateway.next_response = response
92
+
93
+ request = PayTrace::API::Request.new
94
+ gateway = PayTrace::API::Gateway.new
95
+ -> { gateway.send_request(request) }.must_raise PayTrace::Exceptions::ErrorResponse
96
+ end
97
+
98
+ it "does not raise an ErrorResponse if raise_exceptions is false" do
99
+ PayTrace::API::Gateway.debug = true # to enable mock response
100
+ PayTrace::API::Gateway.raise_exceptions = false
101
+
102
+ response = "ERROR~35. Please provide a valid Credit Card Number.|ERROR~43. Please provide a valid Expiration Month.|"
103
+ PayTrace::API::Gateway.next_response = response
104
+
105
+ request = PayTrace::API::Request.new
106
+ gateway = PayTrace::API::Gateway.new
107
+ gateway.send_request(request) # if it raises an exception, the test fails; there's no "wont_raise" in minitest
108
+ end
109
+ end
36
110
  end
@@ -26,7 +26,13 @@ describe PayTrace::API::Request do
26
26
 
27
27
  it "can manually set params" do
28
28
  r = PayTrace::API::Request.new
29
- r.set_param(:foo, "bar")
30
- r.params[:foo].must_equal "bar"
29
+ r.set_param(:billing_name, "Fred Jones")
30
+ r.params[:billing_name].must_equal "Fred Jones"
31
+ end
32
+
33
+ it "raises a validation exception for unknown fields" do
34
+ r = PayTrace::API::Request.new
35
+
36
+ -> { r.set_param(:foo, "bar") }.must_raise PayTrace::Exceptions::ValidationError
31
37
  end
32
38
  end
@@ -0,0 +1,186 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '../../test_helper.rb')
2
+
3
+ describe PayTrace::Customer do
4
+ def base_url
5
+ "UN~#{PayTrace.configuration.user_name}|PSWD~#{PayTrace.configuration.password}|TERMS~Y|"
6
+ end
7
+
8
+ before do
9
+ PayTrace::API::Gateway.debug = true
10
+ PayTrace::API::Gateway.next_response = "RESPONSE~ok|CUSTOMERID~12345|CUSTID~john_doe"
11
+ end
12
+
13
+ describe "create customer profile" do
14
+ # first call path: create from credit card information
15
+ it "can be created from credit card information" do
16
+ credit_card = PayTrace::CreditCard.new({card_number: "1234123412341234", expiration_month: 12, expiration_year: 2014})
17
+ billing_addr = PayTrace::Address.new({name: "Foo Bar", address_type: :billing})
18
+
19
+ PayTrace::Customer.from_cc_info({customer_id: "foo_bar", credit_card: credit_card, billing_address: billing_addr})
20
+ PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~CreateCustomer|CUSTID~foo_bar|BNAME~Foo Bar|CC~1234123412341234|EXPMNTH~12|EXPYR~2014|"
21
+ end
22
+
23
+ # second call path: create from a transaction ID
24
+ it "can be created from a transaction ID" do
25
+ PayTrace::Customer.from_transaction_id({customer_id: "foo_bar", transaction_id: 12345678})
26
+ PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~CreateCustomer|CUSTID~foo_bar|TRANXID~12345678|"
27
+ end
28
+
29
+ # all billing address fields are accepted
30
+ it "accepts full billing address information" do
31
+ credit_card = PayTrace::CreditCard.new({card_number: "1234123412341234", expiration_month: 12, expiration_year: 2014})
32
+ billing_addr = PayTrace::Address.new({
33
+ name: "Foo Bar",
34
+ street: "1234 Main Street",
35
+ street2: "Apartment 1B",
36
+ city: "Shoreline",
37
+ state: "WA",
38
+ country: "USA",
39
+ postal_code: 98133,
40
+ address_type: :billing
41
+ })
42
+
43
+ PayTrace::Customer.from_cc_info({customer_id: "foo_bar", credit_card: credit_card, billing_address: billing_addr})
44
+ PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~CreateCustomer|CUSTID~foo_bar|BNAME~Foo Bar|BADDRESS~1234 Main Street|" +
45
+ "BADDRESS2~Apartment 1B|BCITY~Shoreline|BSTATE~WA|BZIP~98133|BCOUNTRY~USA|" +
46
+ "CC~1234123412341234|EXPMNTH~12|EXPYR~2014|"
47
+ end
48
+
49
+ # you can include a shipping address, too
50
+ it "accepts a shipping address" do
51
+ shipping_addr = PayTrace::Address.new({
52
+ name: "Foo Bar",
53
+ street: "1234 Main Street",
54
+ street2: "Apartment 1B",
55
+ city: "Shoreline",
56
+ state: "WA",
57
+ region: "Snohomish",
58
+ country: "USA",
59
+ postal_code: 98133,
60
+ address_type: :shipping
61
+ })
62
+
63
+ PayTrace::Customer.from_transaction_id({customer_id: "foo_bar", transaction_id: 12345678, shipping_address: shipping_addr})
64
+ PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~CreateCustomer|CUSTID~foo_bar|TRANXID~12345678|SNAME~Foo Bar|SADDRESS~1234 Main Street|" +
65
+ "SADDRESS2~Apartment 1B|SCITY~Shoreline|SCOUNTY~Snohomish|SSTATE~WA|SZIP~98133|SCOUNTRY~USA|"
66
+ end
67
+
68
+ # special case: when creating from transaction ID, the billing name is ignored (no clue why, but it's in the API)
69
+ it "ignores the billing address name if using a transaction id" do
70
+ billing_addr = PayTrace::Address.new({
71
+ name: "Foo Bar",
72
+ street: "1234 Main Street",
73
+ street2: "Apartment 1B",
74
+ city: "Shoreline",
75
+ state: "WA",
76
+ region: "region",
77
+ country: "USA",
78
+ postal_code: 98133,
79
+ address_type: :billing
80
+ })
81
+
82
+ PayTrace::Customer.from_transaction_id({customer_id: "foo_bar", transaction_id: 12345678, billing_address: billing_addr})
83
+ PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~CreateCustomer|CUSTID~foo_bar|TRANXID~12345678|BADDRESS~1234 Main Street|" +
84
+ "BADDRESS2~Apartment 1B|BCITY~Shoreline|BSTATE~WA|BZIP~98133|BCOUNTRY~USA|"
85
+ end
86
+
87
+ # there are additional fields (email, phone, discretionary data, etc.) that can be sent
88
+ it "accepts extra customer information" do
89
+ params = {
90
+ customer_id: "foo_bar",
91
+ transaction_id: 12345678,
92
+ email: "support@paytrace.com",
93
+ phone: "123-555-1212",
94
+ fax: "456-555-1212",
95
+ customer_password: "none_shall_pass",
96
+ account_number: 123456789,
97
+ routing_number: 12345678,
98
+ discretionary_data: "discretionary_data"
99
+ }
100
+
101
+ PayTrace::Customer.from_transaction_id(params)
102
+ PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~CreateCustomer|CUSTID~foo_bar|TRANXID~12345678|EMAIL~support@paytrace.com|" +
103
+ "PHONE~123-555-1212|FAX~456-555-1212|CUSTPSWD~none_shall_pass|DDA~123456789|TR~12345678|" +
104
+ "DISCRETIONARY DATA~discretionary_data|"
105
+ end
106
+ end
107
+
108
+ describe "update customer profile" do
109
+ it "accepts a billing address" do
110
+ billing_addr = PayTrace::Address.new({
111
+ name: "Foo Bar",
112
+ street: "1234 Main Street",
113
+ street2: "Apartment 1B",
114
+ city: "Shoreline",
115
+ state: "WA",
116
+ region: "region",
117
+ country: "USA",
118
+ postal_code: 98133,
119
+ address_type: :billing
120
+ })
121
+
122
+ c = PayTrace::Customer.new
123
+ c.update({new_customer_id: "joanie_doe", billing_address: billing_addr})
124
+
125
+ PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~UpdateCustomer|NEWCUSTID~joanie_doe|" +
126
+ "BNAME~Foo Bar|BADDRESS~1234 Main Street|" +
127
+ "BADDRESS2~Apartment 1B|BCITY~Shoreline|BSTATE~WA|BZIP~98133|BCOUNTRY~USA|"
128
+ end
129
+
130
+ it "accepts a shipping address" do
131
+ shipping_addr = PayTrace::Address.new({
132
+ name: "Foo Bar",
133
+ street: "1234 Main Street",
134
+ street2: "Apartment 1B",
135
+ city: "Shoreline",
136
+ state: "WA",
137
+ region: "Snohomish",
138
+ country: "USA",
139
+ postal_code: 98133,
140
+ address_type: :shipping
141
+ })
142
+
143
+ c = PayTrace::Customer.new
144
+ c.update({new_customer_id: "joanie_doe", shipping_address: shipping_addr})
145
+
146
+ PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~UpdateCustomer|NEWCUSTID~joanie_doe|" +
147
+ "SNAME~Foo Bar|SADDRESS~1234 Main Street|SADDRESS2~Apartment 1B|SCITY~Shoreline|SCOUNTY~Snohomish|" +
148
+ "SSTATE~WA|SZIP~98133|SCOUNTRY~USA|"
149
+ end
150
+
151
+ it "accepts extra customer information" do
152
+ params = {
153
+ new_customer_id: "foo_bar",
154
+ email: "support@paytrace.com",
155
+ phone: "123-555-1212",
156
+ fax: "456-555-1212",
157
+ customer_password: "none_shall_pass",
158
+ account_number: 123456789,
159
+ routing_number: 12345678,
160
+ discretionary_data: "discretionary_data"
161
+ }
162
+
163
+ c = PayTrace::Customer.new
164
+ c.update(params)
165
+
166
+ PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~UpdateCustomer|NEWCUSTID~foo_bar|" +
167
+ "EMAIL~support@paytrace.com|PHONE~123-555-1212|FAX~456-555-1212|CUSTPSWD~none_shall_pass|DDA~123456789|" +
168
+ "TR~12345678|DISCRETIONARY DATA~discretionary_data|"
169
+ end
170
+ end
171
+
172
+ describe "delete customer profile" do
173
+ it "works with an instantiated Customer object" do
174
+ c = PayTrace::Customer.new("foo_bar")
175
+ c.delete
176
+
177
+ PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~DeleteCustomer|CUSTID~foo_bar|"
178
+ end
179
+
180
+ it "works with a static class method" do
181
+ PayTrace::Customer.delete("foob_barb")
182
+
183
+ PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~DeleteCustomer|CUSTID~foob_barb|"
184
+ end
185
+ end
186
+ end
@@ -0,0 +1,3 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '../../test_helper.rb')
2
+
3
+ include PayTrace::Exceptions
@@ -0,0 +1,117 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '../../test_helper.rb')
2
+
3
+ describe PayTrace::RecurringTransaction do
4
+ def base_url(method)
5
+ "UN~#{PayTrace.configuration.user_name}|PSWD~#{PayTrace.configuration.password}|TERMS~Y|METHOD~#{method}|"
6
+ end
7
+
8
+ describe "create recurrence" do
9
+ before do
10
+ PayTrace::API::Gateway.debug = true
11
+ PayTrace::API::Gateway.next_response = "RESPONSE~ok|RECURID~12345|"
12
+ end
13
+
14
+ it "works" do
15
+ params = {
16
+ customer_id: "foo_bar",
17
+ recur_frequency: "3",
18
+ recur_start: "4/22/2014",
19
+ recur_count: 999,
20
+ amount: 9.99,
21
+ transaction_type: "sale",
22
+ description: "Recurring transaction",
23
+ recur_receipt: "Y",
24
+ recur_type: "A"
25
+ }
26
+
27
+ recur_id = PayTrace::RecurringTransaction.create(params)
28
+ PayTrace::API::Gateway.last_request.must_equal base_url(PayTrace::RecurringTransaction::CREATE_METHOD) +
29
+ "CUSTID~foo_bar|FREQUENCY~3|START~4/22/2014|TOTALCOUNT~999|AMOUNT~9.99|TRANXTYPE~sale|DESCRIPTION~Recurring transaction|CUSTRECEIPT~Y|RECURTYPE~A|"
30
+
31
+ recur_id.must_equal "12345"
32
+ end
33
+ end
34
+
35
+ describe "update recurrence" do
36
+ before do
37
+ PayTrace::API::Gateway.debug = true
38
+ PayTrace::API::Gateway.next_response = "RESPONSE~ok|RECURID~12345|"
39
+ end
40
+
41
+ it "works" do
42
+ params = {
43
+ recur_id: 12345,
44
+ customer_id: "foo_bar",
45
+ recur_frequency: "3",
46
+ recur_start: "4/22/2014",
47
+ recur_count: 999,
48
+ amount: 9.99,
49
+ transaction_type: "sale",
50
+ description: "Recurring transaction",
51
+ recur_receipt: "Y"
52
+ }
53
+
54
+ recur_id = PayTrace::RecurringTransaction.update(params)
55
+ PayTrace::API::Gateway.last_request.must_equal base_url(PayTrace::RecurringTransaction::UPDATE_METHOD) +
56
+ "RECURID~12345|CUSTID~foo_bar|FREQUENCY~3|START~4/22/2014|TOTALCOUNT~999|AMOUNT~9.99|TRANXTYPE~sale|" +
57
+ "DESCRIPTION~Recurring transaction|CUSTRECEIPT~Y|"
58
+
59
+ recur_id.must_equal "12345"
60
+ end
61
+
62
+ it "accepts a recur type" do
63
+ params = {
64
+ recur_id: 12345,
65
+ customer_id: "foo_bar",
66
+ recur_frequency: "3",
67
+ recur_start: "4/22/2014",
68
+ recur_count: 999,
69
+ amount: 9.99,
70
+ transaction_type: "sale",
71
+ description: "Recurring transaction",
72
+ recur_receipt: "Y",
73
+ recur_type: "A"
74
+ }
75
+
76
+ recur_id = PayTrace::RecurringTransaction.update(params)
77
+ PayTrace::API::Gateway.last_request.must_equal base_url(PayTrace::RecurringTransaction::UPDATE_METHOD) +
78
+ "RECURID~12345|CUSTID~foo_bar|FREQUENCY~3|START~4/22/2014|TOTALCOUNT~999|AMOUNT~9.99|TRANXTYPE~sale|" +
79
+ "DESCRIPTION~Recurring transaction|CUSTRECEIPT~Y|RECURTYPE~A|"
80
+
81
+ recur_id.must_equal "12345"
82
+ end
83
+ end
84
+
85
+ describe "delete recurrence" do
86
+ before do
87
+ PayTrace::API::Gateway.debug = true
88
+ PayTrace::API::Gateway.next_response = "RESPONSE~ok|RECURID~12345|"
89
+ end
90
+
91
+ it "works with a recur ID" do
92
+ params = {
93
+ recur_id: 12345
94
+ }
95
+
96
+ recur_id = PayTrace::RecurringTransaction.delete(params)
97
+ PayTrace::API::Gateway.last_request.must_equal base_url(PayTrace::RecurringTransaction::DELETE_METHOD) +
98
+ "RECURID~12345|"
99
+
100
+ recur_id.must_equal "12345"
101
+ end
102
+
103
+ it "works with a customer ID" do
104
+ params = {
105
+ customer_id: "foo_bar"
106
+ }
107
+
108
+ recur_id = PayTrace::RecurringTransaction.delete(params)
109
+ PayTrace::API::Gateway.last_request.must_equal base_url(PayTrace::RecurringTransaction::DELETE_METHOD) +
110
+ "CUSTID~foo_bar|"
111
+
112
+ recur_id.must_equal "12345"
113
+ end
114
+ end
115
+ # describe "export single recurrence"
116
+ # describe "bulk update recurrences"
117
+ end
@@ -52,12 +52,12 @@ describe PayTrace::Transaction do
52
52
  it "can run a transaction for a customer" do
53
53
  t = PayTrace::Transaction.sale(
54
54
  {amount: "1.00",
55
- customer_id: "123456"}
55
+ customer: 123456}
56
56
  )
57
57
 
58
58
  t.amount.must_equal "1.00"
59
59
  t.type.must_equal PayTrace::TransactionTypes::SALE
60
- t.customer.customer_id.must_equal "123456"
60
+ t.customer.must_equal 123456
61
61
  t.credit_card.must_be_nil
62
62
  t.response.must_equal @response
63
63
 
@@ -215,14 +215,14 @@ describe PayTrace::Transaction do
215
215
 
216
216
  it "can use a customer id for processing the transaction" do
217
217
  t = PayTrace::Transaction.new({amount: "12.34",
218
- customer: PayTrace::Customer.new(customer_id: "1234"),
218
+ customer: 1234,
219
219
  type: PayTrace::TransactionTypes::SALE
220
220
  }
221
221
  )
222
222
  r = PayTrace::API::Request.new
223
223
  t.set_request(r)
224
224
 
225
- r.params[:customer_id].must_equal "1234"
225
+ r.params[:customer_id].must_equal 1234
226
226
  r.params[:amount].must_equal "12.34"
227
227
 
228
228
  url = r.to_parms_string
@@ -0,0 +1,55 @@
1
+ require 'paytrace'
2
+
3
+ # see: http://help.paytrace.com/api-email-receipt for details
4
+
5
+ #
6
+ # Helper that loops through the response values and dumps them out
7
+ #
8
+ def dump_response_values(response)
9
+ if(response.has_errors?)
10
+ response.errors.each do |key, value|
11
+ puts "#{key.ljust(20)}#{value}"
12
+ end
13
+ else
14
+ response.values.each do |key, value|
15
+ puts "#{key.ljust(20)}#{value}"
16
+ end
17
+ end
18
+ end
19
+
20
+ PayTrace.configure do |config|
21
+ config.user_name = "demo123"
22
+ config.password = "demo123"
23
+ config.domain = "stage.paytrace.com"
24
+ end
25
+
26
+ # this should be a valid credit card number (it can be a "sandbox" number, however)
27
+ cc = PayTrace::CreditCard.new({
28
+ card_number: "4111111111111111",
29
+ expiration_month: 12,
30
+ expiration_year: 2014
31
+ })
32
+ ba = PayTrace::Address.new({
33
+ name: "John Doe",
34
+ street: "1234 Main Street",
35
+ street2: "Apartment 1B",
36
+ city: "Shoreline",
37
+ state: "WA",
38
+ country: "US",
39
+ postal_code: "98133",
40
+ address_type: :billing
41
+ })
42
+ extra = {
43
+ email: "support@paytrace.com",
44
+ phone: "206-555-1212",
45
+ fax: "206-555-1313",
46
+ password: "foxtrot123",
47
+ account_number: 123456789,
48
+ routing_number: 12345678,
49
+ discretionary_data: "Discretionary data."
50
+ }
51
+
52
+ PayTrace::API::Gateway.set_debug(true)
53
+ c = PayTrace::Customer.from_cc_info("john_doe", cc, ba, nil, extra)
54
+
55
+ dump_response_values(PayTrace::API::Gateway.last_response)
@@ -0,0 +1,36 @@
1
+ require 'paytrace'
2
+
3
+ # see: http://help.paytrace.com/api-email-receipt for details
4
+
5
+ #
6
+ # Helper that loops through the response values and dumps them out
7
+ #
8
+ def dump_response_values(response)
9
+ if(response.has_errors?)
10
+ response.errors.each do |key, value|
11
+ puts "#{key.ljust(20)}#{value}"
12
+ end
13
+ else
14
+ response.values.each do |key, value|
15
+ puts "#{key.ljust(20)}#{value}"
16
+ end
17
+ end
18
+ end
19
+
20
+ PayTrace.configure do |config|
21
+ config.user_name = "demo123"
22
+ config.password = "demo123"
23
+ config.domain = "stage.paytrace.com"
24
+ end
25
+
26
+ e = PayTrace::EmailReceiptRequest.new("support@paytrace.com", "CHECK2345", true)
27
+ r = e.send_request
28
+
29
+ # this is for the check auth version
30
+ dump_response_values(r)
31
+
32
+ e = PayTrace::EmailReceiptRequest.new("support@paytrace.com", "TRANS1234", false)
33
+ r = e.send_request
34
+
35
+ # this is for the transaction version
36
+ dump_response_values(r)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paytrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trevor Redfern
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-25 00:00:00.000000000 Z
11
+ date: 2014-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  description: Integration with PayTrace Payment Gateway
70
98
  email:
71
99
  - trevor@paytrace.com
@@ -76,6 +104,7 @@ files:
76
104
  - ".gitignore"
77
105
  - ".ruby-gemset"
78
106
  - Gemfile
107
+ - Guardfile
79
108
  - LICENSE.txt
80
109
  - README.md
81
110
  - Rakefile
@@ -91,17 +120,25 @@ files:
91
120
  - lib/paytrace/credit_card.rb
92
121
  - lib/paytrace/customer.rb
93
122
  - lib/paytrace/email_receipt_request.rb
123
+ - lib/paytrace/exceptions.rb
124
+ - lib/paytrace/recurring_transaction.rb
94
125
  - lib/paytrace/transaction.rb
95
126
  - lib/paytrace/version.rb
96
127
  - paytrace.gemspec
128
+ - test/paytrace/address_spec.rb
97
129
  - test/paytrace/api/fields_spec.rb
98
130
  - test/paytrace/api/gateway_spec.rb
99
131
  - test/paytrace/api/request_spec.rb
100
132
  - test/paytrace/api/response_spec.rb
101
133
  - test/paytrace/configuration_spec.rb
102
134
  - test/paytrace/credit_card_spec.rb
135
+ - test/paytrace/customer_spec.rb
103
136
  - test/paytrace/email_receipt_request_spec.rb
137
+ - test/paytrace/exceptions_spec.rb
138
+ - test/paytrace/recurring_transaction_spec.rb
104
139
  - test/paytrace/transaction_spec.rb
140
+ - test/scripts/run_create_customer.rb
141
+ - test/scripts/run_email_request.rb
105
142
  - test/test_helper.rb
106
143
  - vagrant-bootstrap.sh
107
144
  homepage: http://github.com/PayTrace/paytrace_ruby
@@ -124,17 +161,23 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
161
  version: '0'
125
162
  requirements: []
126
163
  rubyforge_project:
127
- rubygems_version: 2.0.2
164
+ rubygems_version: 2.2.2
128
165
  signing_key:
129
166
  specification_version: 4
130
167
  summary: Integration providing access to the transaction processing API for PayTrace
131
168
  test_files:
169
+ - test/paytrace/address_spec.rb
132
170
  - test/paytrace/api/fields_spec.rb
133
171
  - test/paytrace/api/gateway_spec.rb
134
172
  - test/paytrace/api/request_spec.rb
135
173
  - test/paytrace/api/response_spec.rb
136
174
  - test/paytrace/configuration_spec.rb
137
175
  - test/paytrace/credit_card_spec.rb
176
+ - test/paytrace/customer_spec.rb
138
177
  - test/paytrace/email_receipt_request_spec.rb
178
+ - test/paytrace/exceptions_spec.rb
179
+ - test/paytrace/recurring_transaction_spec.rb
139
180
  - test/paytrace/transaction_spec.rb
181
+ - test/scripts/run_create_customer.rb
182
+ - test/scripts/run_email_request.rb
140
183
  - test/test_helper.rb