paymongo-ruby 0.1.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.
Files changed (33) hide show
  1. checksums.yaml +7 -0
  2. data/lib/paymongo/api_resource.rb +19 -0
  3. data/lib/paymongo/entities/attributes/payment_intents/next_action.rb +19 -0
  4. data/lib/paymongo/entities/base_entity.rb +6 -0
  5. data/lib/paymongo/entities/billing_entity.rb +28 -0
  6. data/lib/paymongo/entities/customer.rb +33 -0
  7. data/lib/paymongo/entities/event.rb +15 -0
  8. data/lib/paymongo/entities/link.rb +41 -0
  9. data/lib/paymongo/entities/listing.rb +13 -0
  10. data/lib/paymongo/entities/payment.rb +65 -0
  11. data/lib/paymongo/entities/payment_intent.rb +53 -0
  12. data/lib/paymongo/entities/payment_method.rb +27 -0
  13. data/lib/paymongo/entities/refund.rb +39 -0
  14. data/lib/paymongo/entities/webhook.rb +25 -0
  15. data/lib/paymongo/errors/authentication_error.rb +6 -0
  16. data/lib/paymongo/errors/base_error.rb +16 -0
  17. data/lib/paymongo/errors/invalid_request_error.rb +6 -0
  18. data/lib/paymongo/errors/resource_not_found_error.rb +6 -0
  19. data/lib/paymongo/errors/signature_verification_error.rb +6 -0
  20. data/lib/paymongo/errors/unexpected_value_error.rb +6 -0
  21. data/lib/paymongo/paymongo_client.rb +64 -0
  22. data/lib/paymongo/paymongo_config.rb +19 -0
  23. data/lib/paymongo/paymongo_error.rb +13 -0
  24. data/lib/paymongo/services/base_service.rb +19 -0
  25. data/lib/paymongo/services/customer.rb +41 -0
  26. data/lib/paymongo/services/link.rb +48 -0
  27. data/lib/paymongo/services/payment.rb +14 -0
  28. data/lib/paymongo/services/payment_intent.rb +50 -0
  29. data/lib/paymongo/services/payment_method.rb +23 -0
  30. data/lib/paymongo/services/refund.rb +23 -0
  31. data/lib/paymongo/services/webhook.rb +95 -0
  32. data/lib/paymongo-ruby.rb +52 -0
  33. metadata +73 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f6ebc6cac7b66d1658d51dfe8cc34d1c62121d987f87527b501886b52beab114
4
+ data.tar.gz: 16a276d50777ad10eb3dae0d65b785f7faea3e14a657370d150b6cf26d56442e
5
+ SHA512:
6
+ metadata.gz: dc08725eefb9f075784e6b931a72b0cdf152a844f57b76a8ef3cf3f51f3a1fc4e18400e48d1b820e1f1a426dcc0f5f5965fd13b7c1ee5eb4383c43cdd7ab35f4
7
+ data.tar.gz: 65aa2364e995de3ff3fc21fb12ac2f48ac84713419f34b1696174a94b72a3d429d24e6ca0a296e7fd6874e2c551b4afb0168592f801ef8598de6fb040e6717a1
@@ -0,0 +1,19 @@
1
+ module Paymongo
2
+ class ApiResource
3
+ attr_reader :id,
4
+ :attributes,
5
+ :data,
6
+ :has_more
7
+
8
+ def initialize(response)
9
+ @data = response['data'] || response
10
+
11
+ if @data.respond_to?(:has_key?) && @data.has_key?('attributes')
12
+ @id = @data['id']
13
+ @attributes = @data['attributes']
14
+ end
15
+
16
+ @has_more = response['has_more']
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Paymongo
2
+ module Entities
3
+ module Attributes
4
+ module PaymentIntents
5
+ class NextAction < PaymentIntent
6
+ attr_reader :redirect_url,
7
+ :redirect_return_url,
8
+ :type,
9
+
10
+ def initialize(data)
11
+ @redirect_return_url = data['redirect_return_url']
12
+ @redirect_url = data['redirect_url']
13
+ @type = data['type']
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,6 @@
1
+ module Paymongo
2
+ module Entities
3
+ class BaseEntity
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,28 @@
1
+ module Paymongo
2
+ module Entities
3
+ class BillingEntity < BaseEntity
4
+ attr_reader :id,
5
+ :address_city,
6
+ :address_country,
7
+ :address_line1,
8
+ :address_line2,
9
+ :address_postal_code,
10
+ :address_state,
11
+ :email,
12
+ :name,
13
+ :phone
14
+
15
+ def initialize(data)
16
+ @address_city = data['address']['city']
17
+ @address_country = data['address']['country']
18
+ @address_line1 = data['address']['line1']
19
+ @address_line2 = data['address']['line2']
20
+ @address_postal_code = data['address']['postal_code']
21
+ @address_state = data['address']['state']
22
+ @email = data['email']
23
+ @name = data['name']
24
+ @phone = data['phone']
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,33 @@
1
+ module Paymongo
2
+ module Entities
3
+ class Customer < BaseEntity
4
+ attr_reader :id,
5
+ :default_device,
6
+ :default_payment_method_id,
7
+ :deleted,
8
+ :email,
9
+ :first_name,
10
+ :last_name,
11
+ :livemode,
12
+ :phone,
13
+ :type,
14
+ :created_at,
15
+ :updated_at
16
+
17
+ def initialize(api_resource)
18
+ @id = api_resource.id
19
+ @default_device = api_resource.attributes['default_device']
20
+ @default_payment_method_id = api_resource.attributes['default_payment_method_id']
21
+ @deleted = api_resource.attributes['deleted']
22
+ @email = api_resource.attributes['email']
23
+ @first_name = api_resource.attributes['first_name']
24
+ @last_name = api_resource.attributes['last_name']
25
+ @livemode = api_resource.attributes['livemode']
26
+ @phone = api_resource.attributes['phone']
27
+ @type = api_resource.data['type']
28
+ @created_at = api_resource.attributes['created_at']
29
+ @updated_at = api_resource.attributes['updated_at']
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,15 @@
1
+ module Paymongo
2
+ module Entities
3
+ class Event < BaseEntity
4
+ attr_reader :id,
5
+ :resource,
6
+ :type
7
+
8
+ def initialize(api_resource)
9
+ @id = api_resource.id
10
+ @resource = api_resource.attributes['data']
11
+ @type = api_resource.attributes['type']
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,41 @@
1
+ module Paymongo
2
+ module Entities
3
+ class Link < BaseEntity
4
+ attr_reader :id,
5
+ :amount,
6
+ :archived,
7
+ :checkout_url,
8
+ :currency,
9
+ :description,
10
+ :fee,
11
+ :livemode,
12
+ :payments,
13
+ :reference_number,
14
+ :remarks,
15
+ :status,
16
+ :tax_amount,
17
+ :taxes,
18
+ :created_at,
19
+ :updated_at
20
+
21
+ def initialize(api_resource)
22
+ @id = api_resource.id
23
+ @amount = api_resource.attributes['amount']
24
+ @archived = api_resource.attributes['archived']
25
+ @checkout_url = api_resource.attributes['checkout_url']
26
+ @currency = api_resource.attributes['currency']
27
+ @description = api_resource.attributes['description']
28
+ @fee = api_resource.attributes['fee']
29
+ @livemode = api_resource.attributes['livemode']
30
+ @payments = api_resource.attributes['payments']
31
+ @reference_number = api_resource.attributes['reference_number']
32
+ @remarks = api_resource.attributes['remarks']
33
+ @status = api_resource.attributes['status']
34
+ @tax_amount = api_resource.attributes['tax_amount']
35
+ @taxes = api_resource.attributes['taxes']
36
+ @created_at = api_resource.attributes['created_at']
37
+ @updated_at = api_resource.attributes['updated_at']
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,13 @@
1
+ module Paymongo
2
+ module Entities
3
+ class Listing < BaseEntity
4
+ attr_reader :data,
5
+ :has_more
6
+
7
+ def initialize(data:, has_more:)
8
+ @data = data
9
+ @has_more = has_more
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,65 @@
1
+ module Paymongo
2
+ module Entities
3
+ class Payment < BaseEntity
4
+ attr_reader :id,
5
+ :access_url,
6
+ :amount,
7
+ :balance_transaction_id,
8
+ :billing,
9
+ :currency,
10
+ :description,
11
+ :disputed,
12
+ :external_reference_number,
13
+ :fee,
14
+ :foreign_fee,
15
+ :livemode,
16
+ :metadata,
17
+ :net_amount,
18
+ :origin,
19
+ :payment_intent_id,
20
+ :payout,
21
+ :refunds,
22
+ :source,
23
+ :statement_descriptor,
24
+ :status,
25
+ :tax_amount,
26
+ :taxes,
27
+ :available_at,
28
+ :created_at,
29
+ :credited_at,
30
+ :paid_at,
31
+ :updated_at
32
+
33
+ def initialize(api_resource)
34
+ @id = api_resource.id
35
+ @access_url = api_resource.attributes['access_url']
36
+ @amount = api_resource.attributes['amount']
37
+ @balance_transaction_id = api_resource.attributes['balance_transaction_id']
38
+ @billing = BillingEntity.new(api_resource.attributes['billing'])
39
+ @currency = api_resource.attributes['currency']
40
+ @description = api_resource.attributes['description']
41
+ @disputed = api_resource.attributes['disputed']
42
+ @external_reference_number = api_resource.attributes['external_reference_number']
43
+ @fee = api_resource.attributes['fee']
44
+ @foreign_fee = api_resource.attributes['foreign_fee']
45
+ @livemode = api_resource.attributes['livemode']
46
+ @metadata = api_resource.attributes['metadata']
47
+ @net_amount = api_resource.attributes['net_amount']
48
+ @origin = api_resource.attributes['origin']
49
+ @payment_intent_id = api_resource.attributes['payment_intent_id']
50
+ @payout = api_resource.attributes['payout']
51
+ @refunds = api_resource.attributes['refunds']
52
+ @source = api_resource.attributes['source']
53
+ @statement_descriptor = api_resource.attributes['statement_descriptor']
54
+ @status = api_resource.attributes['status']
55
+ @tax_amount = api_resource.attributes['tax_amount']
56
+ @taxes = api_resource.attributes['taxes']
57
+ @available_at = api_resource.attributes['available_at']
58
+ @created_at = api_resource.attributes['created_at']
59
+ @credited_at = api_resource.attributes['credited_at']
60
+ @paid_at = api_resource.attributes['paid_at']
61
+ @updated_at = api_resource.attributes['updated_at']
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,53 @@
1
+ module Paymongo
2
+ module Entities
3
+ class PaymentIntent < BaseEntity
4
+ attr_reader :id,
5
+ :amount,
6
+ :capture_type,
7
+ :client_key,
8
+ :currency,
9
+ :description,
10
+ :livemode,
11
+ :statement_descriptor,
12
+ :status,
13
+ :last_payment_error,
14
+ :payment_method,
15
+ :payment_method_allowed,
16
+ :payments,
17
+ :next_action,
18
+ :payment_method_options,
19
+ :metadata,
20
+ :setup_future_usage,
21
+ :created_at,
22
+ :updated_at
23
+
24
+ def initialize(api_resource)
25
+ @id = api_resource.id
26
+ @amount = api_resource.attributes['amount']
27
+ @capture_type = api_resource.attributes['capture_type']
28
+ @client_key = api_resource.attributes['client_key']
29
+ @currency = api_resource.attributes['currency']
30
+ @description = api_resource.attributes['description']
31
+ @livemode = api_resource.attributes['livemode']
32
+ @statement_descriptor = api_resource.attributes['statement_descriptor']
33
+ @status = api_resource.attributes['status']
34
+ @last_payment_error = api_resource.attributes['last_payment_error']
35
+ @payment_method_allowed = api_resource.attributes['payment_method_allowed']
36
+ @payments = api_resource.attributes['payments'] #TODO: ENG-21218 PayMongo-Ruby - Map payments attribute to array of payment entities
37
+ @next_action = next_action(api_resource.attributes['next_action'])
38
+ @payment_method = api_resource.attributes['payment_method']
39
+ @payment_method_options = api_resource.attributes['payment_method_options']
40
+ @metadata = api_resource.attributes['metadata']
41
+ @setup_future_usage = api_resource.attributes['setup_future_usage']
42
+ @created_at = api_resource.attributes['created_at']
43
+ @updated_at = api_resource.attributes['updated_at']
44
+ end
45
+
46
+ def next_action(data)
47
+ return nil if data.nil? || data.empty?
48
+
49
+ Attributes::PaymentIntents::NextAction.new(data)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,27 @@
1
+ module Paymongo
2
+ module Entities
3
+ class PaymentMethod < BaseEntity
4
+ attr_reader :id,
5
+ :billing,
6
+ :details,
7
+ :livemode,
8
+ :metadata,
9
+ :source_id,
10
+ :type,
11
+ :created_at,
12
+ :updated_at
13
+
14
+ def initialize(api_resource)
15
+ @id = api_resource.id
16
+ @billing = BillingEntity.new(api_resource.attributes['billing'])
17
+ @details = api_resource.attributes['details']
18
+ @livemode = api_resource.attributes['livemode']
19
+ @metadata = api_resource.attributes['metadata']
20
+ @source_id = api_resource.attributes['source_id']
21
+ @type = api_resource.attributes['type']
22
+ @created_at = api_resource.attributes['created_at']
23
+ @updated_at = api_resource.attributes['updated_at']
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,39 @@
1
+ module Paymongo
2
+ module Entities
3
+ class Refund < BaseEntity
4
+ attr_reader :id,
5
+ :amount,
6
+ :balance_transaction_id,
7
+ :currency,
8
+ :livemode,
9
+ :metadata,
10
+ :notes,
11
+ :payment_id,
12
+ :payout_id,
13
+ :reason,
14
+ :status,
15
+ :available_at,
16
+ :created_at,
17
+ :refunded_at,
18
+ :updated_at
19
+
20
+ def initialize(api_resource)
21
+ @id = api_resource.id
22
+ @amount = api_resource.attributes['amount']
23
+ @balance_transaction_id = api_resource.attributes['balance_transaction_id']
24
+ @currency = api_resource.attributes['currency']
25
+ @livemode = api_resource.attributes['livemode']
26
+ @metadata = api_resource.attributes['metadata']
27
+ @notes = api_resource.attributes['notes']
28
+ @payment_id = api_resource.attributes['payment_id']
29
+ @payout_id = api_resource.attributes['payout_id']
30
+ @reason = api_resource.attributes['reason']
31
+ @status = api_resource.attributes['status']
32
+ @available_at = api_resource.attributes['available_at']
33
+ @created_at = api_resource.attributes['created_at']
34
+ @refunded_at = api_resource.attributes['refunded_at']
35
+ @updated_at = api_resource.attributes['updated_at']
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ module Paymongo
2
+ module Entities
3
+ class Webhook < BaseEntity
4
+ attr_reader :id,
5
+ :events,
6
+ :livemode,
7
+ :status,
8
+ :secret_key,
9
+ :url,
10
+ :created_at,
11
+ :updated_at
12
+
13
+ def initialize(api_resource)
14
+ @id = api_resource.id
15
+ @events = api_resource.attributes['events']
16
+ @livemode = api_resource.attributes['livemode']
17
+ @status = api_resource.attributes['status']
18
+ @secret_key = api_resource.attributes['secret_key']
19
+ @url = api_resource.attributes['url']
20
+ @created_at = api_resource.attributes['created_at']
21
+ @updated_at = api_resource.attributes['updated_at']
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,6 @@
1
+ module Paymongo
2
+ module Errors
3
+ class AuthenticationError < BaseError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,16 @@
1
+ module Paymongo
2
+ module Errors
3
+ class BaseError < StandardError
4
+ attr_reader :data,
5
+ :errors
6
+
7
+ def initialize(data)
8
+ @data = data
9
+
10
+ @errors = data['errors'].map do |error|
11
+ PaymongoError.new(error)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ module Paymongo
2
+ module Errors
3
+ class InvalidRequestError < BaseError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Paymongo
2
+ module Errors
3
+ class ResourceNotFoundError < BaseError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Paymongo
2
+ module Errors
3
+ class SignatureVerificationError < StandardError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Paymongo
2
+ module Errors
3
+ class UnexpectedValueError < StandardError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,64 @@
1
+ module Paymongo
2
+ class PaymongoClient
3
+ def self.execute_request(method:, params: {}, path:)
4
+ uri = URI("#{Paymongo.config.api_base_url}/#{Paymongo.config.api_version}/#{path}")
5
+
6
+ request = self.initiate_request(method: method, params: params, uri: uri)
7
+
8
+ request.basic_auth Paymongo.config.api_key, ''
9
+
10
+ response = Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
11
+ http.request(request)
12
+ end
13
+
14
+ self.handle_error(response) unless self.successful?(response)
15
+
16
+ json_response_body = JSON.parse(response.body)
17
+
18
+ Paymongo::ApiResource.new(json_response_body)
19
+ end
20
+
21
+ private_class_method def self.handle_error(response)
22
+ json_response_body = JSON.parse(response.body)
23
+
24
+ case response.code
25
+ when '400'
26
+ raise Paymongo::Errors::InvalidRequestError.new(json_response_body)
27
+ when '401'
28
+ raise Paymongo::Errors::AuthenticationError.new(json_response_body)
29
+ when '404'
30
+ raise Paymongo::Errors::ResourceNotFoundError.new(json_response_body)
31
+ else
32
+ raise Paymongo::Errors::BaseError.new(json_response_body)
33
+ end
34
+ end
35
+
36
+ private_class_method def self.initiate_request(method:, params: {}, uri:)
37
+ case method
38
+ when :delete
39
+ request = Net::HTTP::Delete.new(uri)
40
+ when :get
41
+ unless params.empty?
42
+ encoded_params = URI.encode_www_form(params)
43
+ uri = [uri, encoded_params].join('?')
44
+ end
45
+
46
+ request = Net::HTTP::Get.new(uri)
47
+ when :post
48
+ request = Net::HTTP::Post.new(uri)
49
+ request.body = { data: { attributes: params } }.to_json
50
+ request.set_content_type('application/json')
51
+ when :put
52
+ request = Net::HTTP::Put.new(uri)
53
+ request.body = { data: { attributes: params } }.to_json
54
+ request.set_content_type('application/json')
55
+ end
56
+
57
+ request
58
+ end
59
+
60
+ private_class_method def self.successful?(response)
61
+ response.code == '200'
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,19 @@
1
+ module Paymongo
2
+ class PaymongoConfig
3
+ attr_accessor :api_key
4
+
5
+ attr_reader :api_base_url,
6
+ :api_version
7
+
8
+ def self.setup
9
+ new.tap do |instance|
10
+ yield(instance) if block_given?
11
+ end
12
+ end
13
+
14
+ def initialize
15
+ @api_base_url = 'https://api.paymongo.com'
16
+ @api_version = 'v1'
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ module Paymongo
2
+ class PaymongoError
3
+ attr_reader :code,
4
+ :detail,
5
+ :source
6
+
7
+ def initialize(error)
8
+ @code = error['code']
9
+ @detail = error['detail']
10
+ @source = error['source']
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ module Paymongo
2
+ class BaseService
3
+ def self.request(is_listing: false, method:, object:, path:, payload: {})
4
+ api_resource = Paymongo::PaymongoClient.execute_request(
5
+ method: method,
6
+ params: payload,
7
+ path: path
8
+ )
9
+
10
+ if is_listing
11
+ data = api_resource.data.map { |data| object.new(Paymongo::ApiResource.new(data)) }
12
+
13
+ Paymongo::Entities::Listing.new(data: data, has_more: api_resource.has_more)
14
+ else
15
+ object.new(api_resource)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,41 @@
1
+ module Paymongo
2
+ class Customer < BaseService
3
+ URI = 'customers'
4
+
5
+ def self.create(payload)
6
+ self.request(
7
+ method: :post,
8
+ object: Paymongo::Entities::Customer,
9
+ path: self::URI,
10
+ payload: payload
11
+ )
12
+ end
13
+
14
+ def self.delete(id)
15
+ self.request(
16
+ method: :delete,
17
+ object: Paymongo::Entities::Customer,
18
+ path: "#{self::URI}/#{id}",
19
+ payload: {}
20
+ )
21
+ end
22
+
23
+ def self.retrieve(id)
24
+ self.request(
25
+ method: :get,
26
+ object: Paymongo::Entities::Customer,
27
+ path: "#{self::URI}/#{id}",
28
+ payload: {}
29
+ )
30
+ end
31
+
32
+ def self.update(id, payload)
33
+ self.request(
34
+ method: :put,
35
+ object: Paymongo::Entities::Customer,
36
+ path: "#{self::URI}/#{id}",
37
+ payload: payload
38
+ )
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,48 @@
1
+ module Paymongo
2
+ class Link < BaseService
3
+ URI = 'links'
4
+
5
+ def self.all(payload)
6
+ self.request(
7
+ is_listing: true,
8
+ method: :get,
9
+ object: Paymongo::Entities::Link,
10
+ path: self::URI,
11
+ payload: payload
12
+ )
13
+ end
14
+
15
+ def self.archive(id)
16
+ self.request(
17
+ method: :post,
18
+ object: Paymongo::Entities::Link,
19
+ path: "#{self::URI}/#{id}/archive"
20
+ )
21
+ end
22
+
23
+ def self.create(payload)
24
+ self.request(
25
+ method: :post,
26
+ object: Paymongo::Entities::Link,
27
+ path: self::URI,
28
+ payload: payload
29
+ )
30
+ end
31
+
32
+ def self.retrieve(id)
33
+ self.request(
34
+ method: :get,
35
+ object: Paymongo::Entities::Link,
36
+ path: "#{self::URI}/#{id}"
37
+ )
38
+ end
39
+
40
+ def self.unarchive(id)
41
+ self.request(
42
+ method: :post,
43
+ object: Paymongo::Entities::Link,
44
+ path: "#{self::URI}/#{id}/unarchive"
45
+ )
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,14 @@
1
+ module Paymongo
2
+ class Payment < BaseService
3
+ URI = 'payments'
4
+
5
+ def self.retrieve(id)
6
+ self.request(
7
+ method: :get,
8
+ object: Paymongo::Entities::Payment,
9
+ path: "#{self::URI}/#{id}",
10
+ payload: {}
11
+ )
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,50 @@
1
+ module Paymongo
2
+ class PaymentIntent < BaseService
3
+ URI = 'payment_intents'
4
+
5
+ def self.attach(id, payload)
6
+ self.request(
7
+ method: :post,
8
+ object: Paymongo::Entities::PaymentIntent,
9
+ path: "#{self::URI}/#{id}/attach",
10
+ payload: payload
11
+ )
12
+ end
13
+
14
+ def self.cancel(id)
15
+ self.request(
16
+ method: :post,
17
+ object: Paymongo::Entities::PaymentIntent,
18
+ path: "#{self::URI}/#{id}/cancel",
19
+ payload: {}
20
+ )
21
+ end
22
+
23
+ def self.capture(id, payload)
24
+ self.request(
25
+ method: :post,
26
+ object: Paymongo::Entities::PaymentIntent,
27
+ path: "#{self::URI}/#{id}/capture",
28
+ payload: payload
29
+ )
30
+ end
31
+
32
+ def self.create(payload)
33
+ self.request(
34
+ method: :post,
35
+ object: Paymongo::Entities::PaymentIntent,
36
+ path: self::URI,
37
+ payload: payload
38
+ )
39
+ end
40
+
41
+ def self.retrieve(id)
42
+ self.request(
43
+ method: :get,
44
+ object: Paymongo::Entities::PaymentIntent,
45
+ path: "#{self::URI}/#{id}",
46
+ payload: {}
47
+ )
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,23 @@
1
+ module Paymongo
2
+ class PaymentMethod < BaseService
3
+ URI = 'payment_methods'
4
+
5
+ def self.create(payload)
6
+ self.request(
7
+ method: :post,
8
+ object: Paymongo::Entities::PaymentMethod,
9
+ path: self::URI,
10
+ payload: payload
11
+ )
12
+ end
13
+
14
+ def self.retrieve(id)
15
+ self.request(
16
+ method: :get,
17
+ object: Paymongo::Entities::PaymentMethod,
18
+ path: "#{self::URI}/#{id}",
19
+ payload: {}
20
+ )
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Paymongo
2
+ class Refund < BaseService
3
+ URI = 'refunds'
4
+
5
+ def self.create(payload)
6
+ self.request(
7
+ method: :post,
8
+ object: Paymongo::Entities::Refund,
9
+ path: self::URI,
10
+ payload: payload
11
+ )
12
+ end
13
+
14
+ def self.retrieve(id)
15
+ self.request(
16
+ method: :get,
17
+ object: Paymongo::Entities::Refund,
18
+ path: "#{self::URI}/#{id}",
19
+ payload: {}
20
+ )
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,95 @@
1
+ module Paymongo
2
+ class Webhook < BaseService
3
+ URI = 'webhooks'
4
+
5
+ def self.all()
6
+ self.request(
7
+ is_listing: true,
8
+ method: :get,
9
+ object: Paymongo::Entities::Webhook,
10
+ path: self::URI
11
+ )
12
+ end
13
+
14
+ def self.construct_event(payload:, signature_header:, webhook_secret_key:)
15
+ unless signature_header.is_a?(String)
16
+ raise Paymongo::Errors::UnexpectedValueError.new('The signature must be a string.')
17
+ end
18
+
19
+ signature_array = signature_header.split(',')
20
+
21
+ if signature_array.length < 3
22
+ raise Paymongo::Errors::UnexpectedValueError.new("The format of signature #{signature_header} is invalid.")
23
+ end
24
+
25
+ timestamp = signature_array[0].split('=')[1]
26
+ test_mode_signature = signature_array[1].split('=')[1]
27
+ live_mode_signature = signature_array[2].split('=')[1]
28
+
29
+ unless test_mode_signature.nil?
30
+ comparison_signature = test_mode_signature
31
+ end
32
+
33
+ unless live_mode_signature.nil?
34
+ comparison_signature = live_mode_signature
35
+ end
36
+
37
+ hash = OpenSSL::HMAC.hexdigest(
38
+ OpenSSL::Digest.new('sha256'),
39
+ webhook_secret_key,
40
+ "#{timestamp}.#{payload}"
41
+ )
42
+
43
+ if hash != comparison_signature
44
+ raise Paymongo::Errors::SignatureVerificationError.new('The signature is invalid.')
45
+ end
46
+
47
+ api_resource = Paymongo::ApiResource.new(JSON.parse(payload))
48
+
49
+ Paymongo::Entities::Event.new(api_resource)
50
+ end
51
+
52
+ def self.create(payload)
53
+ self.request(
54
+ method: :post,
55
+ object: Paymongo::Entities::Webhook,
56
+ path: self::URI,
57
+ payload: payload
58
+ )
59
+ end
60
+
61
+ def self.disable(id)
62
+ self.request(
63
+ method: :post,
64
+ object: Paymongo::Entities::Webhook,
65
+ path: "#{self::URI}/#{id}/disable"
66
+ )
67
+ end
68
+
69
+ def self.enable(id)
70
+ self.request(
71
+ method: :post,
72
+ object: Paymongo::Entities::Webhook,
73
+ path: "#{self::URI}/#{id}/enable"
74
+ )
75
+ end
76
+
77
+ def self.retrieve(id)
78
+ self.request(
79
+ method: :get,
80
+ object: Paymongo::Entities::Webhook,
81
+ path: "#{self::URI}/#{id}",
82
+ payload: {}
83
+ )
84
+ end
85
+
86
+ def self.update(id, payload)
87
+ self.request(
88
+ method: :put,
89
+ object: Paymongo::Entities::Webhook,
90
+ path: "#{self::URI}/#{id}",
91
+ payload: payload
92
+ )
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,52 @@
1
+ require 'json'
2
+ require 'net/http'
3
+ require 'forwardable'
4
+ require 'openssl'
5
+
6
+ require 'paymongo/entities/base_entity'
7
+ require 'paymongo/entities/billing_entity'
8
+ require 'paymongo/entities/customer'
9
+ require 'paymongo/entities/event'
10
+ require 'paymongo/entities/link'
11
+ require 'paymongo/entities/listing'
12
+ require 'paymongo/entities/payment'
13
+ require 'paymongo/entities/payment_intent'
14
+ require 'paymongo/entities/payment_method'
15
+ require 'paymongo/entities/refund'
16
+ require 'paymongo/entities/webhook'
17
+ require 'paymongo/entities/attributes/payment_intents/next_action'
18
+
19
+ require 'paymongo/errors/base_error'
20
+ require 'paymongo/errors/authentication_error'
21
+ require 'paymongo/errors/invalid_request_error'
22
+ require 'paymongo/errors/resource_not_found_error'
23
+ require 'paymongo/errors/signature_verification_error'
24
+ require 'paymongo/errors/unexpected_value_error'
25
+
26
+ require 'paymongo/api_resource'
27
+ require 'paymongo/paymongo_client'
28
+ require 'paymongo/paymongo_config'
29
+ require 'paymongo/paymongo_error'
30
+
31
+ require 'paymongo/services/base_service'
32
+ require 'paymongo/services/customer'
33
+ require 'paymongo/services/link'
34
+ require 'paymongo/services/payment'
35
+ require 'paymongo/services/payment_intent'
36
+ require 'paymongo/services/payment_method'
37
+ require 'paymongo/services/refund'
38
+ require 'paymongo/services/webhook'
39
+
40
+ module Paymongo
41
+ @config = Paymongo::PaymongoConfig.setup
42
+
43
+ class << self
44
+ extend Forwardable
45
+
46
+ attr_reader :config
47
+
48
+ def_delegators :@config, :api_key, :api_key=
49
+ def_delegators :@config, :api_base_url, :api_base_url=
50
+ def_delegators :@config, :api_version, :api_version=
51
+ end
52
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: paymongo-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - PayMongo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-02-22 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: PayMongo Ruby Library
14
+ email: support@paymongo.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/paymongo-ruby.rb
20
+ - lib/paymongo/api_resource.rb
21
+ - lib/paymongo/entities/attributes/payment_intents/next_action.rb
22
+ - lib/paymongo/entities/base_entity.rb
23
+ - lib/paymongo/entities/billing_entity.rb
24
+ - lib/paymongo/entities/customer.rb
25
+ - lib/paymongo/entities/event.rb
26
+ - lib/paymongo/entities/link.rb
27
+ - lib/paymongo/entities/listing.rb
28
+ - lib/paymongo/entities/payment.rb
29
+ - lib/paymongo/entities/payment_intent.rb
30
+ - lib/paymongo/entities/payment_method.rb
31
+ - lib/paymongo/entities/refund.rb
32
+ - lib/paymongo/entities/webhook.rb
33
+ - lib/paymongo/errors/authentication_error.rb
34
+ - lib/paymongo/errors/base_error.rb
35
+ - lib/paymongo/errors/invalid_request_error.rb
36
+ - lib/paymongo/errors/resource_not_found_error.rb
37
+ - lib/paymongo/errors/signature_verification_error.rb
38
+ - lib/paymongo/errors/unexpected_value_error.rb
39
+ - lib/paymongo/paymongo_client.rb
40
+ - lib/paymongo/paymongo_config.rb
41
+ - lib/paymongo/paymongo_error.rb
42
+ - lib/paymongo/services/base_service.rb
43
+ - lib/paymongo/services/customer.rb
44
+ - lib/paymongo/services/link.rb
45
+ - lib/paymongo/services/payment.rb
46
+ - lib/paymongo/services/payment_intent.rb
47
+ - lib/paymongo/services/payment_method.rb
48
+ - lib/paymongo/services/refund.rb
49
+ - lib/paymongo/services/webhook.rb
50
+ homepage: https://developers.paymongo.com/docs/introduction
51
+ licenses:
52
+ - MIT
53
+ metadata: {}
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubygems_version: 3.2.3
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: PayMongo Ruby
73
+ test_files: []