custom_exceptions 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ae5d982b3bc58a5d95669fd012157b977cd61bb7
4
+ data.tar.gz: d69b401d337cb84a763ac4b4da36cc682e8642a5
5
+ SHA512:
6
+ metadata.gz: 048f2a46a725168716cbb4ba12c2dd395d86c57385a513b0a6b71275aa0b76ca7450d69e3d1b8eae2a745157237c5905cee1df505e1b14a58bb5d573e4a584e2
7
+ data.tar.gz: 985d7a33c1fbf7ef7ad7826e8bc8e8dfb0b1e5ab8ba1cec2bceb08e38442c15d85dcfd518f65138d7d73498ff661cfc6da6634cacd0f57fd2bd311b200110cc3
@@ -0,0 +1,4 @@
1
+ module CustomExceptions
2
+ class Base < StandardError
3
+ end
4
+ end
@@ -0,0 +1,5 @@
1
+ class String
2
+ def classify
3
+ self.split('_').collect!{ |w| w.capitalize }.join
4
+ end
5
+ end
@@ -0,0 +1,66 @@
1
+ require_relative 'custom_exceptions/base'
2
+ require_relative 'custom_exceptions/string'
3
+ require 'yaml'
4
+
5
+ module CustomExceptions
6
+
7
+ VERSION = "0.0.1"
8
+
9
+ class << self
10
+
11
+ def load(file)
12
+ @config = YAML.load_file(file)
13
+ define_exceptions
14
+ end
15
+
16
+ def error_constants
17
+ @config.each_with_object({}) do |const, hash|
18
+ hash[const.first] = const.last
19
+ end
20
+ end
21
+
22
+ def define_exceptions
23
+ error_constants.each do |name, error_body|
24
+ klass = Class.new(CustomExceptions::Base)
25
+ klass.send(:define_method, :initialize) do |options={}|
26
+ @metadata = options[:metadata]
27
+ @code = options[:code]
28
+ @message = options[:message]
29
+ @status = options[:status]
30
+ end
31
+ klass.send(:define_method, :metadata) { @metadata || error_body["metadata"] }
32
+ klass.send(:define_method, :code) { @code || error_body["code"]}
33
+ klass.send(:define_method, :message) { @message || error_body["message"] }
34
+ klass.send(:define_method, :status) { @status || error_body["status"]}
35
+ CustomExceptions.send(:remove_const, name.to_s.classify) if CustomExceptions.const_defined?(name.to_s.classify)
36
+ CustomExceptions.const_set(name.to_s.classify, klass)
37
+ end
38
+ end
39
+
40
+ def exception(class_name)
41
+ if const_defined?(class_name)
42
+ CustomExceptions.const_get(class_name)
43
+ else
44
+ runtime_exception(class_name)
45
+ end
46
+ end
47
+
48
+ def runtime_exception(name)
49
+ klass = Class.new(CustomExceptions::Base)
50
+ klass.send(:define_method, :initialize) do |options={}|
51
+ @metadata = options[:metadata]
52
+ @code = options[:code]
53
+ @message = options[:message] || name.to_s.split("_").join(' ').downcase.capitalize
54
+ @status = options[:status] || 500
55
+ end
56
+ klass.send(:define_method, :metadata) { @metadata }
57
+ klass.send(:define_method, :code) { @code }
58
+ klass.send(:define_method, :message) { @message }
59
+ klass.send(:define_method, :status) { @status }
60
+ CustomExceptions.send(:remove_const, name.to_s.classify) if CustomExceptions.const_defined?(name.to_s.classify)
61
+ CustomExceptions.const_set(name.to_s.classify, klass)
62
+ end
63
+
64
+ end
65
+
66
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: custom_exceptions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sreekanth GS
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
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: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: CustomExceptions allows generation of custom exception classes from yaml
42
+ config files or at runtime to be used in Ruby or RubyonRails
43
+ email: mail@sreekanth.in
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/custom_exceptions.rb
49
+ - lib/custom_exceptions/base.rb
50
+ - lib/custom_exceptions/string.rb
51
+ homepage: http://github.com/sreekanthgs/custom_exceptions
52
+ licenses: []
53
+ metadata: {}
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubyforge_project:
70
+ rubygems_version: 2.5.1
71
+ signing_key:
72
+ specification_version: 4
73
+ summary: CustomExceptions generates custom exception classes to be used in Ruby or
74
+ RubyonRails
75
+ test_files: []