paypal-sdk-rest 1.7.4 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -14
- data/README.md +45 -251
- data/lib/lib.rb +88 -0
- data/lib/paypal/core/access_token.rb +20 -0
- data/lib/paypal/core/paypal_environment.rb +38 -0
- data/lib/paypal/core/paypal_http_client.rb +51 -0
- data/lib/paypal/core/token_requests.rb +40 -0
- data/lib/paypal/core/version.rb +3 -0
- data/lib/v1/billing_agreements/agreement_bill_balance_request.rb +35 -0
- data/lib/v1/billing_agreements/agreement_cancel_request.rb +35 -0
- data/lib/v1/billing_agreements/agreement_create_request.rb +33 -0
- data/lib/v1/billing_agreements/agreement_execute_request.rb +31 -0
- data/lib/v1/billing_agreements/agreement_get_request.rb +31 -0
- data/lib/v1/billing_agreements/agreement_re_activate_request.rb +35 -0
- data/lib/v1/billing_agreements/agreement_set_balance_request.rb +35 -0
- data/lib/v1/billing_agreements/agreement_suspend_request.rb +35 -0
- data/lib/v1/billing_agreements/agreement_transactions_request.rb +41 -0
- data/lib/v1/billing_agreements/agreement_update_request.rb +35 -0
- data/lib/v1/billing_plans/plan_create_request.rb +33 -0
- data/lib/v1/billing_plans/plan_get_request.rb +31 -0
- data/lib/v1/billing_plans/plan_list_request.rb +49 -0
- data/lib/v1/billing_plans/plan_update_request.rb +35 -0
- data/lib/v1/identity/user_consent.rb +45 -0
- data/lib/v1/identity/userinfo_get_request.rb +33 -0
- data/lib/v1/invoices/invoice_cancel_request.rb +35 -0
- data/lib/v1/invoices/invoice_create_request.rb +33 -0
- data/lib/v1/invoices/invoice_delete_external_payment_request.rb +33 -0
- data/lib/v1/invoices/invoice_delete_external_refund_request.rb +33 -0
- data/lib/v1/invoices/invoice_delete_request.rb +31 -0
- data/lib/v1/invoices/invoice_get_request.rb +31 -0
- data/lib/v1/invoices/invoice_list_request.rb +44 -0
- data/lib/v1/invoices/invoice_next_invoice_number_request.rb +29 -0
- data/lib/v1/invoices/invoice_qr_code_request.rb +46 -0
- data/lib/v1/invoices/invoice_record_payment_request.rb +35 -0
- data/lib/v1/invoices/invoice_record_refund_request.rb +35 -0
- data/lib/v1/invoices/invoice_remind_request.rb +35 -0
- data/lib/v1/invoices/invoice_search_request.rb +33 -0
- data/lib/v1/invoices/invoice_send_request.rb +36 -0
- data/lib/v1/invoices/invoice_update_request.rb +40 -0
- data/lib/v1/invoices/template_create_request.rb +33 -0
- data/lib/v1/invoices/template_delete_request.rb +31 -0
- data/lib/v1/invoices/template_get_request.rb +31 -0
- data/lib/v1/invoices/template_list_request.rb +34 -0
- data/lib/v1/invoices/template_update_request.rb +35 -0
- data/lib/v1/orders/orders_cancel_request.rb +31 -0
- data/lib/v1/orders/orders_create_request.rb +33 -0
- data/lib/v1/orders/orders_get_request.rb +31 -0
- data/lib/v1/orders/orders_pay_request.rb +35 -0
- data/lib/v1/payment_experience/web_profile_create_request.rb +33 -0
- data/lib/v1/payment_experience/web_profile_delete_request.rb +31 -0
- data/lib/v1/payment_experience/web_profile_get_request.rb +31 -0
- data/lib/v1/payment_experience/web_profile_list_request.rb +29 -0
- data/lib/v1/payment_experience/web_profile_partial_update_request.rb +35 -0
- data/lib/v1/payment_experience/web_profile_update_request.rb +35 -0
- data/lib/v1/payments/authorization_capture_request.rb +35 -0
- data/lib/v1/payments/authorization_get_request.rb +31 -0
- data/lib/v1/payments/authorization_reauthorize_request.rb +35 -0
- data/lib/v1/payments/authorization_void_request.rb +31 -0
- data/lib/v1/payments/capture_get_request.rb +31 -0
- data/lib/v1/payments/capture_refund_request.rb +35 -0
- data/lib/v1/payments/order_authorize_request.rb +35 -0
- data/lib/v1/payments/order_capture_request.rb +35 -0
- data/lib/v1/payments/order_get_request.rb +31 -0
- data/lib/v1/payments/order_void_request.rb +31 -0
- data/lib/v1/payments/payment_create_request.rb +33 -0
- data/lib/v1/payments/payment_execute_request.rb +35 -0
- data/lib/v1/payments/payment_get_request.rb +31 -0
- data/lib/v1/payments/payment_list_request.rb +69 -0
- data/lib/v1/payments/payment_update_request.rb +35 -0
- data/lib/v1/payments/refund_get_request.rb +31 -0
- data/lib/v1/payments/sale_get_request.rb +31 -0
- data/lib/v1/payments/sale_refund_request.rb +35 -0
- data/lib/v1/sync/search_get_request.rb +99 -0
- data/lib/v1/vault/credit_card_create_request.rb +33 -0
- data/lib/v1/vault/credit_card_delete_request.rb +31 -0
- data/lib/v1/vault/credit_card_get_request.rb +31 -0
- data/lib/v1/vault/credit_card_list_request.rb +79 -0
- data/lib/v1/vault/credit_card_update_request.rb +35 -0
- data/lib/v1/webhooks/available_event_type_list_request.rb +29 -0
- data/lib/v1/webhooks/event_get_request.rb +31 -0
- data/lib/v1/webhooks/event_list_request.rb +54 -0
- data/lib/v1/webhooks/event_resend_request.rb +35 -0
- data/lib/v1/webhooks/simulate_event_request.rb +33 -0
- data/lib/v1/webhooks/webhook_create_request.rb +33 -0
- data/lib/v1/webhooks/webhook_delete_request.rb +31 -0
- data/lib/v1/webhooks/webhook_get_request.rb +31 -0
- data/lib/v1/webhooks/webhook_list_event_subscriptions_request.rb +31 -0
- data/lib/v1/webhooks/webhook_list_request.rb +34 -0
- data/lib/v1/webhooks/webhook_update_request.rb +35 -0
- data/lib/v1/webhooks/webhook_verify_signature_request.rb +33 -0
- data/spec/integration/test_harness.rb +25 -0
- data/spec/integration/v1/billing_agreements/agreement_create_spec.rb +63 -0
- data/spec/integration/v1/billing_plans/plan_create_spec.rb +12 -0
- data/spec/integration/v1/billing_plans/plan_get_spec.rb +16 -0
- data/spec/integration/v1/billing_plans/plan_helper.rb +71 -0
- data/spec/integration/v1/billing_plans/plan_list_spec.rb +16 -0
- data/spec/integration/v1/billing_plans/plan_update_spec.rb +19 -0
- data/spec/integration/v1/identity/userinfo_get_spec.rb +65 -0
- data/spec/integration/v1/invoices/invoice_cancel_spec.rb +23 -0
- data/spec/integration/v1/invoices/invoice_create_spec.rb +15 -0
- data/spec/integration/v1/invoices/invoice_delete_external_payment_spec.rb +23 -0
- data/spec/integration/v1/invoices/invoice_delete_external_refund_spec.rb +21 -0
- data/spec/integration/v1/invoices/invoice_delete_spec.rb +16 -0
- data/spec/integration/v1/invoices/invoice_get_spec.rb +18 -0
- data/spec/integration/v1/invoices/invoice_helper.rb +171 -0
- data/spec/integration/v1/invoices/invoice_list_spec.rb +20 -0
- data/spec/integration/v1/invoices/invoice_next_invoice_number_spec.rb +14 -0
- data/spec/integration/v1/invoices/invoice_qr_code_spec.rb +18 -0
- data/spec/integration/v1/invoices/invoice_record_payment_spec.rb +14 -0
- data/spec/integration/v1/invoices/invoice_record_refund_spec.rb +14 -0
- data/spec/integration/v1/invoices/invoice_remind_spec.rb +22 -0
- data/spec/integration/v1/invoices/invoice_search_spec.rb +20 -0
- data/spec/integration/v1/invoices/invoice_send_spec.rb +15 -0
- data/spec/integration/v1/invoices/invoice_update_spec.rb +26 -0
- data/spec/integration/v1/invoices/template_create_spec.rb +14 -0
- data/spec/integration/v1/invoices/template_delete_spec.rb +15 -0
- data/spec/integration/v1/invoices/template_get_spec.rb +18 -0
- data/spec/integration/v1/invoices/template_list_spec.rb +15 -0
- data/spec/integration/v1/invoices/template_update_spec.rb +62 -0
- data/spec/integration/v1/orders/orders_cancel_spec.rb +15 -0
- data/spec/integration/v1/orders/orders_create_spec.rb +17 -0
- data/spec/integration/v1/orders/orders_get_spec.rb +18 -0
- data/spec/integration/v1/orders/orders_helper.rb +36 -0
- data/spec/integration/v1/orders/orders_pay_spec.rb +19 -0
- data/spec/integration/v1/payment_experience/pe_helper.rb +35 -0
- data/spec/integration/v1/payment_experience/web_profile_create_spec.rb +20 -0
- data/spec/integration/v1/payment_experience/web_profile_delete_spec.rb +15 -0
- data/spec/integration/v1/payment_experience/web_profile_get_spec.rb +17 -0
- data/spec/integration/v1/payment_experience/web_profile_list_spec.rb +18 -0
- data/spec/integration/v1/payment_experience/web_profile_partial_update_spec.rb +32 -0
- data/spec/integration/v1/payment_experience/web_profile_update_spec.rb +44 -0
- data/spec/integration/v1/payments/authorization_capture_spec.rb +17 -0
- data/spec/integration/v1/payments/authorization_get_spec.rb +18 -0
- data/spec/integration/v1/payments/authorization_reauthorize_spec.rb +26 -0
- data/spec/integration/v1/payments/authorization_void_spec.rb +19 -0
- data/spec/integration/v1/payments/capture_get_spec.rb +20 -0
- data/spec/integration/v1/payments/capture_refund_spec.rb +27 -0
- data/spec/integration/v1/payments/order_authorize_spec.rb +20 -0
- data/spec/integration/v1/payments/order_capture_spec.rb +21 -0
- data/spec/integration/v1/payments/order_get_spec.rb +14 -0
- data/spec/integration/v1/payments/order_void_spec.rb +14 -0
- data/spec/integration/v1/payments/payment_create_spec.rb +13 -0
- data/spec/integration/v1/payments/payment_execute_spec.rb +19 -0
- data/spec/integration/v1/payments/payment_get_spec.rb +17 -0
- data/spec/integration/v1/payments/payment_list_spec.rb +16 -0
- data/spec/integration/v1/payments/payment_update_spec.rb +28 -0
- data/spec/integration/v1/payments/payments_helper.rb +72 -0
- data/spec/integration/v1/payments/refund_get_spec.rb +19 -0
- data/spec/integration/v1/payments/sale_get_spec.rb +18 -0
- data/spec/integration/v1/payments/sale_refund_spec.rb +18 -0
- data/spec/integration/v1/sync/search_get_spec.rb +34 -0
- data/spec/integration/v1/vault/credit_card_create_spec.rb +16 -0
- data/spec/integration/v1/vault/credit_card_delete_spec.rb +16 -0
- data/spec/integration/v1/vault/credit_card_get_spec.rb +17 -0
- data/spec/integration/v1/vault/credit_card_list_spec.rb +18 -0
- data/spec/integration/v1/vault/credit_card_update_spec.rb +26 -0
- data/spec/integration/v1/vault/vault_helper.rb +28 -0
- data/spec/integration/v1/webhooks/available_event_type_list_spec.rb +16 -0
- data/spec/integration/v1/webhooks/webhook_create_spec.rb +12 -0
- data/spec/integration/v1/webhooks/webhook_delete_spec.rb +13 -0
- data/spec/integration/v1/webhooks/webhook_get_spec.rb +16 -0
- data/spec/integration/v1/webhooks/webhook_helper.rb +43 -0
- data/spec/integration/v1/webhooks/webhook_list_event_subscriptions_spec.rb +16 -0
- data/spec/integration/v1/webhooks/webhook_list_spec.rb +15 -0
- data/spec/integration/v1/webhooks/webhook_update_spec.rb +29 -0
- data/spec/integration/v1/webhooks/webhook_verify_signature_spec.rb +20 -0
- data/spec/spec_helper.rb +97 -28
- data/spec/unit/paypal_http_client_spec.rb +264 -0
- metadata +250 -120
- data/Rakefile +0 -15
- data/data/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/data/DigiCertSHA2ExtendedValidationServerCA.pem +0 -28
- data/data/paypal.crt +0 -171
- data/lib/generators/paypal/sdk/USAGE +0 -3
- data/lib/generators/paypal/sdk/install_generator.rb +0 -17
- data/lib/generators/paypal/sdk/templates/paypal.rb +0 -2
- data/lib/generators/paypal/sdk/templates/paypal.yml +0 -29
- data/lib/paypal-sdk-core.rb +0 -38
- data/lib/paypal-sdk-rest.rb +0 -2
- data/lib/paypal-sdk/core/api.rb +0 -20
- data/lib/paypal-sdk/core/api/base.rb +0 -169
- data/lib/paypal-sdk/core/api/data_types/array_with_block.rb +0 -44
- data/lib/paypal-sdk/core/api/data_types/base.rb +0 -225
- data/lib/paypal-sdk/core/api/data_types/enum.rb +0 -26
- data/lib/paypal-sdk/core/api/data_types/simple_types.rb +0 -52
- data/lib/paypal-sdk/core/api/ipn.rb +0 -66
- data/lib/paypal-sdk/core/api/rest.rb +0 -177
- data/lib/paypal-sdk/core/authentication.rb +0 -66
- data/lib/paypal-sdk/core/config.rb +0 -253
- data/lib/paypal-sdk/core/credential.rb +0 -16
- data/lib/paypal-sdk/core/credential/base.rb +0 -27
- data/lib/paypal-sdk/core/credential/certificate.rb +0 -32
- data/lib/paypal-sdk/core/credential/signature.rb +0 -22
- data/lib/paypal-sdk/core/credential/third_party/subject.rb +0 -25
- data/lib/paypal-sdk/core/credential/third_party/token.rb +0 -39
- data/lib/paypal-sdk/core/exceptions.rb +0 -112
- data/lib/paypal-sdk/core/logging.rb +0 -50
- data/lib/paypal-sdk/core/openid_connect.rb +0 -140
- data/lib/paypal-sdk/core/openid_connect/api.rb +0 -50
- data/lib/paypal-sdk/core/openid_connect/data_types.rb +0 -73
- data/lib/paypal-sdk/core/openid_connect/get_api.rb +0 -28
- data/lib/paypal-sdk/core/openid_connect/request_data_type.rb +0 -52
- data/lib/paypal-sdk/core/openid_connect/set_api.rb +0 -36
- data/lib/paypal-sdk/core/util.rb +0 -11
- data/lib/paypal-sdk/core/util/http_helper.rb +0 -171
- data/lib/paypal-sdk/core/util/oauth_signature.rb +0 -64
- data/lib/paypal-sdk/core/util/ordered_hash.rb +0 -165
- data/lib/paypal-sdk/rest.rb +0 -39
- data/lib/paypal-sdk/rest/api.rb +0 -23
- data/lib/paypal-sdk/rest/data_types.rb +0 -2597
- data/lib/paypal-sdk/rest/error_hash.rb +0 -39
- data/lib/paypal-sdk/rest/get_api.rb +0 -20
- data/lib/paypal-sdk/rest/request_data_type.rb +0 -53
- data/lib/paypal-sdk/rest/set_api.rb +0 -42
- data/lib/paypal-sdk/rest/version.rb +0 -7
- data/spec/README.md +0 -22
- data/spec/config/cacert.pem +0 -171
- data/spec/config/cert_key.pem +0 -33
- data/spec/config/paypal.yml +0 -35
- data/spec/config/sample_data.yml +0 -3
- data/spec/core/api/data_type_spec.rb +0 -289
- data/spec/core/api/rest_spec.rb +0 -211
- data/spec/core/config_spec.rb +0 -192
- data/spec/core/logging_spec.rb +0 -28
- data/spec/core/openid_connect_spec.rb +0 -153
- data/spec/invoice_examples_spec.rb +0 -38
- data/spec/payments_examples_spec.rb +0 -437
- data/spec/payouts_examples_spec.rb +0 -74
- data/spec/rest/data_types_spec.rb +0 -62
- data/spec/rest/error_hash_spec.rb +0 -83
- data/spec/subscription_examples_spec.rb +0 -227
- data/spec/support/sample_data.rb +0 -5
- data/spec/web_profile_examples_spec.rb +0 -106
- data/spec/webhooks_examples_spec.rb +0 -93
@@ -1,44 +0,0 @@
|
|
1
|
-
module PayPal::SDK::Core
|
2
|
-
module API
|
3
|
-
module DataTypes
|
4
|
-
# Create Array with block.
|
5
|
-
# === Example
|
6
|
-
# ary = ArrayWithBlock.new{|val| val.to_i }
|
7
|
-
# ary.push("123") # [ 123 ]
|
8
|
-
# ary.merge!(["1", "3"]) # [ 123, 1, 3 ]
|
9
|
-
class ArrayWithBlock < ::Array
|
10
|
-
def initialize(&block)
|
11
|
-
@block = block
|
12
|
-
super()
|
13
|
-
end
|
14
|
-
|
15
|
-
def [](key)
|
16
|
-
super(key) || send(:"[]=", key, nil)
|
17
|
-
end
|
18
|
-
|
19
|
-
def []=(key, value)
|
20
|
-
super(key, @block ? @block.call(value) : value)
|
21
|
-
end
|
22
|
-
|
23
|
-
def push(value)
|
24
|
-
super(@block ? @block.call(value) : value)
|
25
|
-
end
|
26
|
-
|
27
|
-
def merge!(array)
|
28
|
-
if array.is_a? Array
|
29
|
-
array.each do |object|
|
30
|
-
push(object)
|
31
|
-
end
|
32
|
-
elsif array.is_a? Hash and array.keys.first.to_s =~ /^\d+$/
|
33
|
-
array.each do |key, object|
|
34
|
-
self[key.to_i] = object
|
35
|
-
end
|
36
|
-
else
|
37
|
-
push(array)
|
38
|
-
end
|
39
|
-
self
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,225 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
|
3
|
-
module PayPal::SDK::Core
|
4
|
-
module API
|
5
|
-
|
6
|
-
module DataTypes
|
7
|
-
|
8
|
-
# Create attributes and restrict the object type.
|
9
|
-
# == Example
|
10
|
-
# class ConvertCurrencyRequest < Core::API::DataTypes::Base
|
11
|
-
# object_of :baseAmountList, CurrencyList
|
12
|
-
# object_of :convertToCurrencyList, CurrencyCodeList
|
13
|
-
# object_of :countryCode, String
|
14
|
-
# object_of :conversionType, String
|
15
|
-
# end
|
16
|
-
class Base
|
17
|
-
|
18
|
-
HashOptions = { :attribute => true, :namespace => true, :symbol => false }
|
19
|
-
ContentKey = :value
|
20
|
-
|
21
|
-
include SimpleTypes
|
22
|
-
include Logging
|
23
|
-
|
24
|
-
class << self
|
25
|
-
|
26
|
-
# Add attribute
|
27
|
-
# === Arguments
|
28
|
-
# * <tt>name</tt> -- attribute name
|
29
|
-
# * <tt>options</tt> -- options
|
30
|
-
def add_attribute(name, options = {})
|
31
|
-
add_member(name, SimpleTypes::String, options.merge( :attribute => true ))
|
32
|
-
end
|
33
|
-
|
34
|
-
# Fields list for the DataTye
|
35
|
-
def members
|
36
|
-
@members ||=
|
37
|
-
begin
|
38
|
-
superclass.load_members if defined? superclass.load_members
|
39
|
-
parent_members = superclass.instance_variable_get("@members")
|
40
|
-
parent_members ? parent_members.dup : Util::OrderedHash.new
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
# Add Field to class variable hash and generate methods
|
45
|
-
# === Example
|
46
|
-
# add_member(:errorMessage, String) # Generate Code
|
47
|
-
# # attr_reader :errorMessage
|
48
|
-
# # alias_method :error_message, :errorMessage
|
49
|
-
# # alias_method :error_message=, :errorMessage=
|
50
|
-
def add_member(member_name, klass, options = {})
|
51
|
-
member_name = member_name.to_sym
|
52
|
-
return if members[member_name]
|
53
|
-
members[member_name] = options.merge( :type => klass )
|
54
|
-
member_variable_name = "@#{member_name}"
|
55
|
-
define_method "#{member_name}=" do |value|
|
56
|
-
object = options[:array] ? convert_array(value, klass) : convert_object(value, klass)
|
57
|
-
instance_variable_set(member_variable_name, object)
|
58
|
-
end
|
59
|
-
default_value = ( options[:array] ? [] : ( klass < Base ? Util::OrderedHash.new : nil ) )
|
60
|
-
define_method member_name do |&block|
|
61
|
-
value = instance_variable_get(member_variable_name) || ( default_value && send("#{member_name}=", default_value) )
|
62
|
-
value.instance_eval(&block) if block
|
63
|
-
value
|
64
|
-
end
|
65
|
-
define_alias_methods(member_name, options)
|
66
|
-
end
|
67
|
-
|
68
|
-
# Define alias methods for getter and setter
|
69
|
-
def define_alias_methods(member_name, options)
|
70
|
-
snakecase_name = snakecase(member_name)
|
71
|
-
alias_method snakecase_name, member_name
|
72
|
-
alias_method "#{snakecase_name}=", "#{member_name}="
|
73
|
-
alias_method "#{options[:namespace]}:#{member_name}=", "#{member_name}=" if options[:namespace]
|
74
|
-
if options[:attribute]
|
75
|
-
alias_method "@#{member_name}=", "#{member_name}="
|
76
|
-
alias_method "@#{options[:namespace]}:#{member_name}=", "#{member_name}=" if options[:namespace]
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
# define method for given member and the class name
|
81
|
-
# === Example
|
82
|
-
# object_of(:errorMessage, ErrorMessage) # Generate Code
|
83
|
-
# # def errorMessage=(options)
|
84
|
-
# # @errorMessage = ErrorMessage.new(options)
|
85
|
-
# # end
|
86
|
-
# # add_member :errorMessage, ErrorMessage
|
87
|
-
def object_of(key, klass, options = {})
|
88
|
-
add_member(key, klass, options)
|
89
|
-
end
|
90
|
-
|
91
|
-
# define method for given member and the class name
|
92
|
-
# === Example
|
93
|
-
# array_of(:errorMessage, ErrorMessage) # It Generate below code
|
94
|
-
# # def errorMessage=(array)
|
95
|
-
# # @errorMessage = array.map{|options| ErrorMessage.new(options) }
|
96
|
-
# # end
|
97
|
-
# # add_member :errorMessage, ErrorMessage
|
98
|
-
def array_of(key, klass, options = {})
|
99
|
-
add_member(key, klass, options.merge(:array => true))
|
100
|
-
end
|
101
|
-
|
102
|
-
# Generate snakecase string.
|
103
|
-
# === Example
|
104
|
-
# snakecase("errorMessage")
|
105
|
-
# # error_message
|
106
|
-
def snakecase(string)
|
107
|
-
string.to_s.gsub(/([a-z])([A-Z])/, '\1_\2').gsub(/([A-Z])([A-Z][a-z])/, '\1_\2').downcase
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
111
|
-
|
112
|
-
# Initialize options.
|
113
|
-
def initialize(options = {}, &block)
|
114
|
-
merge!(options, &block)
|
115
|
-
end
|
116
|
-
|
117
|
-
# Merge values
|
118
|
-
def merge!(options, &block)
|
119
|
-
if options.is_a? Hash
|
120
|
-
options.each do |key, value|
|
121
|
-
set(key, value)
|
122
|
-
end
|
123
|
-
elsif members[ContentKey]
|
124
|
-
set(ContentKey, options)
|
125
|
-
else
|
126
|
-
raise ArgumentError, "invalid data(#{options.inspect}) for #{self.class.name} class"
|
127
|
-
end
|
128
|
-
self.instance_eval(&block) if block
|
129
|
-
self
|
130
|
-
end
|
131
|
-
|
132
|
-
# Set value for given member
|
133
|
-
# === Arguments
|
134
|
-
# * <tt>key</tt> -- member name
|
135
|
-
# * <tt>value</tt> -- value for member
|
136
|
-
def set(key, value)
|
137
|
-
send("#{key}=", value)
|
138
|
-
rescue NoMethodError => error
|
139
|
-
# Uncomment to see missing fields
|
140
|
-
# logger.debug error.message
|
141
|
-
rescue TypeError, ArgumentError => error
|
142
|
-
raise TypeError, "#{error.message}(#{value.inspect}) for #{self.class.name}.#{key} member"
|
143
|
-
end
|
144
|
-
|
145
|
-
# Create array of objects.
|
146
|
-
# === Example
|
147
|
-
# covert_array([{ :amount => "55", :code => "USD"}], CurrencyType)
|
148
|
-
# covert_array({ "0" => { :amount => "55", :code => "USD"} }, CurrencyType)
|
149
|
-
# covert_array({ :amount => "55", :code => "USD"}, CurrencyType)
|
150
|
-
# # @return
|
151
|
-
# # [ <CurrencyType#object @amount="55" @code="USD" > ]
|
152
|
-
def convert_array(array, klass)
|
153
|
-
default_value = ( klass < Base ? Util::OrderedHash.new : nil )
|
154
|
-
data_type_array = ArrayWithBlock.new{|object| convert_object(object || default_value, klass) }
|
155
|
-
data_type_array.merge!(array)
|
156
|
-
end
|
157
|
-
|
158
|
-
# Create object based on given data.
|
159
|
-
# === Example
|
160
|
-
# covert_object({ :amount => "55", :code => "USD"}, CurrencyType )
|
161
|
-
# # @return
|
162
|
-
# # <CurrencyType#object @amount="55" @code="USD" >
|
163
|
-
def convert_object(object, klass)
|
164
|
-
object.is_a?(klass) ? object : ( ( object.nil? or object == "" ) ? nil : klass.new(object) )
|
165
|
-
end
|
166
|
-
|
167
|
-
# Alias instance method for the class method.
|
168
|
-
def members
|
169
|
-
self.class.members
|
170
|
-
end
|
171
|
-
|
172
|
-
# Get configured member names
|
173
|
-
def member_names
|
174
|
-
members.keys
|
175
|
-
end
|
176
|
-
|
177
|
-
# Create Hash based configured members
|
178
|
-
def to_hash(options = {})
|
179
|
-
options = HashOptions.merge(options)
|
180
|
-
hash = Util::OrderedHash.new
|
181
|
-
member_names.each do |member|
|
182
|
-
value = value_to_hash(instance_variable_get("@#{member}"), options)
|
183
|
-
hash[hash_key(member, options)] = value unless skip_value?(value)
|
184
|
-
end
|
185
|
-
hash
|
186
|
-
end
|
187
|
-
|
188
|
-
# Skip nil, empty array and empty hash.
|
189
|
-
def skip_value?(value)
|
190
|
-
value.nil? || ( ( value.is_a?(Array) || value.is_a?(Hash) ) && value.empty? )
|
191
|
-
end
|
192
|
-
|
193
|
-
# Generate Hash key for given member name based on configuration
|
194
|
-
# === Example
|
195
|
-
# hash_key(:amount) # @return :"ebl:amount"
|
196
|
-
# hash_key(:type) # @return :"@type"
|
197
|
-
def hash_key(key, options = {})
|
198
|
-
unless key == ContentKey
|
199
|
-
member_option = members[key]
|
200
|
-
key = member_option[:name] if member_option.include? :name
|
201
|
-
if !member_option[:attribute] and member_option[:namespace] and options[:namespace]
|
202
|
-
key = "#{member_option[:namespace]}:#{key}"
|
203
|
-
end
|
204
|
-
key = "@#{key}" if member_option[:attribute] and options[:attribute]
|
205
|
-
end
|
206
|
-
options[:symbol] ? key.to_sym : key.to_s
|
207
|
-
end
|
208
|
-
|
209
|
-
# Covert the object to hash based on class.
|
210
|
-
def value_to_hash(value, options = {})
|
211
|
-
case value
|
212
|
-
when Array
|
213
|
-
value = value.map{|object| value_to_hash(object, options) }
|
214
|
-
value.delete_if{|v| skip_value?(v) }
|
215
|
-
value
|
216
|
-
when Base
|
217
|
-
value.to_hash(options)
|
218
|
-
else
|
219
|
-
value
|
220
|
-
end
|
221
|
-
end
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module PayPal::SDK::Core
|
2
|
-
module API
|
3
|
-
module DataTypes
|
4
|
-
|
5
|
-
class Enum < SimpleTypes::String
|
6
|
-
class << self
|
7
|
-
def options
|
8
|
-
@options ||= []
|
9
|
-
end
|
10
|
-
|
11
|
-
def options=(options)
|
12
|
-
if options.is_a? Hash
|
13
|
-
options.each do |const_name, value|
|
14
|
-
const_set(const_name, value)
|
15
|
-
end
|
16
|
-
@options = options.values
|
17
|
-
else
|
18
|
-
@options = options
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
|
3
|
-
module PayPal::SDK::Core
|
4
|
-
module API
|
5
|
-
module DataTypes
|
6
|
-
|
7
|
-
module SimpleTypes
|
8
|
-
class String < ::String
|
9
|
-
def self.new(string = "")
|
10
|
-
string.is_a?(::String) ? super : super(string.to_s)
|
11
|
-
end
|
12
|
-
|
13
|
-
def to_yaml_type
|
14
|
-
"!tag:yaml.org,2002:str"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
class Integer < ::Integer
|
19
|
-
def self.new(number)
|
20
|
-
number.to_i
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class Float < ::Float
|
25
|
-
def self.new(float)
|
26
|
-
float.to_f
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class Boolean
|
31
|
-
def self.new(boolean)
|
32
|
-
( boolean == 0 || boolean == "" || boolean =~ /^(false|f|no|n|0)$/i ) ? false : !!boolean
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
class Date < ::Date
|
37
|
-
def self.new(date)
|
38
|
-
date.is_a?(::Date) ? date : Date.parse(date.to_s)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
class DateTime < ::DateTime
|
43
|
-
def self.new(date_time)
|
44
|
-
date_time = "0001-01-01T00:00:00" if date_time.to_s == "0"
|
45
|
-
date_time.is_a?(::DateTime) ? date_time : parse(date_time.to_s)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
module PayPal
|
2
|
-
module SDK
|
3
|
-
module Core
|
4
|
-
module API
|
5
|
-
module IPN
|
6
|
-
|
7
|
-
END_POINTS = {
|
8
|
-
:sandbox => "https://www.sandbox.paypal.com/cgi-bin/webscr",
|
9
|
-
:live => "https://ipnpb.paypal.com/cgi-bin/webscr"
|
10
|
-
}
|
11
|
-
VERIFIED = "VERIFIED"
|
12
|
-
INVALID = "INVALID"
|
13
|
-
|
14
|
-
class Message
|
15
|
-
include Util::HTTPHelper
|
16
|
-
|
17
|
-
attr_accessor :message
|
18
|
-
|
19
|
-
def initialize(message, env = nil, options = {})
|
20
|
-
@message = message
|
21
|
-
set_config(env, options)
|
22
|
-
end
|
23
|
-
|
24
|
-
# Fetch end point
|
25
|
-
def ipn_endpoint
|
26
|
-
config.ipn_endpoint || default_ipn_endpoint
|
27
|
-
end
|
28
|
-
|
29
|
-
# Default IPN end point
|
30
|
-
def default_ipn_endpoint
|
31
|
-
endpoint = END_POINTS[(config.mode || :sandbox).to_sym] rescue nil
|
32
|
-
endpoint || END_POINTS[:sandbox]
|
33
|
-
end
|
34
|
-
|
35
|
-
# Request IPN service for validating the content
|
36
|
-
# === Return
|
37
|
-
# return http response object
|
38
|
-
def request
|
39
|
-
uri = URI(ipn_endpoint)
|
40
|
-
query_string = "cmd=_notify-validate&#{message}"
|
41
|
-
http_call(:method => :post, :uri => uri, :body => query_string)
|
42
|
-
end
|
43
|
-
|
44
|
-
# Validate the given content
|
45
|
-
# === Return
|
46
|
-
# return true or false
|
47
|
-
def valid?
|
48
|
-
request.body == VERIFIED
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
class << self
|
53
|
-
def valid?(*args)
|
54
|
-
Message.new(*args).valid?
|
55
|
-
end
|
56
|
-
|
57
|
-
def request(*args)
|
58
|
-
Message.new(*args).request
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,177 +0,0 @@
|
|
1
|
-
require 'multi_json'
|
2
|
-
|
3
|
-
module PayPal::SDK::Core
|
4
|
-
module API
|
5
|
-
class REST < Base
|
6
|
-
NVP_AUTH_HEADER = {
|
7
|
-
:sandbox_email_address => "X-PAYPAL-SANDBOX-EMAIL-ADDRESS",
|
8
|
-
:device_ipaddress => "X-PAYPAL-DEVICE-IPADDRESS"
|
9
|
-
}
|
10
|
-
DEFAULT_HTTP_HEADER = {
|
11
|
-
"Content-Type" => "application/json"
|
12
|
-
}
|
13
|
-
|
14
|
-
DEFAULT_REST_END_POINTS = {
|
15
|
-
:sandbox => "https://api.sandbox.paypal.com",
|
16
|
-
:live => "https://api.paypal.com",
|
17
|
-
}
|
18
|
-
TOKEN_REQUEST_PARAMS = "grant_type=client_credentials"
|
19
|
-
|
20
|
-
# Get REST service end point
|
21
|
-
def service_endpoint
|
22
|
-
config.rest_endpoint || super || DEFAULT_REST_END_POINTS[api_mode]
|
23
|
-
end
|
24
|
-
|
25
|
-
# Token endpoint
|
26
|
-
def token_endpoint
|
27
|
-
config.rest_token_endpoint || service_endpoint
|
28
|
-
end
|
29
|
-
|
30
|
-
# Clear cached values.
|
31
|
-
def set_config(*args)
|
32
|
-
@token_uri = nil
|
33
|
-
@token_hash = nil
|
34
|
-
super
|
35
|
-
end
|
36
|
-
|
37
|
-
# URI object token endpoint
|
38
|
-
def token_uri
|
39
|
-
@token_uri ||=
|
40
|
-
begin
|
41
|
-
new_uri = URI.parse(token_endpoint)
|
42
|
-
new_uri.path = "/v1/oauth2/token" if new_uri.path =~ /^\/?$/
|
43
|
-
new_uri
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# Generate Oauth token or Get cached
|
48
|
-
def token_hash(auth_code=nil, headers=nil)
|
49
|
-
validate_token_hash
|
50
|
-
@token_hash ||=
|
51
|
-
begin
|
52
|
-
@token_request_at = Time.now
|
53
|
-
basic_auth = ["#{config.client_id}:#{config.client_secret}"].pack('m').delete("\r\n")
|
54
|
-
token_headers = default_http_header.merge({
|
55
|
-
"Content-Type" => "application/x-www-form-urlencoded",
|
56
|
-
"Authorization" => "Basic #{basic_auth}" }).merge(headers)
|
57
|
-
if auth_code != nil
|
58
|
-
TOKEN_REQUEST_PARAMS.replace "grant_type=authorization_code&response_type=token&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&code="
|
59
|
-
TOKEN_REQUEST_PARAMS << auth_code
|
60
|
-
end
|
61
|
-
response = http_call( :method => :post, :uri => token_uri, :body => TOKEN_REQUEST_PARAMS, :header => token_headers )
|
62
|
-
MultiJson.load(response.body, :symbolize_keys => true)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
attr_writer :token_hash
|
66
|
-
|
67
|
-
# Get access token
|
68
|
-
def token(auth_code=nil, headers={})
|
69
|
-
token_hash(auth_code, headers)[:access_token]
|
70
|
-
end
|
71
|
-
|
72
|
-
# Get access token type
|
73
|
-
def token_type(headers={})
|
74
|
-
token_hash(nil, headers)[:token_type] || "Bearer"
|
75
|
-
end
|
76
|
-
|
77
|
-
# token setter
|
78
|
-
def token=(new_token)
|
79
|
-
@token_hash = { :access_token => new_token, :token_type => "Bearer" }
|
80
|
-
end
|
81
|
-
|
82
|
-
# Check token expired or not
|
83
|
-
def validate_token_hash
|
84
|
-
if @token_request_at and
|
85
|
-
@token_hash and @token_hash[:expires_in] and
|
86
|
-
(Time.now - @token_request_at) > @token_hash[:expires_in].to_i
|
87
|
-
@token_hash = nil
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
# Override the API call to handle Token Expire
|
92
|
-
def api_call(payload)
|
93
|
-
backup_payload = payload.dup
|
94
|
-
begin
|
95
|
-
response = super(payload)
|
96
|
-
rescue UnauthorizedAccess => error
|
97
|
-
if @token_hash and config.client_id
|
98
|
-
# Reset cached token and Retry api request
|
99
|
-
@token_hash = nil
|
100
|
-
response = super(backup_payload)
|
101
|
-
else
|
102
|
-
raise error
|
103
|
-
end
|
104
|
-
end
|
105
|
-
response
|
106
|
-
end
|
107
|
-
|
108
|
-
# Validate HTTP response
|
109
|
-
def handle_response(response)
|
110
|
-
super
|
111
|
-
rescue BadRequest => error
|
112
|
-
# Catch BadRequest to get validation error message from the response.
|
113
|
-
error.response
|
114
|
-
end
|
115
|
-
|
116
|
-
# Format request payload
|
117
|
-
# === Argument
|
118
|
-
# * payload( uri, action, params, header)
|
119
|
-
# === Generate
|
120
|
-
# * payload( uri, body, header )
|
121
|
-
def format_request(payload)
|
122
|
-
# Request URI
|
123
|
-
payload[:uri].path = url_join(payload[:uri].path, payload[:action])
|
124
|
-
# HTTP Header
|
125
|
-
credential_properties = credential(payload[:uri].to_s).properties
|
126
|
-
header = map_header_value(NVP_AUTH_HEADER, credential_properties)
|
127
|
-
payload[:header] = header.merge("Authorization" => "#{token_type(payload[:header])} #{token(nil, payload[:header])}").
|
128
|
-
merge(DEFAULT_HTTP_HEADER).merge(payload[:header])
|
129
|
-
# Post Data
|
130
|
-
payload[:body] = MultiJson.dump(payload[:params])
|
131
|
-
payload
|
132
|
-
end
|
133
|
-
|
134
|
-
# Format response payload
|
135
|
-
# === Argument
|
136
|
-
# * payload( response )
|
137
|
-
# === Generate
|
138
|
-
# * payload( data )
|
139
|
-
def format_response(payload)
|
140
|
-
response = payload[:response]
|
141
|
-
payload[:data] =
|
142
|
-
if response.body && response.body.strip == ""
|
143
|
-
{}
|
144
|
-
elsif response.code >= "200" and response.code <= "299"
|
145
|
-
response.body && response.content_type == "application/json" ? MultiJson.load(response.body) : {}
|
146
|
-
elsif response.content_type == "application/json"
|
147
|
-
{ "error" => flat_hash(MultiJson.load(response.body)) }
|
148
|
-
else
|
149
|
-
{ "error" => { "name" => response.code, "message" => response.message,
|
150
|
-
"developer_msg" => response } }
|
151
|
-
end
|
152
|
-
payload
|
153
|
-
end
|
154
|
-
|
155
|
-
def flat_hash(h)
|
156
|
-
new_hash = {}
|
157
|
-
h.each_pair do |key, val|
|
158
|
-
if val.is_a?(Hash)
|
159
|
-
new_hash.merge!(flat_hash(val))
|
160
|
-
else
|
161
|
-
new_hash[key] = val
|
162
|
-
end
|
163
|
-
end
|
164
|
-
new_hash
|
165
|
-
end
|
166
|
-
|
167
|
-
# Log PayPal-Request-Id header
|
168
|
-
def log_http_call(payload)
|
169
|
-
if payload[:header] and payload[:header]["PayPal-Request-Id"]
|
170
|
-
logger.info "PayPal-Request-Id: #{payload[:header]["PayPal-Request-Id"]}"
|
171
|
-
end
|
172
|
-
super
|
173
|
-
end
|
174
|
-
|
175
|
-
end
|
176
|
-
end
|
177
|
-
end
|