usman 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11d7d5543508f2d08ff0b6df6ae64452c1c7bd9e
4
- data.tar.gz: c59ec7233dcf1498cecd2552cdcc731cac611a47
3
+ metadata.gz: d15538692688eced6623bc7a704c298dfa89d783
4
+ data.tar.gz: ecf244d046e8c804049dedd9a2ad28afe8bc4084
5
5
  SHA512:
6
- metadata.gz: 5c9561c94d13ec401647606bf33eefd63d9f01d6d8d451a6efc1c801a9cd6c8aa0974e4bdfca6218442d82389b357c49eacb5f37c960035895e787d9898e37f7
7
- data.tar.gz: 3b4808e7455ade1a6d58005cd56a8b5611e804eab7d4b35885abefbf46c3156fc8cb6c45bffe3d9f7e0ce7ff4442218ac603d22240d0bdb128f6285355f0670a
6
+ metadata.gz: b72c15eb8d09f6fea21e023f8fdd43f66c0cb5044361b8af94ddda70d7968aa5dfa0950ef22bd75055bea01e51e2dcb9c0e65a46e959627e615bcd35e21493ce
7
+ data.tar.gz: 22d49bd7fed9f246b29583489abbd59ad40458a65f24e5551ec9d3bc304158b57977a1951fdc2496f4a5861999b63826b36a3ea3fb952d548d81d603b741a7b8
@@ -26,7 +26,43 @@ module Api
26
26
 
27
27
  def resend_otp
28
28
  proc_code = Proc.new do
29
-
29
+ @device = Device.where("uuid = ?", params[:uuid]).first
30
+ if @device
31
+ if @device.blocked?
32
+ @success = false
33
+ @errors = {
34
+ heading: I18n.translate("mobile_registration.device_blocked.heading"),
35
+ message: I18n.translate("mobile_registration.device_blocked.message"),
36
+ details: {}
37
+ }
38
+ else
39
+ valid, validation_errors = @device.resend_otp(params[:dialing_prefix], params[:mobile_number])
40
+ if valid
41
+ @success = true
42
+ @alert = {
43
+ heading: I18n.translate("mobile_registration.new_otp_sent.heading"),
44
+ message: I18n.translate("mobile_registration.new_otp_sent.message")
45
+ }
46
+ @data = {}
47
+ else
48
+ @success = false
49
+ @errors = {
50
+ heading: I18n.translate("mobile_registration.otp_not_matching.heading"),
51
+ message: I18n.translate("mobile_registration.otp_not_matching.message"),
52
+ details: validation_errors
53
+ }
54
+ end
55
+ end
56
+ else
57
+ @success = false
58
+ @errors = {
59
+ heading: I18n.translate("general.unexpected_failure.heading"),
60
+ message: I18n.translate("general.unexpected_failure.message"),
61
+ details: {
62
+ uuid: "is invalid"
63
+ }
64
+ }
65
+ end
30
66
  end
31
67
  render_json_response(proc_code)
32
68
  end
@@ -0,0 +1,41 @@
1
+ module Usman
2
+ class DocsController < Kuppayam::BaseController
3
+
4
+ include Usman::AuthenticationHelper
5
+
6
+ layout 'kuppayam/docs'
7
+
8
+ before_action :current_user
9
+
10
+ def index
11
+ end
12
+
13
+ def register
14
+ end
15
+
16
+ def resend_otp
17
+ end
18
+
19
+ def verify
20
+ end
21
+
22
+ private
23
+
24
+ def set_default_title
25
+ set_title("API Docs | #{params[:action].to_s.titleize}")
26
+ end
27
+
28
+ def breadcrumbs_configuration
29
+ {
30
+ heading: "API Documentation",
31
+ description: "Requests and response structures with examples",
32
+ links: [{name: "Index", link: docs_index_path, icon: 'fa-list'}]
33
+ }
34
+ end
35
+
36
+ def set_navs
37
+ set_nav("docs")
38
+ end
39
+
40
+ end
41
+ end
data/app/models/device.rb CHANGED
@@ -144,6 +144,7 @@ class Device < ApplicationRecord
144
144
 
145
145
  def generate_otp
146
146
  self.otp = rand(10000..99999)
147
+ self.otp_sent_at = Time.now
147
148
  end
148
149
 
149
150
  def validate_otp(otp, dialing_prefix, mobile_number)
@@ -151,34 +152,49 @@ class Device < ApplicationRecord
151
152
  # Validate OTP and other parameters
152
153
  validation_errors = {}
153
154
 
155
+ # Check if this OTP was already verified
156
+ if !self.otp_verified_at.blank?
157
+ validation_errors[:otp_verified_at] = "This OTP was already used."
158
+ return false, validation_errors
159
+ end
160
+
154
161
  # TODO - remove 11111 after implementing Twilio
155
- validation_errors[:otp] = "doesn't match with our database" unless (self.otp.to_s == otp.to_s || self.otp.to_s == "11111")
162
+ validation_errors[:otp] = "doesn't match with our database" unless (self.otp.to_s == otp.to_s or otp.to_s == "11111")
156
163
  validation_errors[:mobile_number] = "doesn't match with our database" unless self.registration.mobile_number.to_s == mobile_number.to_s
157
164
  validation_errors[:dialing_prefix] = "doesn't match with our database" unless self.registration.dialing_prefix.to_s == dialing_prefix.to_s
158
165
 
159
- if validation_errors.empty?
160
- if self.otp_verified_at.blank?
166
+ return false, validation_errors unless validation_errors.empty?
167
+
168
+ # Create API Token if OTP is verified
169
+ self.otp_verified_at = Time.now
170
+ self.api_token = SecureRandom.hex
171
+ self.token_created_at = Time.now
172
+ self.save
161
173
 
162
- # Create API Token if OTP is verified
163
- self.otp_verified_at = Time.now
164
- self.api_token = SecureRandom.hex
165
- self.token_created_at = Time.now
166
- self.save
174
+ self.verify!
175
+ self.registration.verify!
167
176
 
168
- self.verify!
169
- self.registration.verify!
177
+ return true, {}
178
+ end
170
179
 
171
- return true, {}
172
- else
180
+ def resend_otp(dialing_prefix, mobile_number)
181
+ # Validate OTP and other parameters
182
+ validation_errors = {}
173
183
 
174
- # Check if this OTP was already verified
175
- validation_errors[:otp_verified_at] = "This OTP was already used."
184
+ validation_errors[:mobile_number] = "doesn't match with our database" unless self.registration.mobile_number.to_s == mobile_number.to_s
185
+ validation_errors[:dialing_prefix] = "doesn't match with our database" unless self.registration.dialing_prefix.to_s == dialing_prefix.to_s
186
+
187
+ return false, validation_errors unless validation_errors.empty?
188
+
189
+ self.send_otp
176
190
 
177
- return false, validation_errors
178
- end
179
- else
180
- return false, validation_errors
181
- end
191
+ return true, {}
192
+ end
193
+
194
+ def send_otp
195
+ self.generate_otp
196
+ self.save
197
+ return true
182
198
  end
183
199
 
184
200
  # Other Methods
@@ -78,6 +78,7 @@ module Usman
78
78
  @device.registration = @registration
79
79
  @device.user = @registration.user
80
80
  @device.uuid = @uuid
81
+ @device.api_token = SecureRandom.hex
81
82
  @device.device_token = @device_token
82
83
  @device.device_name = @device_name
83
84
  @device.device_type = @device_type
@@ -100,17 +101,13 @@ module Usman
100
101
 
101
102
  def generate_new_otp
102
103
  @device.generate_otp
103
- if send_otp
104
+ if @device.send_otp
104
105
  @device.update_attribute(:otp_sent_at, Time.now)
105
106
  else
106
107
  set_error("mobile_registration.otp_not_sent")
107
108
  end
108
109
  end
109
110
 
110
- def send_otp
111
- return true
112
- end
113
-
114
111
  def set_error(key, hsh={})
115
112
  @error_heading = I18n.t("#{key}.heading")
116
113
  @error_message = I18n.t("#{key}.message")
@@ -0,0 +1,502 @@
1
+ <div class="tabs-vertical-env">
2
+
3
+ <ul class="nav tabs-vertical">
4
+ <li class="active">
5
+ <a href="#register" data-toggle="tab">
6
+ <i class="fa-globe visible-xs"></i>
7
+ <span class="hidden-xs">Register</span>
8
+ </a>
9
+ </li>
10
+ <li class="">
11
+ <a href="#resend_otp" data-toggle="tab">
12
+ <i class="fa-globe visible-xs"></i>
13
+ <span class="hidden-xs">Resend OTP</span>
14
+ </a>
15
+ </li>
16
+ <li class="">
17
+ <a href="#verify" data-toggle="tab">
18
+ <i class="fa-globe visible-xs"></i>
19
+ <span class="hidden-xs">Verify</span>
20
+ </a>
21
+ </li>
22
+ <li class="">
23
+ <a href="#terms_and_conditions" data-toggle="tab">
24
+ <i class="fa-globe visible-xs"></i>
25
+ <span class="hidden-xs">Terms & Conditions</span>
26
+ </a>
27
+ </li>
28
+ <li class="">
29
+ <a href="#create_profile" data-toggle="tab">
30
+ <i class="fa-globe visible-xs"></i>
31
+ <span class="hidden-xs">Create Profile</span>
32
+ </a>
33
+ </li>
34
+ <li class="">
35
+ <a href="#create_profile" data-toggle="tab">
36
+ <i class="fa-globe visible-xs"></i>
37
+ <span class="hidden-xs">Update Profile</span>
38
+ </a>
39
+ </li>
40
+ </ul>
41
+
42
+ <div class="tab-content">
43
+
44
+ <!-- Sample Search Results Tab -->
45
+ <div class="tab-pane active" id="register">
46
+
47
+ <h3>
48
+ <span class="text-success">Register API</span><br>
49
+ <small>/api/v1/register</small>
50
+ </h3>
51
+
52
+ <div class="panel-group panel-group-joined">
53
+
54
+ <div class="panel panel-default panel-positive" style="width:100%;">
55
+ <div class="panel-heading">
56
+ <h4 class="panel-title">
57
+ <a data-toggle="collapse" data-parent="#register-pos-1" href="#register-pos-1" class="collapsed" aria-expanded="false">
58
+ Positive Case - 1 - should register and add a new device
59
+ </a>
60
+ </h4>
61
+ </div>
62
+ <div id="register-pos-1" class="panel-collapse collapse" aria-expanded="false" style="height: 0px;">
63
+ <div class="panel-body">
64
+ <div class="mt-10 mb-20">Input</div>
65
+ <pre>
66
+ {
67
+ "country_id": "1",
68
+ "city_id": "2",
69
+ "dialing_prefix": "+91",
70
+ "mobile_number": "501370321",
71
+ "uuid": "jh01u2g01h301h21h232",
72
+ "device_token": "0182y3b28107b31",
73
+ "device_name": "Apple iPhone",
74
+ "device_type": "iPhone 7 Plus",
75
+ "operating_system": "iOS",
76
+ "software_version": "iOS 11.2.2"
77
+ }</pre>
78
+
79
+ <div class="mt-10 mb-20">Output</div>
80
+ <pre>
81
+ {
82
+ "success": true,
83
+ "alert": {
84
+ "heading": "An OTP has been sent to you",
85
+ "message": "Check your mobile for new message from us."
86
+ },
87
+ "data": {
88
+ "registration": {
89
+ "id": 5,
90
+ "user_id": null,
91
+ "country_id": 1,
92
+ "city_id": null,
93
+ "dialing_prefix": "+91",
94
+ "mobile_number": "501370321"
95
+ },
96
+ "device": {
97
+ "id": 6,
98
+ "user_id": null,
99
+ "registration_id": 5,
100
+ "uuid": "jh01u2g01h301h21h232",
101
+ "device_token": "0182y3b28107b31",
102
+ "device_name": "Apple iPhone",
103
+ "device_type": "iPhone 7 Plus",
104
+ "operating_system": "iOS",
105
+ "software_version": "iOS 11.2.2",
106
+ "otp_verified_at": null
107
+ }
108
+ },
109
+ "errors": {
110
+ "heading": null,
111
+ "message": null,
112
+ "details": {}
113
+ }
114
+ }</pre>
115
+ </div>
116
+ </div>
117
+ </div>
118
+
119
+ <div class="panel panel-default panel-negative" style="width:100%;">
120
+ <div class="panel-heading">
121
+ <h4 class="panel-title">
122
+ <a data-toggle="collapse" data-parent="#register-neg-1" href="#register-neg-1" class="collapsed" aria-expanded="false">
123
+ Negative Case - 1 - should set proper errors if no input is given
124
+ </a>
125
+ </h4>
126
+ </div>
127
+ <div id="register-neg-1" class="panel-collapse collapse" aria-expanded="false" style="height: 0px;">
128
+ <div class="panel-body">
129
+ <div class="mt-10 mb-20">Input</div>
130
+ <pre>
131
+ {}</pre>
132
+
133
+ <div class="mt-10 mb-20">Output</div>
134
+ <pre>
135
+ {
136
+ "success": false,
137
+ "errors": {
138
+ "heading": "Registring new mobile number FAILED.",
139
+ "message": "Check if all mandatory details are passed. Refer the error details for technical information.",
140
+ "details": {
141
+ "country": [
142
+ "must exist"
143
+ ],
144
+ "dialing_prefix": [
145
+ "can't be blank",
146
+ "is too short (minimum is 2 characters)"
147
+ ],
148
+ "mobile_number": [
149
+ "can't be blank",
150
+ "is too short (minimum is 9 characters)"
151
+ ],
152
+ "uuid": [
153
+ "can't be blank"
154
+ ],
155
+ "device_token": [
156
+ "can't be blank"
157
+ ]
158
+ }
159
+ }
160
+ }</pre>
161
+ </div>
162
+ </div>
163
+ </div>
164
+
165
+ <div class="panel panel-default panel-negative" style="width:100%;">
166
+ <div class="panel-heading">
167
+ <h4 class="panel-title">
168
+ <a data-toggle="collapse" data-parent="#register-neg-2" href="#register-neg-2" class="collapsed" aria-expanded="false">
169
+ Negative Case - 2 - should set proper errors when device information is missing
170
+ </a>
171
+ </h4>
172
+ </div>
173
+ <div id="register-neg-2" class="panel-collapse collapse" aria-expanded="false" style="height: 0px;">
174
+ <div class="panel-body">
175
+ <div class="mt-10 mb-20">Input</div>
176
+ <pre>
177
+ {
178
+ "country_id": "1",
179
+ "dialing_prefix": "+92",
180
+ "mobile_number": "501370323"
181
+ }</pre>
182
+
183
+ <div class="mt-10 mb-20">Output</div>
184
+ <pre>
185
+ {
186
+ "success": false,
187
+ "errors": {
188
+ "heading": "Registring new mobile number FAILED.",
189
+ "message": "Check if all mandatory details are passed. Refer the error details for technical information.",
190
+ "details": {
191
+ "uuid": [
192
+ "can't be blank"
193
+ ],
194
+ "device_token": [
195
+ "can't be blank"
196
+ ]
197
+ }
198
+ }
199
+ }</pre>
200
+ </div>
201
+ </div>
202
+ </div>
203
+
204
+ <div class="panel panel-default panel-negative" style="width:100%;">
205
+ <div class="panel-heading">
206
+ <h4 class="panel-title">
207
+ <a data-toggle="collapse" data-parent="#register-neg-3" href="#register-neg-3" class="collapsed" aria-expanded="false">
208
+ Negative Case - 3 - should set proper errors when registration information is missing
209
+ </a>
210
+ </h4>
211
+ </div>
212
+ <div id="register-neg-3" class="panel-collapse collapse" aria-expanded="false" style="height: 0px;">
213
+ <div class="panel-body">
214
+ <div class="mt-10 mb-20">Input</div>
215
+ <pre>
216
+ {
217
+ "uuid": "jh01u2g01h301h21h23",
218
+ "device_token": "0182y3b28107b31",
219
+ "device_name": "Apple iPhone",
220
+ "device_type": "iPhone 7 Plus",
221
+ "operating_system": "iOS",
222
+ "software_version": "iOS 11.2.2"
223
+ }</pre>
224
+
225
+ <div class="mt-10 mb-20">Output</div>
226
+ <pre>
227
+ {
228
+ "success": false,
229
+ "errors": {
230
+ "heading": "Registring new mobile number FAILED.",
231
+ "message": "Check if all mandatory details are passed. Refer the error details for technical information.",
232
+ "details": {
233
+ "country": [
234
+ "must exist"
235
+ ],
236
+ "dialing_prefix": [
237
+ "can't be blank",
238
+ "is too short (minimum is 2 characters)"
239
+ ],
240
+ "mobile_number": [
241
+ "can't be blank",
242
+ "is too short (minimum is 9 characters)"
243
+ ]
244
+ }
245
+ }
246
+ }</pre>
247
+ </div>
248
+ </div>
249
+ </div>
250
+
251
+ </div>
252
+ </div>
253
+
254
+ <!-- Search Results Tab -->
255
+ <div class="tab-pane" id="resend_otp">
256
+ <h3>
257
+ <span class="text-success">Resend OTP</span><br>
258
+ <small>/api/v1/resend_otp</small>
259
+ </h3>
260
+
261
+ <div class="panel-group panel-group-joined">
262
+ <div class="panel panel-default panel-positive" style="width:100%;">
263
+ <div class="panel-heading">
264
+ <h4 class="panel-title">
265
+ <a data-toggle="collapse" data-parent="#resend-otp-pos-1" href="#resend-otp-pos-1" class="collapsed" aria-expanded="false">
266
+ Positive Case - 1 - should resend the otp for valid inputs
267
+ </a>
268
+ </h4>
269
+ </div>
270
+ <div id="resend-otp-pos-1" class="panel-collapse collapse" aria-expanded="false" style="height: 0px;">
271
+ <div class="panel-body">
272
+ <div class="mt-10 mb-20">Input</div>
273
+ <pre>
274
+ {
275
+ "uuid": "asd907asdba78sbda",
276
+ "mobile_number": "292991230",
277
+ "dialing_prefix": "+91"
278
+ }</pre>
279
+
280
+ <div class="mt-10 mb-20">Output</div>
281
+ <pre>
282
+ {
283
+ "success": true,
284
+ "alert": {
285
+ "heading": "An new OTP has been sent to you",
286
+ "message": "Check your mobile for new message from us."
287
+ }
288
+ }</pre>
289
+ </div>
290
+ </div>
291
+ </div>
292
+
293
+ <div class="panel panel-default panel-negative" style="width:100%;">
294
+ <div class="panel-heading">
295
+ <h4 class="panel-title">
296
+ <a data-toggle="collapse" data-parent="#resend-otp-neg-1" href="#resend-otp-neg-1" class="collapsed" aria-expanded="false">
297
+ Negative Case - 1 - should set proper errors if no input is given
298
+ </a>
299
+ </h4>
300
+ </div>
301
+ <div id="resend-otp-neg-1" class="panel-collapse collapse" aria-expanded="false" style="height: 0px;">
302
+ <div class="panel-body">
303
+ <div class="mt-10 mb-20">Input</div>
304
+ <pre>
305
+ {}</pre>
306
+
307
+ <div class="mt-10 mb-20">Output</div>
308
+ <pre>
309
+ {
310
+ "success": false,
311
+ "errors": {
312
+ "heading": "Unexpected Failure",
313
+ "message": "We're sorry, but something went wrong (500)",
314
+ "details": {
315
+ "uuid": "is invalid"
316
+ }
317
+ }
318
+ }</pre>
319
+ </div>
320
+ </div>
321
+ </div>
322
+ </div>
323
+ </div>
324
+
325
+ <!-- Search Results Tab -->
326
+ <div class="tab-pane" id="verify">
327
+ <h3>
328
+ <span class="text-success">Verify API</span><br>
329
+ <small>/api/v1/verify</small>
330
+ </h3>
331
+
332
+ <div class="panel-group panel-group-joined">
333
+ <div class="panel panel-default panel-positive" style="width:100%;">
334
+ <div class="panel-heading">
335
+ <h4 class="panel-title">
336
+ <a data-toggle="collapse" data-parent="#verify-pos-1" href="#verify-pos-1" class="collapsed" aria-expanded="false">
337
+ Positive Case - 1 - should verify an otp verification request from a pending device
338
+ </a>
339
+ </h4>
340
+ </div>
341
+ <div id="verify-pos-1" class="panel-collapse collapse" aria-expanded="false" style="height: 0px;">
342
+ <div class="panel-body">
343
+ <div class="mt-10 mb-20">Input</div>
344
+ <pre>
345
+ {
346
+ "otp": "11111",
347
+ "uuid": "90a0dadsand",
348
+ "mobile_number": "9102993912",
349
+ "dialing_prefix": "+91"
350
+ }</pre>
351
+
352
+ <div class="mt-10 mb-20">Output</div>
353
+ <pre>
354
+ {
355
+ "success": true,
356
+ "alert": {
357
+ "heading": "OTP was verified succesfully",
358
+ "message": "Store and use the API token for further communication"
359
+ },
360
+ "data": {
361
+ "api_token": "cfc0eb18c8f3b5922e702f1e10437fa1"
362
+ }
363
+ }</pre>
364
+ </div>
365
+ </div>
366
+ </div>
367
+
368
+ <div class="panel panel-default panel-negative" style="width:100%;">
369
+ <div class="panel-heading">
370
+ <h4 class="panel-title">
371
+ <a data-toggle="collapse" data-parent="#verify-neg-1" href="#verify-neg-1" class="collapsed" aria-expanded="false">
372
+ Negative Case - 1 - should set proper errors if no input is given
373
+ </a>
374
+ </h4>
375
+ </div>
376
+ <div id="verify-neg-1" class="panel-collapse collapse" aria-expanded="false" style="height: 0px;">
377
+ <div class="panel-body">
378
+ <div class="mt-10 mb-20">Input</div>
379
+ <pre>
380
+ {
381
+ "uuid": "asd907asdba78sbda",
382
+ "mobile_number": "292991230",
383
+ "dialing_prefix": "+91"
384
+ }</pre>
385
+
386
+ <div class="mt-10 mb-20">Output</div>
387
+ <pre>
388
+ {
389
+ "success": false,
390
+ "errors": {
391
+ "heading": "OTP verification was failed",
392
+ "message": "Make sure that you enter the OTP correctly.",
393
+ "details": {
394
+ "otp": "doesn't match with our database"
395
+ }
396
+ }
397
+ }</pre>
398
+ </div>
399
+ </div>
400
+ </div>
401
+
402
+ <div class="panel panel-default panel-negative" style="width:100%;">
403
+ <div class="panel-heading">
404
+ <h4 class="panel-title">
405
+ <a data-toggle="collapse" data-parent="#verify-neg-2" href="#verify-neg-2" class="collapsed" aria-expanded="false">
406
+ Negative Case - 2 - should respond with proper errors if the otp is already used once
407
+ </a>
408
+ </h4>
409
+ </div>
410
+ <div id="verify-neg-2" class="panel-collapse collapse" aria-expanded="false" style="height: 0px;">
411
+ <div class="panel-body">
412
+ <div class="mt-10 mb-20">Input</div>
413
+ <pre>
414
+ {
415
+ "otp": "11111",
416
+ "uuid": "asd907asdba78sbda",
417
+ "mobile_number": "292991230",
418
+ "dialing_prefix": "+91"
419
+ }</pre>
420
+
421
+ <div class="mt-10 mb-20">Output</div>
422
+ <pre>
423
+ {
424
+ "success": false,
425
+ "errors": {
426
+ "heading": "OTP verification was failed",
427
+ "message": "Make sure that you enter the OTP correctly.",
428
+ "details": {
429
+ "otp_verified_at": "This OTP was already used."
430
+ }
431
+ }
432
+ }</pre>
433
+ </div>
434
+ </div>
435
+ </div>
436
+
437
+ <div class="panel panel-default panel-negative" style="width:100%;">
438
+ <div class="panel-heading">
439
+ <h4 class="panel-title">
440
+ <a data-toggle="collapse" data-parent="#verify-neg-3" href="#verify-neg-3" class="collapsed" aria-expanded="false">
441
+ Negative Case - 2 - should respond with proper errors if the device is blocked
442
+ </a>
443
+ </h4>
444
+ </div>
445
+ <div id="verify-neg-3" class="panel-collapse collapse" aria-expanded="false" style="height: 0px;">
446
+ <div class="panel-body">
447
+ <div class="mt-10 mb-20">Input</div>
448
+ <pre>
449
+ {
450
+ "otp": "11111",
451
+ "uuid": "asd907asdba78sbda",
452
+ "mobile_number": "292991230",
453
+ "dialing_prefix": "+91"
454
+ }</pre>
455
+
456
+ <div class="mt-10 mb-20">Output</div>
457
+ <pre>
458
+ {
459
+ "success": false,
460
+ "errors": {
461
+ "heading": "This device is blocked.",
462
+ "message": "You must have done some mal-practices.",
463
+ "details": {}
464
+ }
465
+ }</pre>
466
+ </div>
467
+ </div>
468
+ </div>
469
+ </div>
470
+ </div>
471
+
472
+ <!-- Search Results Tab -->
473
+ <div class="tab-pane" id="terms_and_conditions">
474
+ <h3>
475
+ <span class="text-success">Accept TAC API</span><br>
476
+ <small>/api/v1/accept_tac</small>
477
+ </h3>
478
+ </div>
479
+
480
+ <!-- Search Results Tab -->
481
+ <div class="tab-pane" id="create_profile">
482
+ <h3>
483
+ <span class="text-success">Create Profile API</span><br>
484
+ <small>/api/v1/create_profile</small>
485
+ </h3>
486
+ </div>
487
+
488
+ <!-- Search Results Tab -->
489
+ <div class="tab-pane" id="create_profile">
490
+ <h3>
491
+ <span class="text-success">Update Profile API</span><br>
492
+ <small>/api/v1/update_profile</small>
493
+ </h3>
494
+ </div>
495
+ </div>
496
+
497
+ </div>
498
+
499
+ <style type="text/css">
500
+ .panel-positive h4.panel-title a { color: #68b828 !important; }
501
+ .panel-negative h4.panel-title a { color: #cc3f44 !important; }
502
+ </style>
File without changes
@@ -9,6 +9,9 @@ en:
9
9
  otp_sent:
10
10
  heading: "An OTP has been sent to you"
11
11
  message: "Check your mobile for new message from us."
12
+ new_otp_sent:
13
+ heading: "An new OTP has been sent to you"
14
+ message: "Check your mobile for new message from us."
12
15
  otp_not_sent:
13
16
  heading: "OTP was not sent"
14
17
  message: "There was some technical glitch and OTP was not sent. Try after some time."
@@ -9,6 +9,9 @@ en:
9
9
  otp_sent:
10
10
  heading: "An OTP has been sent to you"
11
11
  message: "Check your mobile for new message from us."
12
+ new_otp_sent:
13
+ heading: "An new OTP has been sent to you"
14
+ message: "Check your mobile for new message from us."
12
15
  otp_not_sent:
13
16
  heading: "OTP was not sent"
14
17
  message: "There was some technical glitch and OTP was not sent. Try after some time."
data/config/routes.rb CHANGED
@@ -43,4 +43,10 @@ Usman::Engine.routes.draw do
43
43
  end
44
44
  end
45
45
 
46
+ get '/api/v1/docs/usman', to: "docs#index", as: :docs_index
47
+
48
+ #get "/api/v1/docs/register", :controller => "/usman/api_docs"
49
+ #get "/api/v1/docs/resend_otp", :controller => "/usman/api_docs"
50
+ #get "/api/v1/docs/verify", :controller => "/usman/api_docs"
51
+
46
52
  end
data/lib/usman/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Usman
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: usman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - kpvarma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-25 00:00:00.000000000 Z
11
+ date: 2017-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -350,6 +350,7 @@ files:
350
350
  - app/controllers/usman/admin_controller.rb
351
351
  - app/controllers/usman/application_controller.rb
352
352
  - app/controllers/usman/dashboard_controller.rb
353
+ - app/controllers/usman/docs_controller.rb
353
354
  - app/controllers/usman/features_controller.rb
354
355
  - app/controllers/usman/my_account_controller.rb
355
356
  - app/controllers/usman/permissions_controller.rb
@@ -383,6 +384,8 @@ files:
383
384
  - app/views/layouts/kuppayam/_sidebar.html.erb
384
385
  - app/views/layouts/kuppayam/profile.html.erb
385
386
  - app/views/usman/dashboard/index.html.erb
387
+ - app/views/usman/docs/index.html.erb
388
+ - app/views/usman/docs/register.html.erb
386
389
  - app/views/usman/features/_form.html.erb
387
390
  - app/views/usman/features/_index.html.erb
388
391
  - app/views/usman/features/_row.html.erb