api_rescuable 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/api_rescuable.rb +66 -0
  3. metadata +73 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bbf80f61d375526bb90f69caa754724174b84909
4
+ data.tar.gz: 3e6f909bb7b590665a5d9d5aa9b0176753d98d27
5
+ SHA512:
6
+ metadata.gz: 1127e814d58b14e3789bdebfd2376fa09be4c81470aaf74d3c3801231210805f503da25b7e3b8de9def5298e393ef5d001072893783af1609d52585a34614b64
7
+ data.tar.gz: 9af297a4d70fc179daf30a00353ced59cc31b1294a39d151aa2f44b57fd43e586746e017e10c40da4480f8ca1a0050172ff9c6b1e1a1a0a000335c8f05aafa72
@@ -0,0 +1,66 @@
1
+ module ApiRescuable
2
+ private
3
+
4
+ def handle_record_not_found
5
+ render json: { description: 'Not Found',
6
+ messages: [] },
7
+ status: :not_found
8
+ end
9
+
10
+ def handle_record_invalid(exception)
11
+ render json: { description: 'Invalid entity',
12
+ messages: [exception.to_s] },
13
+ status: :unprocessable_entity
14
+ end
15
+
16
+ def handle_forbidden_attributes(exception)
17
+ render json: { description: 'Forbidden attribute(s)',
18
+ messages: [exception.to_s] },
19
+ status: :bad_request
20
+ end
21
+
22
+ def handle_parameter_missing(exception)
23
+ render json: { description: 'Missing Param',
24
+ messages: [exception.to_s] },
25
+ status: :bad_request
26
+ end
27
+
28
+ def handle_unauthorized_access(exception)
29
+ render json: { description: 'You are not authorized for that action',
30
+ messages: [] },
31
+ status: :unauthorized
32
+ end
33
+
34
+ public
35
+
36
+ def self.included(base)
37
+ base.send :extend, ClassMethods
38
+ end
39
+
40
+ module ClassMethods
41
+ def rescue_from_api(*klasses)
42
+ rescuer = {
43
+ # ActiveRecord
44
+ ActiveRecord::RecordNotFound => :handle_record_not_found,
45
+ ActiveRecord::RecordInvalid => :handle_record_invalid,
46
+
47
+ # Strong Params
48
+ ActiveModel::ForbiddenAttributesError => :handle_forbidden_attributes,
49
+ ActionController::ParameterMissing => :handle_parameter_missing,
50
+
51
+ # Authorization
52
+ CanCan::AccessDenied => :handle_unauthorized_access,
53
+ }
54
+
55
+ # Add ActiveSupport's rescue_from for all classes given in the list
56
+ klasses.each do |klass|
57
+ rescue_from klass, with: rescuer[klass]
58
+ end
59
+
60
+ # Undefine the handlers for classes not given in the list
61
+ (rescuer.keys - klasses).each do |klass|
62
+ undef_method rescuer[klass]
63
+ end
64
+ end
65
+ end
66
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: api_rescuable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Tejas Bubane
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 5.0.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 5.0.2
41
+ description: Quick and easy way to handle common exceptions in Rails APIs
42
+ email: tejasbubane@gmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/api_rescuable.rb
48
+ homepage: https://github.com/tejasbubane/api_rescuable
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements:
67
+ - none
68
+ rubyforge_project:
69
+ rubygems_version: 2.6.10
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: Exception Handler for Rails APIs
73
+ test_files: []