fawry 0.1.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest'
4
+
5
+ module Fawry
6
+ module Requests
7
+ module PaymentStatusRequest
8
+ def fire_payment_status_request
9
+ fawry_api_response = Connection.get(request[:path], request[:params], request[:body], request[:options])
10
+ response_body = JSON.parse(fawry_api_response.body)
11
+
12
+ FawryResponse.new(response_body)
13
+ end
14
+
15
+ private
16
+
17
+ def build_payment_status_request
18
+ {
19
+ path: 'payments/status',
20
+ params: payment_status_request_transformed_params,
21
+ body: {},
22
+ options: options
23
+ }
24
+ end
25
+
26
+ def request_params
27
+ @request_params = params
28
+ end
29
+
30
+ def payment_status_request_transformed_params
31
+ {
32
+ merchantCode: fawry_merchant_code,
33
+ merchantRefNumber: request_params[:merchant_ref_number],
34
+ signature: payment_status_request_signature
35
+ }.compact
36
+ end
37
+
38
+ def fawry_merchant_code
39
+ ENV.fetch('FAWRY_MERCHANT_CODE') { request_params[:merchant_code] }
40
+ end
41
+
42
+ def fawry_secure_key
43
+ ENV.fetch('FAWRY_SECURE_KEY') { request_params[:fawry_secure_key] }
44
+ end
45
+
46
+ def validate_payment_status_params!
47
+ contract = Contracts::PaymentStatusRequestContract.new.call(request_params)
48
+ raise InvalidFawryRequestError, contract.errors.to_h if contract.failure?
49
+ end
50
+
51
+ def payment_status_request_signature
52
+ Digest::SHA256.hexdigest("#{fawry_merchant_code}#{request_params[:merchant_ref_number]}"\
53
+ "#{fawry_secure_key}")
54
+ end
55
+ end
56
+ end
57
+ end
@@ -5,7 +5,7 @@ require 'digest'
5
5
  module Fawry
6
6
  module Requests
7
7
  module RefundRequest
8
- def fire
8
+ def fire_refund_request
9
9
  fawry_api_response = Connection.post(request[:path], request[:params], request[:body], request[:options])
10
10
  response_body = JSON.parse(fawry_api_response.body)
11
11
 
@@ -16,7 +16,7 @@ module Fawry
16
16
 
17
17
  def build_refund_request
18
18
  {
19
- path: 'refund',
19
+ path: 'payments/refund',
20
20
  params: {},
21
21
  body: refund_request_transformed_params,
22
22
  options: options
@@ -29,7 +29,7 @@ module Fawry
29
29
 
30
30
  def refund_request_transformed_params
31
31
  {
32
- merchantCode: request_params[:merchant_code],
32
+ merchantCode: fawry_merchant_code,
33
33
  referenceNumber: request_params[:reference_number],
34
34
  refundAmount: request_params[:refund_amount],
35
35
  reason: request_params[:reason],
@@ -37,15 +37,23 @@ module Fawry
37
37
  }.compact
38
38
  end
39
39
 
40
+ def fawry_merchant_code
41
+ ENV.fetch('FAWRY_MERCHANT_CODE') { request_params[:merchant_code] }
42
+ end
43
+
44
+ def fawry_secure_key
45
+ ENV.fetch('FAWRY_SECURE_KEY') { request_params[:fawry_secure_key] }
46
+ end
47
+
40
48
  def validate_refund_params!
41
49
  contract = Contracts::RefundRequestContract.new.call(request_params)
42
- raise InvalidFawryRequest, contract.errors.to_h if contract.failure?
50
+ raise InvalidFawryRequestError, contract.errors.to_h if contract.failure?
43
51
  end
44
52
 
45
53
  def refund_request_signature
46
- Digest::SHA256.hexdigest("#{request_params[:merchant_code]}#{request_params[:reference_number]}"\
54
+ Digest::SHA256.hexdigest("#{fawry_merchant_code}#{request_params[:reference_number]}"\
47
55
  "#{format('%<refund_amount>.2f', refund_amount: request_params[:refund_amount])}"\
48
- "#{request_params[:reason]}#{request_params[:fawry_secure_key]}")
56
+ "#{request_params[:reason]}#{fawry_secure_key}")
49
57
  end
50
58
  end
51
59
  end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fawry
4
+ module Utils
5
+ # Adds keys from fawry API response as methods
6
+ # on object instance that return the value
7
+ # of each key
8
+ #
9
+ # type => type
10
+ # referenceNumber => reference_number
11
+ # merchantRefNumber => merchant_ref_number
12
+ # expirationTime => expiration_time
13
+ # statusCode => status_code
14
+ # statusDescription => status_description
15
+ #
16
+ # fawry_res = FawryResponse.new(response)
17
+ # fawry_res.status_code => 200
18
+ # fawry_res.reference_number => 1234567
19
+ def enrich_object(fawry_params)
20
+ fawry_params.each_key do |key|
21
+ method_name = key.to_s.split(/(?=[A-Z])/).map(&:downcase).join('_') # statusCode => status_code
22
+ instance_variable_set("@#{method_name}", fawry_params[key])
23
+ method_body = proc { instance_variable_get("@#{method_name}") }
24
+
25
+ self.class.public_send(:define_method, method_name, method_body)
26
+ end
27
+ end
28
+ end
29
+ end
data/lib/fawry/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fawry
4
- VERSION = '0.1.0'
4
+ VERSION = '1.2.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fawry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
- - Amr Bakry
8
- autorequire:
7
+ - Amr El Bakry
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-05 00:00:00.000000000 Z
11
+ date: 2021-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-validation
@@ -65,9 +65,6 @@ dependencies:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
67
  version: '11.0'
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: 11.0.1
71
68
  type: :development
72
69
  prerelease: false
73
70
  version_requirements: !ruby/object:Gem::Requirement
@@ -75,23 +72,20 @@ dependencies:
75
72
  - - "~>"
76
73
  - !ruby/object:Gem::Version
77
74
  version: '11.0'
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: 11.0.1
81
75
  - !ruby/object:Gem::Dependency
82
76
  name: rake
83
77
  requirement: !ruby/object:Gem::Requirement
84
78
  requirements:
85
79
  - - "~>"
86
80
  - !ruby/object:Gem::Version
87
- version: '10.0'
81
+ version: '13.0'
88
82
  type: :development
89
83
  prerelease: false
90
84
  version_requirements: !ruby/object:Gem::Requirement
91
85
  requirements:
92
86
  - - "~>"
93
87
  - !ruby/object:Gem::Version
94
- version: '10.0'
88
+ version: '13.0'
95
89
  - !ruby/object:Gem::Dependency
96
90
  name: rspec
97
91
  requirement: !ruby/object:Gem::Requirement
@@ -107,40 +101,64 @@ dependencies:
107
101
  - !ruby/object:Gem::Version
108
102
  version: '3.0'
109
103
  - !ruby/object:Gem::Dependency
110
- name: webmock
104
+ name: rspec_junit_formatter
111
105
  requirement: !ruby/object:Gem::Requirement
112
106
  requirements:
113
- - - "~>"
107
+ - - ">="
114
108
  - !ruby/object:Gem::Version
115
- version: '3.7'
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
116
114
  - - ">="
117
115
  - !ruby/object:Gem::Version
118
- version: 3.7.6
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rubocop
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.11'
119
124
  type: :development
120
125
  prerelease: false
121
126
  version_requirements: !ruby/object:Gem::Requirement
122
127
  requirements:
123
128
  - - "~>"
124
129
  - !ruby/object:Gem::Version
125
- version: '3.7'
126
- - - ">="
130
+ version: '1.11'
131
+ - !ruby/object:Gem::Dependency
132
+ name: webmock
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
127
136
  - !ruby/object:Gem::Version
128
- version: 3.7.6
129
- description:
137
+ version: '3.12'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '3.12'
145
+ description:
130
146
  email:
131
- - amrrbakry17@gmail.com
147
+ - amrr@hey.com
132
148
  executables: []
133
149
  extensions: []
134
150
  extra_rdoc_files: []
135
151
  files:
152
+ - ".circleci/config.yml"
153
+ - ".github/workflows/ruby.yml"
136
154
  - ".gitignore"
137
155
  - ".rspec"
138
156
  - ".rubocop.yml"
139
- - ".travis.yml"
140
157
  - CODE_OF_CONDUCT.md
141
158
  - Gemfile
142
159
  - Gemfile.lock
143
160
  - LICENSE.txt
161
+ - README-ar.md
144
162
  - README.md
145
163
  - Rakefile
146
164
  - bin/console
@@ -149,12 +167,22 @@ files:
149
167
  - lib/fawry.rb
150
168
  - lib/fawry/connection.rb
151
169
  - lib/fawry/contracts/charge_request_contract.rb
170
+ - lib/fawry/contracts/create_card_token_request_contract.rb
171
+ - lib/fawry/contracts/delete_token_request_contract.rb
172
+ - lib/fawry/contracts/list_tokens_request_contract.rb
173
+ - lib/fawry/contracts/payment_status_request_contract.rb
152
174
  - lib/fawry/contracts/refund_request_contract.rb
153
175
  - lib/fawry/errors.rb
176
+ - lib/fawry/fawry_callback.rb
154
177
  - lib/fawry/fawry_request.rb
155
178
  - lib/fawry/fawry_response.rb
156
179
  - lib/fawry/requests/charge_request.rb
180
+ - lib/fawry/requests/create_card_token_request.rb
181
+ - lib/fawry/requests/delete_token_request.rb
182
+ - lib/fawry/requests/list_tokens_request.rb
183
+ - lib/fawry/requests/payment_status_request.rb
157
184
  - lib/fawry/requests/refund_request.rb
185
+ - lib/fawry/utils.rb
158
186
  - lib/fawry/version.rb
159
187
  homepage: https://github.com/amrrbakry/fawry
160
188
  licenses:
@@ -162,7 +190,7 @@ licenses:
162
190
  metadata:
163
191
  homepage_uri: https://github.com/amrrbakry/fawry
164
192
  source_code_uri: https://github.com/amrrbakry/fawry
165
- post_install_message:
193
+ post_install_message:
166
194
  rdoc_options: []
167
195
  require_paths:
168
196
  - lib
@@ -170,15 +198,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
198
  requirements:
171
199
  - - ">="
172
200
  - !ruby/object:Gem::Version
173
- version: '0'
201
+ version: '2.6'
174
202
  required_rubygems_version: !ruby/object:Gem::Requirement
175
203
  requirements:
176
204
  - - ">="
177
205
  - !ruby/object:Gem::Version
178
206
  version: '0'
179
207
  requirements: []
180
- rubygems_version: 3.0.1
181
- signing_key:
208
+ rubygems_version: 3.0.9
209
+ signing_key:
182
210
  specification_version: 4
183
211
  summary: A library to interface with Fawry's payment gateway API (charge, refund,
184
212
  payment status, service callback).
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.6.0
7
- before_install: gem install bundler -v 2.0.2