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 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,4 @@
1
+ module MyServices
2
+ class AuthenticationError < MyServicesError; end
3
+ end
4
+
@@ -0,0 +1,4 @@
1
+ module MyServices
2
+ class ConnectionError < MyServicesError; end
3
+ end
4
+
@@ -0,0 +1,4 @@
1
+ module MyServices
2
+ class InvalidRequestError < MyServicesError; end
3
+ end
4
+
@@ -0,0 +1,4 @@
1
+ module MyServices
2
+ class MyServicesError < StandardError; end
3
+ end
4
+
@@ -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
+
@@ -0,0 +1,10 @@
1
+ module MyServices
2
+ class Worker < MyServicesObject
3
+ include MyServices::Actions::Post
4
+
5
+ def self.api_url
6
+ 'workers'
7
+ end
8
+ end
9
+ end
10
+
@@ -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: []