adapt 0.0.1

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.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Tyler Hunt
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.
@@ -0,0 +1,16 @@
1
+ require 'active_model'
2
+ require 'bigdecimal'
3
+ require 'patron'
4
+
5
+ module Adapt
6
+ VERSION = '56.0'.freeze
7
+
8
+ LIVE = 'https://svcs.paypal.com/AdaptivePayments'.freeze
9
+ SANDBOX = 'https://svcs.sandbox.paypal.com/AdaptivePayments'.freeze
10
+ BETA = 'https://svcs.beta-sandbox.paypal.com/AdaptivePayments'.freeze
11
+
12
+ autoload :Base, 'adapt/base'
13
+ autoload :Common, 'adapt/common'
14
+ autoload :Methods, 'adapt/methods'
15
+ autoload :Service, 'adapt/service'
16
+ end
@@ -0,0 +1,101 @@
1
+ require 'active_support/inflector'
2
+
3
+ module Adapt
4
+ class Base
5
+ include ActiveModel::Validations
6
+
7
+ class_inheritable_array :properties
8
+ self.properties ||= []
9
+
10
+ def self.property(name, options={}, &block)
11
+ unless default = options.delete(:default)
12
+ attr_reader(name)
13
+ else
14
+ define_method(name) do
15
+ unless instance_variable_defined?(:"@#{name}")
16
+ send(:"#{name}=", default)
17
+ end
18
+
19
+ instance_variable_get(:"@#{name}")
20
+ end
21
+ end
22
+
23
+ type = if block_given?
24
+ const_set(
25
+ name.to_s.classify,
26
+ Class.new(Base).tap { |base| base.class_eval(&block) }
27
+ )
28
+ else
29
+ options.delete(:type)
30
+ end
31
+
32
+ unless type
33
+ attr_writer(name)
34
+ else
35
+ collection = options.delete(:collection) || type.is_a?(Array)
36
+ type = type.first if type.is_a?(Array)
37
+
38
+ define_method(:"#{name}=") do |value|
39
+ value = unless collection
40
+ type.new(value)
41
+ else
42
+ value.collect { |attributes| attributes.is_a?(Hash) ? type.new(attributes) : attributes }
43
+ end
44
+
45
+ instance_variable_set(:"@#{name}", value)
46
+ end
47
+ end
48
+
49
+ validates(name, options) if options.any?
50
+ properties << name unless properties.include?(name)
51
+ end
52
+
53
+ def initialize(attributes={})
54
+ self.attributes = attributes
55
+ end
56
+
57
+ def attributes
58
+ attributes = properties.each_with_object({}) do |name, attributes|
59
+ value = send(name)
60
+ attributes[name] = value unless value.nil?
61
+ end
62
+
63
+ encode_keys(attributes)
64
+ end
65
+
66
+ def attributes=(attributes)
67
+ attributes.each do |key, value|
68
+ send(:"#{decode_key(key)}=", value)
69
+ end
70
+ end
71
+
72
+ def to_json
73
+ ActiveSupport::JSON.encode(attributes)
74
+ end
75
+
76
+ def from_json(json)
77
+ self.attributes = ActiveSupport::JSON.decode(json)
78
+ self
79
+ end
80
+
81
+ def encode_keys(object)
82
+ case object
83
+ when Array then object.collect { |value| encode_keys(value) }
84
+ when Hash then Hash[object.collect { |key, value| [encode_key(key), encode_keys(value)] }]
85
+ when Base then encode_keys(object.attributes)
86
+ else object
87
+ end
88
+ end
89
+ private :encode_keys
90
+
91
+ def encode_key(key)
92
+ key.is_a?(Symbol) ? key.to_s.camelcase(:lower) : key
93
+ end
94
+ private :encode_key
95
+
96
+ def decode_key(key)
97
+ key.is_a?(Symbol) ? key : key.underscore.to_sym
98
+ end
99
+ private :decode_key
100
+ end
101
+ end
@@ -0,0 +1,13 @@
1
+ module Adapt
2
+ module Common
3
+ autoload :ClientDetails, 'adapt/common/client_details'
4
+ autoload :ErrorData, 'adapt/common/error_data'
5
+ autoload :ErrorParameter, 'adapt/common/error_parameter'
6
+ autoload :FaultMessage, 'adapt/common/fault_message'
7
+ autoload :PhoneNumberType, 'adapt/common/phone_number_type'
8
+ autoload :Receiver, 'adapt/common/receiver'
9
+ autoload :ReceiverList, 'adapt/common/receiver_list'
10
+ autoload :RequestEnvelope, 'adapt/common/request_envelope'
11
+ autoload :ResponseEnvelope, 'adapt/common/response_envelope'
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Adapt
2
+ module Common
3
+ class ClientDetails < Base
4
+ property :application_id, :presence => true
5
+ property :customer_id, :presence => true
6
+ property :customer_type, :presence => true
7
+ property :device_id
8
+ property :geo_location, :presence => true
9
+ property :ip_address, :presence => true
10
+ property :model, :presence => true
11
+ property :partner_name, :presence => true
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ module Adapt
2
+ module Common
3
+ class ErrorData < Base
4
+ SEVERITIES = %w(Error Warning).freeze
5
+
6
+ property :category
7
+ property :domain
8
+ property :error_id
9
+ property :exception_id
10
+ property :message
11
+ property :parameter
12
+ property :severity, :inclusion => { :in => SEVERITIES }
13
+ property :subdomain
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ module Adapt
2
+ module Common
3
+ class ErrorParameter < Base
4
+ property :name
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module Adapt
2
+ module Common
3
+ class FaultMessage < Base
4
+ property :error
5
+ property :response_envelope
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ module Adapt
2
+ module Common
3
+ class PhoneNumberType < Base
4
+ property :country_code, :presence => true
5
+ property :extension
6
+ property :phone_number, :presence => true
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ module Adapt
2
+ module Common
3
+ class Receiver < Base
4
+ PAYMENT_TYPES = %w(GOODS SERVICE PERSONAL CASHADVANCE).freeze
5
+
6
+ property :amount, :presence => true
7
+ property :email
8
+ property :invoice_id
9
+ property :payment_type, :inclusion => { :in => PAYMENT_TYPES }
10
+ property :phone, :type => Common::PhoneNumberType
11
+ property :primary, :default => false, :inclusion => { :in => [true, false] }, :presence => true
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ module Adapt
2
+ module Common
3
+ class ReceiverList < Base
4
+ property :receiver, :presence => true
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module Adapt
2
+ module Common
3
+ class RequestEnvelope < Base
4
+ property :detail_level, :default => 'ReturnAll', :presence => true
5
+ property :error_language, :default => 'en_US', :presence => true
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,10 @@
1
+ module Adapt
2
+ module Common
3
+ class ResponseEnvelope < Base
4
+ property :ack
5
+ property :build
6
+ property :correlation_id
7
+ property :timestamp
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,14 @@
1
+ module Adapt
2
+ module Methods
3
+ autoload :CancelPreapproval, 'adapt/methods/cancel_preapproval'
4
+ autoload :ConvertCurrency, 'adapt/methods/convert_currency'
5
+ autoload :ExecutePayment, 'adapt/methods/execute_payment'
6
+ autoload :GetPaymentOptions, 'adapt/methods/get_payment_options'
7
+ autoload :Pay, 'adapt/methods/pay'
8
+ autoload :PaymentDetails, 'adapt/methods/payment_details'
9
+ autoload :Preapproval, 'adapt/methods/preapproval'
10
+ autoload :PreapprovalDetails, 'adapt/methods/preapproval_details'
11
+ autoload :Refund, 'adapt/methods/refund'
12
+ autoload :SetPaymentOptions, 'adapt/methods/set_payment_options'
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ module Adapt
2
+ module Methods
3
+ # Cancels a pre-approval
4
+ class CancelPreapproval
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,40 @@
1
+ module Adapt
2
+ module Methods
3
+ # Obtains Foreign Exchange currency conversion rates for a list of amounts
4
+ class ConvertCurrency < Base
5
+ CURRENCY_CODES = %w(AUD BRL CAD CZK DKK EUR HKD HUF ILS JPY MYR MXN NOK NZD PHP PLN GBP SGD SEK CHF TWD THB USD).freeze
6
+
7
+ class CurrencyType < Base
8
+ property :amount, :presence => true
9
+ property :code, :presence => true, :inclusion => { :in => CURRENCY_CODES }
10
+ end
11
+
12
+ class Request < Base
13
+ property :base_amount_list, :collection => true do
14
+ property :currency, :type => CurrencyType
15
+ end
16
+
17
+ property :convert_to_currency_list, :collection => true do
18
+ property :currency_code, :presence => true, :inclusion => { :in => CURRENCY_CODES }
19
+ end
20
+
21
+ property :request_envelope, :type => Common::RequestEnvelope
22
+ end
23
+
24
+ class Response < Base
25
+ property :estimated_amount_table do
26
+ property :currency_conversion_list, :collection => true do
27
+ property :base_amount, :type => CurrencyType
28
+
29
+ property :currency_list do
30
+ property :currency, :type => [CurrencyType]
31
+ end
32
+ end
33
+ end
34
+
35
+ property :response_envelope, :type => Common::ResponseEnvelope
36
+ property :error, :type => [Common::ErrorData]
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ module Adapt
2
+ module Methods
3
+ # Executes a payment
4
+ class ExecutePayment
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Adapt
2
+ module Methods
3
+ # Obtain the settings specified with the SetPaymentOptions API operation
4
+ class GetPaymentOptions
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,68 @@
1
+ module Adapt
2
+ module Methods
3
+ # Transfers funds from a sender's PayPal account to one or more receivers’
4
+ # PayPal accounts (up to 6 receivers)
5
+ #
6
+ # Redirect the user to the following URL for approval:
7
+ # "https://www.paypal.com/webscr?cmd=_ap-payment&paykey=#{response.pay_key}"
8
+ class Pay
9
+ ACTION_TYPES = %w(PAY CREATE PAY_PRIMARY).freeze
10
+ CURRENCY_CODES = %w(AUD BRL CAD CZK DKK EUR HKD HUF ILS JPY MYR MXN NOK NZD PHP PLN GBP SGD SEK CHF TWD THB USD).freeze
11
+ FEES_PAYERS = %w(SENDER PRIMARYRECEIVER EACHRECEIVER SECONDARYONLY).freeze
12
+ PAYMENT_PERIODS = %w(NO_PERIOD_SPECIFIED DAILY WEEKLY BIWEEKLY SEMIMONTHLY MONTHLY ANNUALLY).freeze
13
+ PIN_TYPES = %w(NOT_REQUIRED REQUIRED).freeze
14
+ WEEK_DAYS = %w(NO_DAY_SPECIFIED SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY).freeze
15
+ FUNDING_TYPES = %w(ECHECK BALANCE CREDITCARD)
16
+
17
+ class Request < Base
18
+ property :action_type, :inclusion => { :in => ACTION_TYPES }, :presence => true
19
+ property :cancel_url, :presence => true
20
+ property :client_details
21
+ property :currency_code, :inclusion => { :in => CURRENCY_CODES }
22
+ property :date_of_month, :numericality => { :greater_than_or_equal_to => 0, :less_than_or_equal_to => 31 }
23
+ property :day_of_week, :inclusion => { :in => WEEK_DAYS }
24
+ property :ending_date
25
+ property :ipn_notification_url
26
+ property :max_amount_per_payment
27
+ property :max_number_of_payments
28
+ property :max_number_of_payments_per_period
29
+ property :max_total_amount_of_all_payments
30
+ property :payment_period, :inclusion => { :in => PAYMENT_PERIODS }
31
+ property :pin_type, :inclusion => { :in => PIN_TYPES }
32
+ property :starting_date, :presence => true
33
+ property :fees_payer, :inclusion => { :in => FEES_PAYERS }
34
+ property :memo, :length => { :maximum => 1000 }
35
+ property :pin
36
+ property :preapproval_key
37
+ property :receiver_list, :type => Common::ReceiverList
38
+ property :request_envelope, :type => Common::RequestEnvelope, :presence => true
39
+ property :return_url, :presence => true
40
+ property :reverse_all_parallel_payments_on_error, :inclusion => { :in => [true, false] }
41
+ property :sender_email
42
+ property :tracking_id
43
+
44
+ property :funding_constraint, :collection => true do
45
+ property :allowed_funding_type do
46
+ property :funding_type_info do
47
+ property :funding_type, :presence => true, :inclusion => { :in => FUNDING_TYPES }
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ class Response < Base
54
+ property :error, :type => Common::ErrorData, :collection => true
55
+ property :pay_key
56
+ property :payment_exec_status
57
+ property :response_envelope, :type => Common::ResponseEnvelope
58
+
59
+ property :pay_error_list do
60
+ property :pay_error, :collection => true do
61
+ property :error, :type => Common::ErrorData
62
+ property :receiver, :type => Common::Receiver
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,7 @@
1
+ module Adapt
2
+ module Methods
3
+ # Obtains information about a payment set up with the Pay API operation
4
+ class PaymentDetails
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,39 @@
1
+ module Adapt
2
+ module Methods
3
+ # Sets up pre-approvals, which is an approval to make future payments on the
4
+ # sender's behalf
5
+ class Preapproval < Base
6
+ CURRENCY_CODES = %w(AUD BRL CAD CZK DKK EUR HKD HUF ILS JPY MYR MXN NOK NZD PHP PLN GBP SGD SEK CHF TWD THB USD).freeze
7
+ DAYS_OF_WEEK = %w(NO_DAY_SPECIFIED SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAR FRIDAY SATURDAY).freeze
8
+ PAYMENT_PERIODS = %w(NO_PERIOD_SPECIFIED DAILY WEEKLY BIWEEKLY SEMIMONTHLY MONTHLY ANNUALLY).freeze
9
+ PIN_TYPES = %w(NOT_REQUIRED REQUIRED).freeze
10
+
11
+ class Request < Base
12
+ property :cancel_url, :presence => true
13
+ property :client_details, :type => Common::ClientDetails
14
+ property :currency_code, :presence => true, :inclusion => { :in => CURRENCY_CODES }
15
+ property :date_of_month, :numericality => { :greater_than_or_equal_to => 0, :less_than_or_equal_to => 31 }
16
+ property :day_of_week, :inclusion => { :in => DAYS_OF_WEEK }
17
+ property :ending_date, :presence => true
18
+ property :ipn_notificaiton_url
19
+ property :max_amount_per_payment, :numericality => true
20
+ property :max_number_of_payments, :numericality => { :integer_only => true }
21
+ property :max_number_of_payments_per_period, :numericality => { :integer_only => true }
22
+ property :max_total_amount_of_all_payments, :presence => true, :numericality => true
23
+ property :memo
24
+ property :payment_period, :inclusion => { :in => PAYMENT_PERIODS }
25
+ property :pin_type, :inclusion => { :in => PIN_TYPES }
26
+ property :request_envelope, :type => Common::RequestEnvelope, :presence => true
27
+ property :return_url, :presence => true
28
+ property :sender_email
29
+ property :starting_date, :presence => true
30
+ end
31
+
32
+ class Response < Base
33
+ property :preapproval_key
34
+ property :response_envelope, :type => Common::ResponseEnvelope
35
+ property :error, :type => [Common::ErrorData]
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,7 @@
1
+ module Adapt
2
+ module Methods
3
+ # Obtains information about a pre-approval
4
+ class PreapprovalDetails
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Adapt
2
+ module Methods
3
+ # Refunds all or part of a payment
4
+ class Refund
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,33 @@
1
+ module Adapt
2
+ module Methods
3
+ # Sets payment options
4
+ class SetPaymentOptions
5
+ class Request < Base
6
+ property :pay_key, :presence => true
7
+ property :request_envelope, :type => Common::RequestEnvelope, :presence => true
8
+
9
+ property :initiating_entity do
10
+ property :institution_customer do
11
+ property :country_code, :presence => true
12
+ property :display_name, :presence => true
13
+ property :email
14
+ property :first_name, :presence => true
15
+ property :institution_customer_id, :presence => true
16
+ property :institution_id, :presence => true
17
+ property :last_name, :presence => true
18
+ end
19
+ end
20
+
21
+ property :display_options do
22
+ property :email_header_image_url
23
+ property :email_marketing_image_url
24
+ end
25
+ end
26
+
27
+ class Response < Base
28
+ property :response_envelope, :type => Common::ResponseEnvelope
29
+ property :error, :type => [Common::ErrorData]
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,83 @@
1
+ require 'active_support/core_ext/string/inflections'
2
+
3
+ module Adapt
4
+ class Service
5
+ METHODS = %w[
6
+ CancelPreapproval
7
+ ConvertCurrency
8
+ ExecutePayment
9
+ GetPaymentOptions
10
+ Pay
11
+ PaymentDetails
12
+ Preapproval
13
+ PreapprovalDetails
14
+ Refund
15
+ SetPaymentOptions
16
+ ].freeze
17
+
18
+ attr_reader :credentials
19
+ attr_accessor :environment
20
+
21
+ def initialize(credentials)
22
+ @credentials = credentials
23
+ @environment = :sandbox
24
+ end
25
+
26
+ def defaults
27
+ {
28
+ :request_format => 'JSON',
29
+ :response_format => 'JSON'
30
+ }
31
+ end
32
+
33
+ def headers
34
+ {
35
+ 'X-PAYPAL-SECURITY-USERID' => credentials[:username],
36
+ 'X-PAYPAL-SECURITY-PASSWORD' => credentials[:password],
37
+ 'X-PAYPAL-SECURITY-SIGNATURE' => credentials[:signature],
38
+ 'X-PAYPAL-DEVICE-IPADDRESS' => credentials[:ip],
39
+ 'X-PAYPAL-REQUEST-DATA-FORMAT' => defaults[:request_format],
40
+ 'X-PAYPAL-RESPONSE-DATA-FORMAT' => defaults[:response_format],
41
+ 'X-PAYPAL-APPLICATION-ID' => credentials[:application_id]
42
+ }.tap do |parameters|
43
+ if credentials[:subject]
44
+ parameters['X-PAYPAL-SUBJECT'] = credentials[:subject]
45
+ end
46
+
47
+ if credentials[:device]
48
+ parameters['X-PAYPAL-DEVICE-ID'] = credentials[:device]
49
+ end
50
+
51
+ if credentials[:version]
52
+ parameters['X-PAYPAL-SERVICE-VERSION'] = credentials[:version]
53
+ end
54
+ end
55
+ end
56
+
57
+ def endpoint(method)
58
+ if METHODS.include?(method)
59
+ root = case environment
60
+ when :live then LIVE
61
+ when :beta then BETA
62
+ else SANDBOX
63
+ end
64
+
65
+ URI.parse([root, method].join('/'))
66
+ else
67
+ raise ArgumentError.new("Invalid method: #{method}")
68
+ end
69
+ end
70
+
71
+ def request(method, request={})
72
+ uri = endpoint(method)
73
+
74
+ session = Patron::Session.new.tap do |session|
75
+ session.timeout = 10
76
+ session.insecure = true
77
+ session.base_url = "#{uri.scheme}://#{uri.host}:#{uri.port}"
78
+ end
79
+
80
+ session.post(uri.path, request.to_json, headers)
81
+ end
82
+ end
83
+ end
metadata ADDED
@@ -0,0 +1,209 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: adapt
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Tyler Hunt
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-10-19 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: activemodel
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - "="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 3
30
+ - 0
31
+ - 0
32
+ version: 3.0.0
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: patron
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - "="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ - 4
46
+ - 6
47
+ version: 0.4.6
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: tzinfo
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - "="
57
+ - !ruby/object:Gem::Version
58
+ segments:
59
+ - 0
60
+ - 3
61
+ - 22
62
+ version: 0.3.22
63
+ type: :runtime
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: remarkable_activemodel
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - "="
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 4
75
+ - 0
76
+ - 0
77
+ - alpha4
78
+ version: 4.0.0.alpha4
79
+ type: :development
80
+ version_requirements: *id004
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ prerelease: false
84
+ requirement: &id005 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - "="
88
+ - !ruby/object:Gem::Version
89
+ segments:
90
+ - 2
91
+ - 0
92
+ - 0
93
+ - beta
94
+ - 15
95
+ version: 2.0.0.beta.15
96
+ type: :development
97
+ version_requirements: *id005
98
+ - !ruby/object:Gem::Dependency
99
+ name: sinatra
100
+ prerelease: false
101
+ requirement: &id006 !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - "="
105
+ - !ruby/object:Gem::Version
106
+ segments:
107
+ - 1
108
+ - 0
109
+ version: "1.0"
110
+ type: :development
111
+ version_requirements: *id006
112
+ - !ruby/object:Gem::Dependency
113
+ name: vcr
114
+ prerelease: false
115
+ requirement: &id007 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - "="
119
+ - !ruby/object:Gem::Version
120
+ segments:
121
+ - 1
122
+ - 0
123
+ - 2
124
+ version: 1.0.2
125
+ type: :development
126
+ version_requirements: *id007
127
+ - !ruby/object:Gem::Dependency
128
+ name: webmock
129
+ prerelease: false
130
+ requirement: &id008 !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - "="
134
+ - !ruby/object:Gem::Version
135
+ segments:
136
+ - 1
137
+ - 3
138
+ - 0
139
+ version: 1.3.0
140
+ type: :development
141
+ version_requirements: *id008
142
+ description:
143
+ email:
144
+ executables: []
145
+
146
+ extensions: []
147
+
148
+ extra_rdoc_files: []
149
+
150
+ files:
151
+ - LICENSE
152
+ - lib/adapt/base.rb
153
+ - lib/adapt/common/client_details.rb
154
+ - lib/adapt/common/error_data.rb
155
+ - lib/adapt/common/error_parameter.rb
156
+ - lib/adapt/common/fault_message.rb
157
+ - lib/adapt/common/phone_number_type.rb
158
+ - lib/adapt/common/receiver.rb
159
+ - lib/adapt/common/receiver_list.rb
160
+ - lib/adapt/common/request_envelope.rb
161
+ - lib/adapt/common/response_envelope.rb
162
+ - lib/adapt/common.rb
163
+ - lib/adapt/methods/cancel_preapproval.rb
164
+ - lib/adapt/methods/convert_currency.rb
165
+ - lib/adapt/methods/execute_payment.rb
166
+ - lib/adapt/methods/get_payment_options.rb
167
+ - lib/adapt/methods/pay.rb
168
+ - lib/adapt/methods/payment_details.rb
169
+ - lib/adapt/methods/preapproval.rb
170
+ - lib/adapt/methods/preapproval_details.rb
171
+ - lib/adapt/methods/refund.rb
172
+ - lib/adapt/methods/set_payment_options.rb
173
+ - lib/adapt/methods.rb
174
+ - lib/adapt/service.rb
175
+ - lib/adapt.rb
176
+ has_rdoc: true
177
+ homepage: http://github.com/tylerhunt/adapt
178
+ licenses: []
179
+
180
+ post_install_message:
181
+ rdoc_options: []
182
+
183
+ require_paths:
184
+ - lib
185
+ required_ruby_version: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ segments:
191
+ - 0
192
+ version: "0"
193
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ segments:
199
+ - 0
200
+ version: "0"
201
+ requirements: []
202
+
203
+ rubyforge_project:
204
+ rubygems_version: 1.3.7
205
+ signing_key:
206
+ specification_version: 3
207
+ summary: An interface library for the PayPal Adaptive Payments service.
208
+ test_files: []
209
+