my-services 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/my-services/actions/post.rb +77 -0
- data/lib/my-services/errors/authentication_error.rb +4 -0
- data/lib/my-services/errors/connection_error.rb +4 -0
- data/lib/my-services/errors/invalid_request_error.rb +4 -0
- data/lib/my-services/errors/my_services_error.rb +4 -0
- data/lib/my-services/my_services_object.rb +101 -0
- data/lib/my-services/worker.rb +10 -0
- data/lib/my-services.rb +83 -0
- metadata +149 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 83b0074ece93ce9580cf777592216a9b498fbe9e67c888b8b8a7ec039c18540c
|
4
|
+
data.tar.gz: 16e72fa08eacd6209d17220bd8c5db6414207e93be0da17f09719be60ba236f7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c68bc6a67f506118f6e2b1d7402a3acc69ff18b35e97bd26d30b5a7b8a0a2941cce6205d366c1a735676d083bd1ad4e7762537ac8022339bf4892fa5659f7d4e
|
7
|
+
data.tar.gz: ff4eefb529b7ec092b2a1d86d548de063dec3b987a3cbd4b0250d5906384e729004d9ded71a7e30887e452651d54b3e47be15a4f4fb2783baf51b2d9c7eb4d7e
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module MyServices
|
2
|
+
module Actions
|
3
|
+
module Post
|
4
|
+
module ClassMethods
|
5
|
+
def load_category
|
6
|
+
# api_url = "http://127.0.0.1:8080/billspayment/bill/categories"
|
7
|
+
api_url = "#{self.api_url}"
|
8
|
+
# response = MyServices.request(api_url, :post)
|
9
|
+
response = JSON.parse('{
|
10
|
+
"responseCode": "00",
|
11
|
+
"message": "success",
|
12
|
+
"data": [
|
13
|
+
{
|
14
|
+
"id": 3,
|
15
|
+
"name": "State Government Collections"
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"id": 1,
|
19
|
+
"name": "Utility Bills"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"id": 5,
|
23
|
+
"name": "Internet Services"
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"id": 41,
|
27
|
+
"name": "Betting and Lottery"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
"id": 2,
|
31
|
+
"name": "Cable TV Bills"
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"id": 12,
|
35
|
+
"name": "Transport and Toll Payments"
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"id": 58,
|
39
|
+
"name": "AZURI"
|
40
|
+
}
|
41
|
+
]
|
42
|
+
}')
|
43
|
+
end
|
44
|
+
def load_billers(id)
|
45
|
+
# api_url = "http://127.0.0.1:8080/billspayment/bill/getbillers/4"
|
46
|
+
api_url = "#{self.api_url}/#{id}"
|
47
|
+
# response = MyServices.request(api_url, :post)
|
48
|
+
response = JSON.parse('{
|
49
|
+
"responseCode": "00",
|
50
|
+
"message": "success",
|
51
|
+
"data": [
|
52
|
+
{
|
53
|
+
"id": 3444,
|
54
|
+
"billerId": "3444",
|
55
|
+
"billerName": "Abia State",
|
56
|
+
"sid": 3,
|
57
|
+
"status": "A"
|
58
|
+
},
|
59
|
+
{
|
60
|
+
"id": 913,
|
61
|
+
"billerId": "913",
|
62
|
+
"billerName": "GLO",
|
63
|
+
"sid": 3,
|
64
|
+
"status": "A"
|
65
|
+
}
|
66
|
+
]
|
67
|
+
}')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.included(base)
|
72
|
+
base.extend(ClassMethods)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module MyServices
|
2
|
+
class MyServicesObject
|
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?(MyServicesObject)
|
32
|
+
attrs[Util.to_camel_case_lower(str).to_sym] = parse_my_services_obj(instance_var)
|
33
|
+
elsif instance_var.is_a?(Array)
|
34
|
+
objs = []
|
35
|
+
instance_var.each do |object|
|
36
|
+
objs << parse_myservices_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_my_services_obj(obj)
|
60
|
+
return unless obj.is_a?(MyServicesObject)
|
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
|
+
|
data/lib/my-services.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'json'
|
3
|
+
require 'base64'
|
4
|
+
require 'uri'
|
5
|
+
|
6
|
+
# Errors
|
7
|
+
require_relative 'my-services/errors/my_services_error'
|
8
|
+
require_relative 'my-services/errors/authentication_error'
|
9
|
+
require_relative 'my-services/errors/invalid_request_error'
|
10
|
+
require_relative 'my-services/errors/connection_error'
|
11
|
+
|
12
|
+
# Actions
|
13
|
+
require_relative 'my-services/actions/post'
|
14
|
+
|
15
|
+
# Resources
|
16
|
+
require_relative 'my-services/my_services_object'
|
17
|
+
require_relative 'my-services/worker'
|
18
|
+
|
19
|
+
module MyServices
|
20
|
+
# @base_url = 'https://myservices.com/api/v1/'
|
21
|
+
|
22
|
+
class << self
|
23
|
+
# MyServicesError :api_key, :base_url
|
24
|
+
|
25
|
+
def request(api_url, method, params = {})
|
26
|
+
# raise(AuthenticationError, 'Set your API Key using MyServices.api_key = <API_KEY>') unless api_key
|
27
|
+
|
28
|
+
begin
|
29
|
+
url = URI.join(base_url, api_url).to_s
|
30
|
+
response = RestClient::Request.execute(method: method, url: url, payload: params.to_json, headers: request_headers)
|
31
|
+
JSON.parse(response) unless response.empty?
|
32
|
+
rescue RestClient::ExceptionWithResponse => e
|
33
|
+
if (response_code = e.http_code) && (response_body = e.http_body)
|
34
|
+
handle_api_error(response_code, JSON.parse(response_body))
|
35
|
+
else
|
36
|
+
handle_restclient_error(e)
|
37
|
+
end
|
38
|
+
rescue RestClient::Exception, Errno::ECONNREFUSED => e
|
39
|
+
handle_restclient_error(e)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def request_headers
|
46
|
+
{
|
47
|
+
Authorization: "Basic #{encoded_api_key}",
|
48
|
+
content_type: :json,
|
49
|
+
accept: :json
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
def encoded_api_key
|
54
|
+
@encoded_api_key ||= Base64.urlsafe_encode64(api_key)
|
55
|
+
end
|
56
|
+
|
57
|
+
def handle_api_error(code, body)
|
58
|
+
case code
|
59
|
+
when 400, 404
|
60
|
+
raise InvalidRequestError, body['message']
|
61
|
+
when 401
|
62
|
+
raise AuthenticationError, body['message']
|
63
|
+
else
|
64
|
+
raise MyServicesError, body['message']
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def handle_restclient_error(exception)
|
69
|
+
message =
|
70
|
+
case exception
|
71
|
+
when RestClient::RequestTimeout
|
72
|
+
'Could not connect to MyServices. Check your internet connection and try again.'
|
73
|
+
when RestClient::ServerBrokeConnection
|
74
|
+
'The connetion with MyServices terminated before the request completed. Please try again.'
|
75
|
+
else
|
76
|
+
'There was a problem connection with MyServices. Please try again. If the problem persists contact contact@MyServices.com'
|
77
|
+
end
|
78
|
+
|
79
|
+
raise ConnectionError, message
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
metadata
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: my-services
|
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 MyService's API
|
112
|
+
email: minosahu31@gmail.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- lib/my-services.rb
|
118
|
+
- lib/my-services/actions/post.rb
|
119
|
+
- lib/my-services/errors/authentication_error.rb
|
120
|
+
- lib/my-services/errors/connection_error.rb
|
121
|
+
- lib/my-services/errors/invalid_request_error.rb
|
122
|
+
- lib/my-services/errors/my_services_error.rb
|
123
|
+
- lib/my-services/my_services_object.rb
|
124
|
+
- lib/my-services/worker.rb
|
125
|
+
homepage: http://rubygems.org/gems/my-services
|
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: MyServices ruby api
|
149
|
+
test_files: []
|