custom_exceptions 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
+ 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: []