api_rescuable 0.1.0

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