breadmachine 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/LICENSE +20 -0
  2. data/README.rdoc +18 -0
  3. data/lib/breadmachine/dto/card.rb +22 -0
  4. data/lib/breadmachine/dto/customer_info.rb +16 -0
  5. data/lib/breadmachine/dto/order_info.rb +13 -0
  6. data/lib/breadmachine/dto/three_d_secure_credentials.rb +13 -0
  7. data/lib/breadmachine/extensions/money.rb +9 -0
  8. data/lib/breadmachine/extensions.rb +1 -0
  9. data/lib/breadmachine/secure_trading/auth_request.rb +38 -0
  10. data/lib/breadmachine/secure_trading/auth_reversal_request.rb +36 -0
  11. data/lib/breadmachine/secure_trading/auth_reversal_response.rb +6 -0
  12. data/lib/breadmachine/secure_trading/card_xml.rb +23 -0
  13. data/lib/breadmachine/secure_trading/config.rb +21 -0
  14. data/lib/breadmachine/secure_trading/customer_info_auth_xml.rb +40 -0
  15. data/lib/breadmachine/secure_trading/customer_info_enrolment_xml.rb +21 -0
  16. data/lib/breadmachine/secure_trading/order_info_xml.rb +21 -0
  17. data/lib/breadmachine/secure_trading/payment_methods.rb +28 -0
  18. data/lib/breadmachine/secure_trading/st_3d_auth_request.rb +41 -0
  19. data/lib/breadmachine/secure_trading/st_3d_auth_response.rb +25 -0
  20. data/lib/breadmachine/secure_trading/st_3d_card_query_request.rb +37 -0
  21. data/lib/breadmachine/secure_trading/st_3d_card_query_response.rb +46 -0
  22. data/lib/breadmachine/secure_trading/three_d_secure_credentials_xml.rb +23 -0
  23. data/lib/breadmachine/secure_trading/xpay.rb +25 -0
  24. data/lib/breadmachine/secure_trading/xpay_socket.rb +22 -0
  25. data/lib/breadmachine/secure_trading.rb +32 -0
  26. data/lib/breadmachine.rb +27 -0
  27. data/spec/blueprints.rb +38 -0
  28. data/spec/breadmachine_spec.rb +5 -0
  29. data/spec/extensions/money_spec.rb +24 -0
  30. data/spec/secure_trading/auth_request_spec.rb +58 -0
  31. data/spec/secure_trading/bread_machine_spec.rb +16 -0
  32. data/spec/secure_trading/card_xml_spec.rb +56 -0
  33. data/spec/secure_trading/config_spec.rb +12 -0
  34. data/spec/secure_trading/customer_info_auth_xml_spec.rb +94 -0
  35. data/spec/secure_trading/customer_info_enrolment_xml_spec.rb +31 -0
  36. data/spec/secure_trading/order_info_xml_spec.rb +31 -0
  37. data/spec/secure_trading/st_3d_auth_request_spec.rb +63 -0
  38. data/spec/secure_trading/st_3d_auth_response_spec.rb +5 -0
  39. data/spec/secure_trading/st_3d_card_query_request_spec.rb +63 -0
  40. data/spec/secure_trading/st_3d_card_query_response_spec.rb +79 -0
  41. data/spec/secure_trading/st_auth_request_spec.rb +0 -0
  42. data/spec/secure_trading/st_auth_reversal_request_spec.rb +0 -0
  43. data/spec/secure_trading/st_refund_request_spec.rb +0 -0
  44. data/spec/secure_trading/st_refund_reversal_request_spec.rb +0 -0
  45. data/spec/secure_trading/st_settlement_request_spec.rb +0 -0
  46. data/spec/secure_trading/three_d_secure_credentials_xml_spec.rb +42 -0
  47. data/spec/secure_trading/xpay_socket_spec.rb +14 -0
  48. data/spec/secure_trading/xpay_spec.rb +9 -0
  49. data/spec/spec_helper.rb +17 -0
  50. data/spec/support/matchers/have_tag.rb +112 -0
  51. metadata +163 -0
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Matt Southerden
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,18 @@
1
+ = breadmachine
2
+
3
+ Description goes here.
4
+
5
+ == Note on Patches/Pull Requests
6
+
7
+ * Fork the project.
8
+ * Make your feature addition or bug fix.
9
+ * Add tests for it. This is important so I don't break it in a
10
+ future version unintentionally.
11
+ * Commit, do not mess with rakefile, version, or history.
12
+ (if you want to have your own version, that is fine but
13
+ bump version in a commit by itself I can ignore when I pull)
14
+ * Send me a pull request. Bonus points for topic branches.
15
+
16
+ == Copyright
17
+
18
+ Copyright (c) 2009 Matt Southerden. See LICENSE for details.
@@ -0,0 +1,22 @@
1
+ module BreadMachine
2
+
3
+ class Card
4
+
5
+ include BreadMachine::SecureTrading::CardXml
6
+
7
+ attr_accessor :issuer
8
+ attr_accessor :number
9
+ attr_accessor :expiry_date
10
+ attr_accessor :start_date
11
+ attr_accessor :issue
12
+ attr_accessor :security_code
13
+ attr_accessor :transaction_verifier
14
+ attr_accessor :parent_transaction_reference
15
+
16
+ def initialize(attributes = {})
17
+ attributes.each { |key, value| send("#{key}=", value) }
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,16 @@
1
+ module BreadMachine
2
+
3
+ class CustomerInfo
4
+
5
+ attr_accessor :name_prefix, :first_name, :middle_name, :last_name, :name_suffix,
6
+ :company, :street, :city, :state, :postcode, :iso_2_country,
7
+ :telephone, :email,
8
+ :accept, :user_agent
9
+
10
+ def initialize(attributes = {})
11
+ attributes.each { |key, value| send("#{key}=", value) }
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -0,0 +1,13 @@
1
+ module BreadMachine
2
+
3
+ class OrderInfo
4
+
5
+ attr_accessor :order_reference, :order_information
6
+
7
+ def initialize(attributes = {})
8
+ attributes.each { |key, value| send("#{key}=", value) }
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,13 @@
1
+ module BreadMachine
2
+
3
+ class ThreeDSecureCredentials
4
+
5
+ attr_accessor :enrolled, :pa_res, :md, :transaction_reference
6
+
7
+ def initialize(attributes = {})
8
+ attributes.each { |key, value| send("#{key}=", value) }
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,9 @@
1
+ class Money
2
+ class << self
3
+
4
+ def sterling(amount)
5
+ Money.new(amount, "GBP")
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ require 'breadmachine/extensions/money'
@@ -0,0 +1,38 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class AuthRequest
5
+
6
+ def initialize(amount, card, customer_info, order_info, settlement_day = 1)
7
+ @amount = amount
8
+ @card = card
9
+ @customer_info = BreadMachine::SecureTrading::CustomerInfoAuthXml.new(customer_info)
10
+ @order_info = BreadMachine::SecureTrading::OrderInfoXml.new(order_info)
11
+ @settlement_day = settlement_day
12
+ end
13
+
14
+ def response(xml)
15
+ St3dAuthResponse.new(xml)
16
+ end
17
+
18
+ def to_xml
19
+ xml = Builder::XmlMarkup.new(:indent => 2)
20
+ xml.Request("Type" => "AUTH") {
21
+ xml.Operation {
22
+ xml.Amount @amount.cents
23
+ xml.Currency BreadMachine::SecureTrading::configuration.currency
24
+ xml.SiteReference BreadMachine::SecureTrading::configuration.site_reference
25
+ xml.SettlementDay @settlement_day
26
+ }
27
+ xml << @customer_info.to_xml
28
+ xml.PaymentMethod {
29
+ xml << @card.to_xml
30
+ }
31
+ xml << @order_info.to_xml
32
+ }
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,36 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class AuthReversalRequest
5
+
6
+ def initialize(transaction, customer_info, order_info)
7
+ @transaction = transaction
8
+ @customer_info = BreadMachine::SecureTrading::CustomerInfoAuthXml.new(customer_info)
9
+ @order_info = BreadMachine::SecureTrading::OrderInfoXml.new(order_info)
10
+ end
11
+
12
+ def response(xml)
13
+ St3dAuthResponse.new(xml)
14
+ end
15
+
16
+ def to_xml
17
+ xml = Builder::XmlMarkup.new(:indent => 2)
18
+ xml.Request("Type" => "AUTHREVERSAL") {
19
+ xml.Operation {
20
+ xml.SiteReference BreadMachine::SecureTrading::configuration.site_reference
21
+ }
22
+ # xml << @customer_info.to_xml
23
+ xml.PaymentMethod {
24
+ xml.CreditCard {
25
+ xml.ParentTransactionReference @transaction.transaction_reference
26
+ xml.TransactionVerifier @transaction.transaction_verifier
27
+ }
28
+ }
29
+ # xml << @order_info.to_xml
30
+ }
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,6 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+ class AuthReversalResponse
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,23 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ module CardXml
5
+
6
+ def to_xml
7
+ xml = Builder::XmlMarkup.new(:indent => 2)
8
+ xml.CreditCard {
9
+ xml.Type @issuer
10
+ xml.Number @number
11
+ xml.ExpiryDate @expiry_date
12
+ xml.StartDate @start_date
13
+ xml.Issue @issue
14
+ xml.SecurityCode @security_code
15
+ xml.TransactionVerifier @transaction_verifier
16
+ xml.ParentTransactionReference @parent_transaction_reference
17
+ }
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class Config
5
+
6
+ attr_accessor :currency, :site_reference, :term_url, :merchant_name
7
+
8
+ module ClassMethods
9
+ def configuration
10
+ @configuration ||= BreadMachine::SecureTrading::Config.new
11
+ end
12
+
13
+ def configure(&block)
14
+ yield configuration
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,40 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class CustomerInfoAuthXml
5
+
6
+ def initialize(customer_info)
7
+ @customer_info = customer_info
8
+ end
9
+
10
+ def to_xml
11
+ xml = Builder::XmlMarkup.new(:indent => 2)
12
+ xml.CustomerInfo {
13
+ xml.Postal {
14
+ xml.Name {
15
+ xml.NamePrefix @customer_info.name_prefix
16
+ xml.FirstName @customer_info.first_name
17
+ xml.MiddleName @customer_info.middle_name
18
+ xml.LastName @customer_info.last_name
19
+ xml.NameSuffix @customer_info.name_suffix
20
+ }
21
+ xml.Company @customer_info.company
22
+ xml.Street @customer_info.street
23
+ xml.City @customer_info.city
24
+ xml.StateProv @customer_info.state
25
+ xml.PostalCode @customer_info.postcode
26
+ xml.CountryCode @customer_info.iso_2_country
27
+ }
28
+ xml.Telecom {
29
+ xml.Phone @customer_info.telephone
30
+ }
31
+ xml.Online {
32
+ xml.Email @customer_info.email
33
+ }
34
+ }
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,21 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class CustomerInfoEnrolmentXml
5
+
6
+ def initialize(customer_info)
7
+ @customer_info = customer_info
8
+ end
9
+
10
+ def to_xml
11
+ xml = Builder::XmlMarkup.new(:indent => 2)
12
+ xml.CustomerInfo {
13
+ xml.Accept @customer_info.accept
14
+ xml.UserAgent @customer_info.user_agent
15
+ }
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class OrderInfoXml
5
+
6
+ def initialize(order_info)
7
+ @order_info = order_info
8
+ end
9
+
10
+ def to_xml
11
+ xml = Builder::XmlMarkup.new(:indent => 2)
12
+ xml.Order {
13
+ xml.OrderReference @order_info.order_reference
14
+ xml.OrderInformation @order_info.order_information
15
+ }
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ module PaymentMethods
5
+
6
+ def auth(*args)
7
+ request = SecureTrading::AuthRequest.new(*args)
8
+ return SecureTrading::XPay.exchange(request)
9
+ end
10
+
11
+ def three_d_secure_enrolled?(*args)
12
+ request = SecureTrading::St3dCardQueryRequest.new(*args)
13
+ return SecureTrading::XPay.exchange(request)
14
+ end
15
+
16
+ def three_d_auth(*args)
17
+ request = SecureTrading::St3dAuthRequest.new(*args)
18
+ return SecureTrading::XPay.exchange(request)
19
+ end
20
+
21
+ def reverse(*args)
22
+ request = SecureTrading::AuthReversalRequest.new(*args)
23
+ return SecureTrading::XPay.exchange(request)
24
+ end
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,41 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class St3dAuthRequest
5
+
6
+ def initialize(amount, card, customer_info, order_info, three_d_secure, settlement_day = 1)
7
+ @amount = amount
8
+ @card = card
9
+ @card.parent_transaction_reference = three_d_secure.transaction_reference
10
+ @customer_info = BreadMachine::SecureTrading::CustomerInfoAuthXml.new(customer_info)
11
+ @order_info = BreadMachine::SecureTrading::OrderInfoXml.new(order_info)
12
+ @three_d_secure = BreadMachine::SecureTrading::ThreeDSecureCredentialsXml.new(three_d_secure)
13
+ @settlement_day = settlement_day
14
+ end
15
+
16
+ def response(xml)
17
+ St3dAuthResponse.new(xml)
18
+ end
19
+
20
+ def to_xml
21
+ xml = Builder::XmlMarkup.new(:indent => 2)
22
+ xml.Request("Type" => "ST3DAUTH") {
23
+ xml.Operation {
24
+ xml.Amount @amount.cents
25
+ xml.Currency BreadMachine::SecureTrading::configuration.currency
26
+ xml.SiteReference BreadMachine::SecureTrading::configuration.site_reference
27
+ xml.SettlementDay @settlement_day
28
+ }
29
+ xml << @customer_info.to_xml
30
+ xml.PaymentMethod {
31
+ xml << @card.to_xml
32
+ xml << @three_d_secure.to_xml
33
+ }
34
+ xml << @order_info.to_xml
35
+ }
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,25 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class St3dAuthResponse
5
+
6
+ def initialize(xml)
7
+ @xml = Nokogiri::XML.parse(xml)
8
+ end
9
+
10
+ def successful?
11
+ @xml.xpath('//OperationResponse/Result').text == "1"
12
+ end
13
+
14
+ def transaction_reference
15
+ @xml.xpath('//OperationResponse/TransactionReference').text
16
+ end
17
+
18
+ def transaction_verifier
19
+ @xml.xpath('//OperationResponse/TransactionVerifier').text
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class St3dCardQueryRequest
5
+
6
+ def initialize(amount, card, customer_info, order_info)
7
+ @amount = amount
8
+ @customer_info = BreadMachine::SecureTrading::CustomerInfoEnrolmentXml.new(customer_info)
9
+ @order_info = BreadMachine::SecureTrading::OrderInfoXml.new(order_info)
10
+ @card = card
11
+ end
12
+
13
+ def response(xml)
14
+ St3dCardQueryResponse.new(xml)
15
+ end
16
+
17
+ def to_xml
18
+ xml = Builder::XmlMarkup.new(:indent => 2)
19
+ xml.Request("Type" => "ST3DCARDQUERY") {
20
+ xml.Operation {
21
+ xml.Amount @amount.cents
22
+ xml.Currency BreadMachine::SecureTrading::configuration.currency
23
+ xml.SiteReference BreadMachine::SecureTrading::configuration.site_reference
24
+ xml.TermUrl BreadMachine::SecureTrading::configuration.term_url
25
+ xml.MerchantName BreadMachine::SecureTrading::configuration.merchant_name
26
+ }
27
+ xml << @customer_info.to_xml
28
+ xml.PaymentMethod {
29
+ xml << @card.to_xml
30
+ }
31
+ xml << @order_info.to_xml
32
+ }
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,46 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class St3dCardQueryResponse
5
+
6
+ def initialize(xml)
7
+ @xml = Nokogiri::XML.parse(xml)
8
+ end
9
+
10
+ def successful?
11
+ @xml.xpath('//OperationResponse/Result').text == "1"
12
+ end
13
+
14
+ def enrolled
15
+ {
16
+ 'N/A' => :na,
17
+ 'Y' => :yes,
18
+ 'N' => :no,
19
+ 'U' => :unknown
20
+ }[@xml.xpath('//OperationResponse/Enrolled').text]
21
+ end
22
+
23
+ def md
24
+ @xml.xpath('//OperationResponse/MD').text
25
+ end
26
+
27
+ def pa_req
28
+ @xml.xpath('//OperationResponse/PaReq').text
29
+ end
30
+
31
+ def acs_url
32
+ @xml.xpath('//OperationResponse/AcsUrl').text
33
+ end
34
+
35
+ def transaction_reference
36
+ @xml.xpath('//OperationResponse/TransactionReference').text
37
+ end
38
+
39
+ def auth_type
40
+ BreadMachine::SecureTrading::St3dAuthRequest
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,23 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class ThreeDSecureCredentialsXml
5
+
6
+ def initialize(credentials)
7
+ @credentials = credentials
8
+ end
9
+
10
+ def to_xml
11
+ xml = Builder::XmlMarkup.new(:indent => 2)
12
+ xml.ThreeDSecure {
13
+ xml.Enrolled @credentials.enrolled
14
+ xml.PaRes @credentials.pa_res
15
+ xml.MD @credentials.md
16
+ xml.TransactionReference @credentials.transaction_reference
17
+ }
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ class XPay
5
+ def self.exchange(request)
6
+
7
+ xml = Builder::XmlMarkup.new(:indent => 2)
8
+ xml.RequestBlock('Version' => '3.51') do |request_block|
9
+ request_block << request.to_xml
10
+ xml.Certificate BreadMachine::SecureTrading::configuration.site_reference
11
+ end
12
+
13
+ response_xml = nil
14
+
15
+ XPaySocket.open("localhost", 5000) do |socket|
16
+ socket.write xml.xml
17
+ response_xml = socket.read
18
+ end
19
+
20
+ request.response(response_xml)
21
+ end
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ module BreadMachine
2
+ module SecureTrading
3
+
4
+ # This currently just delegates to TCPSocket, but this is where we will
5
+ # inject Fake Socket behaviour to disconnect from having the XPay
6
+ # client running during testing
7
+
8
+ class XPaySocket
9
+
10
+ class << self
11
+
12
+ def open(*args, &block)
13
+ TCPSocket.open(*args, &block)
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
22
+
@@ -0,0 +1,32 @@
1
+ module BreadMachine
2
+
3
+ module SecureTrading
4
+
5
+ autoload :Config, 'breadmachine/secure_trading/config'
6
+ autoload :PaymentMethods, 'breadmachine/secure_trading/payment_methods'
7
+
8
+ autoload :XPay, 'breadmachine/secure_trading/xpay'
9
+ autoload :XPaySocket, 'breadmachine/secure_trading/xpay_socket'
10
+
11
+ autoload :CardXml, 'breadmachine/secure_trading/card_xml'
12
+
13
+ autoload :CustomerInfoAuthXml, 'breadmachine/secure_trading/customer_info_auth_xml'
14
+ autoload :CustomerInfoEnrolmentXml, 'breadmachine/secure_trading/customer_info_enrolment_xml'
15
+ autoload :ThreeDSecureCredentialsXml, 'breadmachine/secure_trading/three_d_secure_credentials_xml'
16
+ autoload :OrderInfoXml, 'breadmachine/secure_trading/order_info_xml'
17
+
18
+ autoload :St3dCardQueryRequest, 'breadmachine/secure_trading/st_3d_card_query_request'
19
+ autoload :St3dCardQueryResponse, 'breadmachine/secure_trading/st_3d_card_query_response'
20
+
21
+ autoload :St3dAuthRequest, 'breadmachine/secure_trading/st_3d_auth_request'
22
+ autoload :St3dAuthResponse, 'breadmachine/secure_trading/st_3d_auth_response'
23
+
24
+ autoload :AuthReversalRequest, 'breadmachine/secure_trading/auth_reversal_request'
25
+ autoload :AuthRequest, 'breadmachine/secure_trading/auth_request'
26
+ # autoload :AuthResponse, 'breadmachine/secure_trading/st_3d_auth_response'
27
+
28
+ extend BreadMachine::SecureTrading::Config::ClassMethods
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,27 @@
1
+ require 'money'
2
+ require 'nokogiri'
3
+ require 'builder'
4
+
5
+ require 'breadmachine/extensions'
6
+
7
+ require 'breadmachine/secure_trading'
8
+
9
+ module BreadMachine
10
+
11
+ autoload :Card, 'breadmachine/dto/card'
12
+ autoload :CustomerInfo, 'breadmachine/dto/customer_info'
13
+ autoload :OrderInfo, 'breadmachine/dto/order_info'
14
+ autoload :ThreeDSecureCredentials, 'breadmachine/dto/three_d_secure_credentials'
15
+
16
+ extend SecureTrading::PaymentMethods
17
+
18
+ end
19
+
20
+ class Builder::XmlBase
21
+
22
+ # Make generated xml easier to read by indenting appended xml strings out to
23
+ # the current indent level.
24
+ def <<(text)
25
+ _text(text.indent(@level * @indent))
26
+ end
27
+ end