bills-payment 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+
@@ -0,0 +1,4 @@
1
+ module BillsPayment
2
+ class AuthenticationError < BillsPaymentError; end
3
+ end
4
+
@@ -0,0 +1,4 @@
1
+ module BillsPayment
2
+ class BillsPaymentError < StandardError; end
3
+ end
4
+
@@ -0,0 +1,4 @@
1
+ module BillsPayment
2
+ class ConnectionError < BillsPaymentError; end
3
+ end
4
+
@@ -0,0 +1,4 @@
1
+ module BillsPayment
2
+ class InvalidRequestError < BillsPaymentError; end
3
+ end
4
+
@@ -0,0 +1,10 @@
1
+ module BillsPayment
2
+ class Worker < BillsPaymentObject
3
+ include BillsPayment::Actions::Post
4
+
5
+ def self.api_url
6
+ 'bills-payment/bill'
7
+ end
8
+ end
9
+ end
10
+
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: []