bills-payment 0.0.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.
- checksums.yaml +7 -0
- data/lib/bills-payment.rb +82 -0
- data/lib/bills-payment/actions/post.rb +30 -0
- data/lib/bills-payment/bills_payment_object.rb +101 -0
- data/lib/bills-payment/errors/authentication_error.rb +4 -0
- data/lib/bills-payment/errors/bills_payment_error.rb +4 -0
- data/lib/bills-payment/errors/connection_error.rb +4 -0
- data/lib/bills-payment/errors/invalid_request_error.rb +4 -0
- data/lib/bills-payment/worker.rb +10 -0
- metadata +149 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8d136023d59d99b8fa15832a2743cbc484ae066516f4a700767d405b7cd20b84
|
4
|
+
data.tar.gz: 3db2d3f40488bb7ba15ef399864af62d5b7f27a1c344d962aa06515a523c43cb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a30493b7579ddeb4acdf9335f696b34f15ab5d9539b0d32d5f34015dc844f871a7935774200df3d3554a5a5cba311ce76a8a8c37f63696d16c58fcb9790762c2
|
7
|
+
data.tar.gz: b1435ec1317df45cc3f107b0546c13042bcd8fceed826de68b56c21b05b928c7307e209728d474dafc43f0cc112c14b5a4633d0481957382c0ce6a73e4c08f8a
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'json'
|
3
|
+
require 'base64'
|
4
|
+
require 'uri'
|
5
|
+
|
6
|
+
# Errors
|
7
|
+
require_relative 'bills-payment/errors/bills_payment_error'
|
8
|
+
require_relative 'bills-payment/errors/authentication_error'
|
9
|
+
require_relative 'bills-payment/errors/invalid_request_error'
|
10
|
+
require_relative 'bills-payment/errors/connection_error'
|
11
|
+
|
12
|
+
# Actions
|
13
|
+
require_relative 'bills-payment/actions/post'
|
14
|
+
|
15
|
+
# Resources
|
16
|
+
require_relative 'bills-payment/bills_payment_object'
|
17
|
+
require_relative 'bills-payment/worker'
|
18
|
+
|
19
|
+
module BillsPayment
|
20
|
+
@base_url = 'http://14.98.171.134:9090/'
|
21
|
+
|
22
|
+
class << self
|
23
|
+
# BillsPaymentError :api_key, :base_url
|
24
|
+
|
25
|
+
def request(api_url, method, params = {})
|
26
|
+
# raise(AuthenticationError, 'Set your API Key using BillsPayment.api_key = <API_KEY>') unless api_key
|
27
|
+
begin
|
28
|
+
url = URI.join(base_url, api_url).to_s
|
29
|
+
response = RestClient::Request.execute(method: method, url: url, payload: params.to_json, headers: request_headers)
|
30
|
+
JSON.parse(response) unless response.empty?
|
31
|
+
rescue RestClient::ExceptionWithResponse => e
|
32
|
+
if (response_code = e.http_code) && (response_body = e.http_body)
|
33
|
+
handle_api_error(response_code, JSON.parse(response_body))
|
34
|
+
else
|
35
|
+
handle_restclient_error(e)
|
36
|
+
end
|
37
|
+
rescue RestClient::Exception, Errno::ECONNREFUSED => e
|
38
|
+
handle_restclient_error(e)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def request_headers
|
45
|
+
{
|
46
|
+
Authorization: "Basic #{encoded_api_key}",
|
47
|
+
content_type: :json,
|
48
|
+
accept: :json
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
def encoded_api_key
|
53
|
+
@encoded_api_key ||= Base64.urlsafe_encode64(api_key)
|
54
|
+
end
|
55
|
+
|
56
|
+
def handle_api_error(code, body)
|
57
|
+
case code
|
58
|
+
when 400, 404
|
59
|
+
raise InvalidRequestError, body['message']
|
60
|
+
when 401
|
61
|
+
raise AuthenticationError, body['message']
|
62
|
+
else
|
63
|
+
raise BillsPaymentError, body['message']
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def handle_restclient_error(exception)
|
68
|
+
message =
|
69
|
+
case exception
|
70
|
+
when RestClient::RequestTimeout
|
71
|
+
'Could not connect to BillsPayment. Check your internet connection and try again.'
|
72
|
+
when RestClient::ServerBrokeConnection
|
73
|
+
'The connetion with BillsPayment terminated before the request completed. Please try again.'
|
74
|
+
else
|
75
|
+
'There was a problem connection with BillsPayment. Please try again. If the problem persists contact contact@BillsPayment.com'
|
76
|
+
end
|
77
|
+
|
78
|
+
raise ConnectionError, message
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module BillsPayment
|
2
|
+
module Actions
|
3
|
+
module Post
|
4
|
+
module ClassMethods
|
5
|
+
|
6
|
+
def load_category
|
7
|
+
api_url = "#{api_url}/categories"
|
8
|
+
response = BillsPayment.request(api_url, :post)
|
9
|
+
end
|
10
|
+
|
11
|
+
def load_billers(id)
|
12
|
+
api_url = "#{api_url}/getbillers/#{id}"
|
13
|
+
response = BillsPayment.request(api_url, :post)
|
14
|
+
end
|
15
|
+
|
16
|
+
# params - id, customerRef, billerId, narration, accountNumber, paymentDate
|
17
|
+
def do_payment(payment_data)
|
18
|
+
api_url = "#{self.api_url}/dopayment"
|
19
|
+
response = BillsPayment.request(api_url, :post, payment_data)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.included(base)
|
25
|
+
base.extend(ClassMethods)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module BillsPayment
|
2
|
+
class BillsPaymentObject
|
3
|
+
attr_reader :params
|
4
|
+
attr_accessor :id
|
5
|
+
|
6
|
+
def initialize(params)
|
7
|
+
if params.is_a?(Hash)
|
8
|
+
@params = params
|
9
|
+
assign_attributes(@params)
|
10
|
+
elsif params.is_a?(String)
|
11
|
+
@params = { id: params }
|
12
|
+
assign_attributes(@params)
|
13
|
+
else
|
14
|
+
@params = {}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse_response(response)
|
19
|
+
@params = response
|
20
|
+
assign_attributes(response)
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
def attributes
|
25
|
+
attrs = {}
|
26
|
+
instance_variables.reject { |var| var == '@params' }.each do |var|
|
27
|
+
str = var.to_s.gsub(/^@/, '')
|
28
|
+
next unless respond_to?("#{str}=")
|
29
|
+
instance_var = instance_variable_get(var)
|
30
|
+
if Util.object_classes[str]
|
31
|
+
if instance_var.is_a?(BillsPaymentObject)
|
32
|
+
attrs[Util.to_camel_case_lower(str).to_sym] = parse_bills_payment_obj(instance_var)
|
33
|
+
elsif instance_var.is_a?(Array)
|
34
|
+
objs = []
|
35
|
+
instance_var.each do |object|
|
36
|
+
objs << parse_billspayment_obj(object)
|
37
|
+
end
|
38
|
+
attrs[Util.to_camel_case_lower(str).to_sym] = objs
|
39
|
+
else
|
40
|
+
attrs[Util.to_camel_case_lower(str).to_sym] = instance_var
|
41
|
+
end
|
42
|
+
else
|
43
|
+
attrs[Util.to_camel_case_lower(str).to_sym] = instance_var
|
44
|
+
end
|
45
|
+
end
|
46
|
+
attrs
|
47
|
+
end
|
48
|
+
|
49
|
+
def class_name
|
50
|
+
self.class.name.split('::').last
|
51
|
+
end
|
52
|
+
|
53
|
+
def api_url
|
54
|
+
"#{CGI.escape(class_name.downcase)}s"
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def parse_bills_payment_obj(obj)
|
60
|
+
return unless obj.is_a?(BillsPaymentObject)
|
61
|
+
if obj.respond_to?('id') && obj.id && (obj.is_a?(Destination) || obj.is_a?(Recipient) || obj.is_a?(Task))
|
62
|
+
obj.id
|
63
|
+
else
|
64
|
+
obj.attributes
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def assign_attributes(params)
|
69
|
+
params.each do |key, value|
|
70
|
+
key_underscore = Util.to_underscore(key)
|
71
|
+
|
72
|
+
if (klass = Util.object_classes[key.to_s])
|
73
|
+
case value
|
74
|
+
when Array
|
75
|
+
objs = []
|
76
|
+
value.each do |v|
|
77
|
+
objs << klass.new(v)
|
78
|
+
end
|
79
|
+
value = objs
|
80
|
+
when Hash
|
81
|
+
value = klass.new(value)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
if respond_to?("#{key_underscore}=")
|
86
|
+
send(:"#{key_underscore}=", value)
|
87
|
+
else
|
88
|
+
add_attrs(key_underscore.to_s => value)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def add_attrs(attrs)
|
94
|
+
attrs.each do |var, value|
|
95
|
+
self.class.class_eval { attr_accessor var }
|
96
|
+
instance_variable_set "@#{var}", value
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
metadata
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bills-payment
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sahu Minaketana
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-12-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rest-client
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.1'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '11.2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '11.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.8'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.8'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec-its
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.3'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.77'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.77'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.7'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.7'
|
111
|
+
description: To interact with BillsPayment's API
|
112
|
+
email: minosahu31@gmail.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- lib/bills-payment.rb
|
118
|
+
- lib/bills-payment/actions/post.rb
|
119
|
+
- lib/bills-payment/bills_payment_object.rb
|
120
|
+
- lib/bills-payment/errors/authentication_error.rb
|
121
|
+
- lib/bills-payment/errors/bills_payment_error.rb
|
122
|
+
- lib/bills-payment/errors/connection_error.rb
|
123
|
+
- lib/bills-payment/errors/invalid_request_error.rb
|
124
|
+
- lib/bills-payment/worker.rb
|
125
|
+
homepage: http://rubygems.org/gems/bills-payment
|
126
|
+
licenses:
|
127
|
+
- MIT
|
128
|
+
metadata: {}
|
129
|
+
post_install_message:
|
130
|
+
rdoc_options: []
|
131
|
+
require_paths:
|
132
|
+
- lib
|
133
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
requirements: []
|
144
|
+
rubyforge_project:
|
145
|
+
rubygems_version: 2.7.6
|
146
|
+
signing_key:
|
147
|
+
specification_version: 4
|
148
|
+
summary: Bills Payment ruby api
|
149
|
+
test_files: []
|