bckbn 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a998e53954c06ebed88798f74e96ca31f07cc7101d0f6f2ef3977eeb993cbac5
4
- data.tar.gz: 4e1650c6ba365f4fcf3f09fec35755593e7ee0c780c433f17495a9d43bf6cc6b
3
+ metadata.gz: a0ca96c3fc5d996a2aaebd4cc4aac9f60ca402d9c2ec29433dae8d5b0122046a
4
+ data.tar.gz: 0f9fcd4614259605cdfbabe9f10c9055d7eaa6abfc7f9961de259e068faf05f1
5
5
  SHA512:
6
- metadata.gz: 8046e28f4a9793a33049f63964b87afe600cc6e9fcbae5252d99789f00dde42e7a57a3bdea96019a4478ca93d0a0788b1f7e48994394018511f6749db9c81bf9
7
- data.tar.gz: 5ceb54a6645ac7d44952b12bb5d5ca6c8d3cb385093666632a315d8d8a77f0370af8173634eb194030a1b45efd25e5a66c58781b90bbcff80c0610bdc639c790
6
+ metadata.gz: a3b0877e7df14c379566ae33ce5217466eb0d5de7736b287a7a77234ed68c7c2b2ca99e0c59195a1e50909b756ce0f46431d5203440737af1ee92e36eaf8a058
7
+ data.tar.gz: c50a35535995759cbe68c1ab5c356254820bcb8f82c14f5106d5c9bf70713a7f85a7a36459bb942f9f0844c57bfa59a3d3e64782aca9eb85e2289517eb29cf09
data/.irbrc CHANGED
@@ -76,3 +76,66 @@ Bckbn.merchant_id = "101"
76
76
  "order_id": "5234234",
77
77
  "order_source": "ecommerce"
78
78
  }.freeze
79
+
80
+ @charge = {
81
+ amount: 500_000_000,
82
+ description: "JulyFees",
83
+ source: {
84
+ type: "bank",
85
+ bank: {
86
+ routing_number: "021200339",
87
+ account_number: "6546543213",
88
+ account_type: "Checking",
89
+ name: "Glenn Quagmire"
90
+ }
91
+ }
92
+ }
93
+
94
+ @payout = {
95
+ amount: 2500,
96
+ description: "JulyFees",
97
+ destination: {
98
+ type: "bank",
99
+ bank: {
100
+ routing_number: "021200339",
101
+ account_number: "6546543213",
102
+ account_type: "Checking",
103
+ name: "Glenn Quagmire"
104
+ }
105
+ }
106
+ }
107
+
108
+ # @originate_batch_body = {
109
+ # "payments": [{
110
+ # "account_number": "2654377916",
111
+ # "receiver": {
112
+ # "routing_number": "021200339",
113
+ # "account_number": "6546543213",
114
+ # "account_type": "Checking",
115
+ # "name": "Glenn Quagmire",
116
+ # "identification": "XYZ123"
117
+ # },
118
+ # "sec_code": "PPD",
119
+ # "description": "JulyFees",
120
+ # "transaction_type": "Push",
121
+ # "amount": 25_000,
122
+ # "purpose": "sample payment",
123
+ # "service_type": "Standard"
124
+ # },
125
+ # {
126
+ # "account_number": "2654377916",
127
+ # "receiver": {
128
+ # "routing_number": "021200339",
129
+ # "account_number": "6546543213",
130
+ # "account_type": "Checking",
131
+ # "name": "Pam Anderson",
132
+ # "identification": "ABCDEFG"
133
+ # },
134
+ # "sec_code": "PPD",
135
+ # "description": "JulyFees",
136
+ # "transaction_type": "Push",
137
+ # "amount": 33_333,
138
+ # "purpose": "sample payment",
139
+ # "service_type": "Standard"
140
+ # }]
141
+ # }
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.2.1
2
+
3
+ - Add first iteration of charge resource
4
+
1
5
  ## 0.2.0
2
6
 
3
7
  - Add support for `debug` and `error` log levels
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bckbn (2.0.0)
4
+ bckbn (2.1.0)
5
+ addressable (~> 2.8.5)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
@@ -41,6 +41,31 @@ module Bckbn
41
41
  bckbn_headers.each { |k, v| request[k] = v }
42
42
  request.body = body.to_json
43
43
 
44
+ response_handler(url, request) do |response, rbody|
45
+ case response
46
+ when Net::HTTPSuccess
47
+ data = rbody.fetch("data")
48
+ log(:debug, "\nResponse: #{data.to_json}")
49
+ klass.new(**data, logs: @logs)
50
+ else
51
+ err_klass = ERRORS[response.class]
52
+ message = "Error: #{rbody ? rbody["errors"] : "Unknown"}"
53
+ log(:error, message)
54
+ err = err_klass.new(message, @logs)
55
+ raise err
56
+ end
57
+ end
58
+ end
59
+
60
+ def get_from_api(path, klass)
61
+ log(:debug, "GET #{path}\n")
62
+
63
+ url = URI.parse(config.api_base + path)
64
+ request = Net::HTTP::Get.new(url.path)
65
+ bckbn_headers = headers(config)
66
+ bckbn_headers.reject! { |_, v| v.nil? || v == "" }
67
+ bckbn_headers.each { |k, v| request[k] = v }
68
+
44
69
  response_handler(url, request) do |response, rbody|
45
70
  case response
46
71
  when Net::HTTPSuccess
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bckbn
4
+ module Charge
5
+ ENDPOINTS = {
6
+ all: "/charges",
7
+ create: "/charges",
8
+ get: "/charges/{id}"
9
+ }.freeze
10
+ private_constant :ENDPOINTS
11
+
12
+ def self.all(config = {})
13
+ path = ENDPOINTS.fetch(__method__)
14
+ @conn = Bckbn::Connection.new(config)
15
+ @conn.get_from_api(path, ChargesResponse)
16
+ end
17
+
18
+ def self.create(body, config = {})
19
+ body = CreateChargeRequest.new(body)
20
+ @conn = Bckbn::Connection.new(config)
21
+ @conn.post_to_api(ENDPOINTS.fetch(__method__), body.to_h, ChargeResponse)
22
+ end
23
+
24
+ def self.get(id, config = {})
25
+ path = Addressable::Template.new(ENDPOINTS.fetch(__method__)).expand(id: id)
26
+ @conn = Bckbn::Connection.new(config)
27
+ @conn.get_from_api(path, ChargeResponse)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bckbn
4
+ module Charge
5
+ CREATE_CHARGE_REQUEST_MEMBERS = %i[
6
+ amount
7
+ description
8
+ source
9
+ ].freeze
10
+
11
+ CreateChargeRequest = Struct.new(*CREATE_CHARGE_REQUEST_MEMBERS, keyword_init: true)
12
+ end
13
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bckbn
4
+ module Charge
5
+ using Bckbn::CoreExt::StringExt
6
+
7
+ CHARGE_RESPONSE_MEMBERS = %i[
8
+ id
9
+ amount
10
+ direction
11
+ posting
12
+ posting_code
13
+ posting_type
14
+ status
15
+ transaction_type
16
+ logs
17
+ ].freeze
18
+
19
+ CHARGES_RESPONSE_MEMBERS = %i[
20
+ charges
21
+ page_number
22
+ page_size
23
+ has_previous_page
24
+ has_next_page
25
+ logs
26
+ ].freeze
27
+
28
+ private_constant :CHARGE_RESPONSE_MEMBERS
29
+
30
+ ChargeResponse = Struct.new(*CHARGE_RESPONSE_MEMBERS, keyword_init: true)
31
+
32
+ ChargesResponse = Struct.new(*CHARGES_RESPONSE_MEMBERS, keyword_init: true) do
33
+ def initialize(**opts)
34
+ charges = opts.delete("charges")
35
+ super(opts)
36
+ self.charges = charges.map { |c| ChargeResponse.new(c) }
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bckbn
4
+ module Transaction
5
+ MEMBERS = %i[
6
+ account_number
7
+ receiver
8
+ sec_code
9
+ description
10
+ transaction_type
11
+ amount
12
+ service_type
13
+ purpose
14
+ client_identifier
15
+ ].freeze
16
+
17
+ Payment = Struct.new(*MEMBERS, keyword_init: true) do
18
+ def initialize(opts)
19
+ valid_opts = opts.slice(*members)
20
+ valid_opts.each { |key, value| public_send("#{key}=", value) }
21
+ end
22
+ end
23
+ end
24
+ end
data/lib/bckbn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bckbn
4
- VERSION = "2.0.0"
4
+ VERSION = "2.1.0"
5
5
  end
data/lib/bckbn.rb CHANGED
@@ -4,6 +4,7 @@ require "json"
4
4
  require "forwardable"
5
5
  require "logger"
6
6
  require "net/http"
7
+ require "addressable"
7
8
  require "bckbn/version"
8
9
  require "bckbn/configuration"
9
10
  require "bckbn/core_ext"
@@ -14,6 +15,11 @@ require "bckbn/resources/transaction/models/echeck"
14
15
  require "bckbn/resources/transaction/models/billing_address"
15
16
  require "bckbn/resources/transaction/models/requests"
16
17
  require "bckbn/resources/transaction/models/responses"
18
+ require "bckbn/resources/transaction/models/payment"
19
+
20
+ require "bckbn/resources/charge/api"
21
+ require "bckbn/resources/charge/models/requests"
22
+ require "bckbn/resources/charge/models/responses"
17
23
 
18
24
  module Bckbn
19
25
  @config = Bckbn::Configuration.setup
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bckbn
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nikkypx
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-20 00:00:00.000000000 Z
11
+ date: 2023-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: addressable
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.8.5
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.8.5
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: faker
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -100,11 +114,15 @@ files:
100
114
  - lib/bckbn/configuration.rb
101
115
  - lib/bckbn/connection.rb
102
116
  - lib/bckbn/core_ext.rb
117
+ - lib/bckbn/resources/charge/api.rb
118
+ - lib/bckbn/resources/charge/models/requests.rb
119
+ - lib/bckbn/resources/charge/models/responses.rb
103
120
  - lib/bckbn/resources/transaction/api.rb
104
121
  - lib/bckbn/resources/transaction/models/billing_address.rb
105
122
  - lib/bckbn/resources/transaction/models/card.rb
106
123
  - lib/bckbn/resources/transaction/models/cardholder_authentication.rb
107
124
  - lib/bckbn/resources/transaction/models/echeck.rb
125
+ - lib/bckbn/resources/transaction/models/payment.rb
108
126
  - lib/bckbn/resources/transaction/models/requests.rb
109
127
  - lib/bckbn/resources/transaction/models/responses.rb
110
128
  - lib/bckbn/version.rb