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.
@@ -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: []