fawry 0.1.0 → 1.2.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.
@@ -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